1999-03-10 Alexandre Oliva <oliva@dcc.unicamp.br>
+ * libltdl/configure.in (libltdl_cv_need_uscore): do not assume
+ dlfcn.h and LTDL_LAZY exist; use LTDL_GLOBAL and LTDL_LAZY_OR_NOW.
+ This test is likely to fail if self-dlopening does not work,
+ especially because we do not link the program with
+ -export-dynamic. Let's just hope that platforms whose symbol
+ names start with underscores will also accept underscores for
+ dlopen. We should probably use libtool to compile and link this
+ test, so that we can use -export-dynamic.
+
* mdemo/Makefile.am (@LIBLTDL@): depend on ../libltdl/config.h
* configure.in: fix AC_OUTPUT_COMMANDS for ltconfig and ltmain.sh
AC_CACHE_CHECK([whether we have to add an underscore for dlsym],
libltdl_cv_need_uscore, [dnl
AC_TRY_RUN([
+#if HAVE_DLFCN_H
#include <dlfcn.h>
+#endif
+
#include <stdio.h>
+
+#ifdef RTLD_GLOBAL
+# define LTDL_GLOBAL RTLD_GLOBAL
+#else
+# ifdef DL_GLOBAL
+# define LTDL_GLOBAL DL_GLOBAL
+# else
+# define LTDL_GLOBAL 0
+# endif
+#endif
+
+/* We may have to define LTDL_LAZY_OR_NOW in the command line if we
+ find out it does not work in some platform. */
+#ifndef LTDL_LAZY_OR_NOW
+# ifdef RTLD_LAZY
+# define LTDL_LAZY_OR_NOW RTLD_LAZY
+# else
+# ifdef DL_LAZY
+# define LTDL_LAZY_OR_NOW DL_LAZY
+# else
+# ifdef RTLD_NOW
+# define LTDL_LAZY_OR_NOW RTLD_NOW
+# else
+# ifdef DL_NOW
+# define LTDL_LAZY_OR_NOW DL_NOW
+# else
+# define LTDL_LAZY_OR_NOW 0
+# endif
+# endif
+# endif
+# endif
+#endif
+
fnord() { int i=42;}
-main() { void *self, *ptr1, *ptr2; self=dlopen(0,RTLD_LAZY);
+main() { void *self, *ptr1, *ptr2; self=dlopen(0,LTDL_GLOBAL|LTDL_LAZY_OR_NOW);
if(self) { ptr1=dlsym(self,"fnord"); ptr2=dlsym(self,"_fnord");
- if(ptr1 && !ptr2) exit(0); } exit(1); }
+ if(ptr1 && !ptr2) exit(0); } exit(1); }
], libltdl_cv_need_uscore=no, libltdl_cv_need_uscore=yes,
- libltdl_cv_need_uscore=no
+ libltdl_cv_need_uscore=cross
)])
fi
fi