Check for dladdr(), rather than assuming we have it if we have RTLD_DEFAULT
authorJon TURNEY <jon.turney@dronecode.org.uk>
Sat, 5 Apr 2014 16:11:45 +0000 (17:11 +0100)
committerEmil Velikov <emil.l.velikov@gmail.com>
Mon, 28 Apr 2014 18:11:02 +0000 (19:11 +0100)
Unfortunately, Cygwin defines RTLD_DEFAULT (for glibc compatibility), but can't
provide dladdr(), so add a check for dladdr()

Since I don't think scons is ever used to build for Cygwin, just set HAVE_DLADDR
in SConscript, assuming that if we have RTLD_DEFAULT, we have dladdr().

Cc: Jonathan Gray <jsg@jsg.id.au>
Signed-off-by: Jon TURNEY <jon.turney@dronecode.org.uk>
Reviewed-by: Eric Anholt <eric@anholt.net>
configure.ac
src/mesa/drivers/dri/common/SConscript
src/mesa/drivers/dri/common/megadriver_stub.c

index 0950ed65eea9e7268850c9435fa03c813ed39dce..bf543c2d0d691da167d22b29a2e77632c62e62b2 100644 (file)
@@ -480,6 +480,12 @@ AC_CHECK_FUNC([dlopen], [DEFINES="$DEFINES -DHAVE_DLOPEN"],
        [DEFINES="$DEFINES -DHAVE_DLOPEN"; DLOPEN_LIBS="-ldl"])])
 AC_SUBST([DLOPEN_LIBS])
 
+dnl Check if that library also has dladdr
+save_LDFLAGS="$LDFLAGS"
+LDFLAGS="$LDFLAGS $DLOPEN_LIBS"
+AC_CHECK_FUNCS([dladdr])
+LDFLAGS="$save_LDFLAGS"
+
 case "$host_os" in
 darwin*|mingw*)
     ;;
index 8b15532e3c0649684ea84e6a1f6c2f9e7e3ce1ec..41f6356c32d65bd81b46e0e72fe53694c29e7e5a 100644 (file)
@@ -30,6 +30,7 @@ drienv.Replace(CPPPATH = [
 driswenv = drienv.Clone()
 driswenv.Append(CPPDEFINES = [
     '__NOT_HAVE_DRM_H',
+    'HAVE_DLADDR',
 ])
 
 drienv.PkgUseModules('DRM')
index 7b6d13450cc1ae01a39584103787e0adf361dc0c..d085080a19738ff44aa376c93b338c60e7f11b03 100644 (file)
 
 /* We need GNU extensions to dlfcn.h in order to provide backward
  * compatibility for the older DRI driver loader mechanism. (dladdr,
- * Dl_info, and RTLD_DEFAULT are only defined when _GNU_SOURCE is
- * defined.)
+ * Dl_info, and RTLD_DEFAULT)
  */
-#ifdef RTLD_DEFAULT
+#if defined(RTLD_DEFAULT) && defined(HAVE_DLADDR)
 
 #define MEGADRIVER_STUB_MAX_EXTENSIONS 10
 #define LIB_PATH_SUFFIX "_dri.so"
@@ -148,7 +147,7 @@ megadriver_stub_init(void)
    }
 }
 
-#endif /* RTLD_DEFAULT */
+#endif /* RTLD_DEFAULT && HAVE_DLADDR */
 
 static const
 __DRIconfig **stub_error_init_screen(__DRIscreen *psp)