From 3958a92c729c6588bdd4a39d6d8bc5dadb00b3de Mon Sep 17 00:00:00 2001
From: Alain Frisch <alain@frisch.fr>
Date: Tue, 6 Nov 2007 15:16:56 +0000
Subject: Merge the natdynlink branch into HEAD.

git-svn-id: http://caml.inria.fr/svn/ocaml/trunk@8477 f963ae5c-01c2-4b8c-9fe0-0dff7051ff02
---
 byterun/unix.c | 47 +++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 47 insertions(+)

(limited to 'byterun/unix.c')

diff --git a/byterun/unix.c b/byterun/unix.c
index 3b8bb22e6..7343a0957 100644
--- a/byterun/unix.c
+++ b/byterun/unix.c
@@ -25,6 +25,8 @@
 #ifdef SUPPORT_DYNAMIC_LINKING
 #ifdef HAS_NSLINKMODULE
 #include <mach-o/dyld.h>
+#elif defined(__CYGWIN32__)
+#include "flexdll.h"
 #else
 #include <dlfcn.h>
 #endif
@@ -263,6 +265,11 @@ void * caml_dlsym(void * handle, char * name)
   else return NULL;
 }
 
+void * caml_globalsym(char * name)
+{
+  return NULL;
+}
+
 char * caml_dlerror(void)
 {
   NSLinkEditErrors c;
@@ -273,6 +280,36 @@ char * caml_dlerror(void)
   return (char *) errorString;
 }
 
+#elif defined(__CYGWIN32__)
+/* Use flexdll */
+
+void * caml_dlopen(char * libname, int for_execution)
+{
+  int flags = FLEXDLL_RTLD_GLOBAL;
+  if (!for_execution) flags |= FLEXDLL_RTLD_NOEXEC;
+  return flexdll_dlopen(libname, flags);
+}
+
+void caml_dlclose(void * handle)
+{
+  flexdll_dlclose(handle);
+}
+
+void * caml_dlsym(void * handle, char * name)
+{
+  return flexdll_dlsym(handle, name);
+}
+
+void * caml_globalsym(char * name)
+{
+  return flexdll_dlsym(flexdll_dlopen(NULL,0), name);
+}
+
+char * caml_dlerror(void)
+{
+  return flexdll_dlerror();
+}
+
 #else
 /* Use normal dlopen */
 
@@ -304,6 +341,11 @@ void * caml_dlsym(void * handle, char * name)
   return dlsym(handle, name);
 }
 
+void * caml_globalsym(char * name)
+{
+  return caml_dlsym(dlopen(NULL,RTLD_GLOBAL), name);
+}
+
 char * caml_dlerror(void)
 {
   return dlerror();
@@ -326,6 +368,11 @@ void * caml_dlsym(void * handle, char * name)
   return NULL;
 }
 
+void * caml_globalsym(char * name)
+{
+  return NULL;
+}
+
 char * caml_dlerror(void)
 {
   return "dynamic loading not supported on this platform";
-- 
cgit v1.2.3-70-g09d2