mirror of
git://git.savannah.gnu.org/libtool.git
synced 2025-03-19 15:50:25 +08:00
* libtool.m4 (AC_LIBTOOL_DLOPEN): just set lt_dlopen=yes
(AC_LIBTOOL_SETUP): if lt_dlopen=yes, add --enable-dlopen to libtool_flags; drop --enable-dlopen-self * ltconfig.in: perform all the dirty work of testing for dlopening support, because we need platform-dependent equivalents for -export-dynamic, for self dlopening, and -static, for static self dlopening (dlopen_self_static): new configuration variable that is set to yes only if static programs can dlopen themselves * ltmain.in (-static, -all-static): dlopen_self=dlopen_self_static
This commit is contained in:
parent
477712665e
commit
b933475f97
11
ChangeLog
11
ChangeLog
@ -1,5 +1,16 @@
|
||||
1999-03-10 Alexandre Oliva <oliva@dcc.unicamp.br>
|
||||
|
||||
* libtool.m4 (AC_LIBTOOL_DLOPEN): just set lt_dlopen=yes
|
||||
(AC_LIBTOOL_SETUP): if lt_dlopen=yes, add --enable-dlopen to
|
||||
libtool_flags; drop --enable-dlopen-self
|
||||
* ltconfig.in: perform all the dirty work of testing for dlopening
|
||||
support, because we need platform-dependent equivalents for
|
||||
-export-dynamic, for self dlopening, and -static, for static self
|
||||
dlopening
|
||||
(dlopen_self_static): new configuration variable that is set to
|
||||
yes only if static programs can dlopen themselves
|
||||
* ltmain.in (-static, -all-static): dlopen_self=dlopen_self_static
|
||||
|
||||
* 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,
|
||||
|
45
libtool.m4
vendored
45
libtool.m4
vendored
@ -72,8 +72,7 @@ libtool_flags="--cache-file=$cache_file"
|
||||
test "$enable_shared" = no && libtool_flags="$libtool_flags --disable-shared"
|
||||
test "$enable_static" = no && libtool_flags="$libtool_flags --disable-static"
|
||||
test "$enable_fast_install" = no && libtool_flags="$libtool_flags --disable-fast-install"
|
||||
test "x$lt_cv_dlopen" != xno && libtool_flags="$libtool_flags --enable-dlopen"
|
||||
test "x$lt_cv_dlopen_self" = xyes && libtool_flags="$libtool_flags --enable-dlopen-self"
|
||||
test "$lt_dlopen" = yes && libtool_flags="$libtool_flags --enable-dlopen"
|
||||
test "$silent" = yes && libtool_flags="$libtool_flags --silent"
|
||||
test "$ac_cv_prog_gcc" = yes && libtool_flags="$libtool_flags --with-gcc"
|
||||
test "$ac_cv_prog_gnu_ld" = yes && libtool_flags="$libtool_flags --with-gnu-ld"
|
||||
@ -131,47 +130,7 @@ fi
|
||||
])
|
||||
|
||||
# AC_LIBTOOL_DLOPEN - check for dlopen support
|
||||
AC_DEFUN(AC_LIBTOOL_DLOPEN,
|
||||
[AC_CACHE_VAL(lt_cv_dlopen,
|
||||
[lt_cv_dlopen=no lt_cv_dlopen_libs=
|
||||
AC_CHECK_FUNC(dlopen, [lt_cv_dlopen="dlopen"],
|
||||
[AC_CHECK_LIB(dl, dlopen, [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"],
|
||||
[AC_CHECK_LIB(dld, dld_link, [lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-ldld"],
|
||||
[AC_CHECK_FUNC(shl_load, [lt_cv_dlopen="shl_load"],
|
||||
[AC_CHECK_FUNC(LoadLibrary, [lt_cv_dlopen="LoadLibrary"])]
|
||||
)]
|
||||
)]
|
||||
)]
|
||||
)])
|
||||
|
||||
case "$lt_cv_dlopen" in
|
||||
dlopen)
|
||||
LT_SAVE_LIBS="$LIBS"
|
||||
LT_SAVE_CPPFLAGS="$CPPFLAGS"
|
||||
LIBS="$lt_cv_dlopen_libs $LIBS"
|
||||
AC_CHECK_HEADER(dlfcn.h, [CPPFLAGS="-DHAVE_DLFCN_H $CPPFLAGS"])
|
||||
AC_CACHE_CHECK([whether a program can dlopen itself], lt_cv_dlopen_self,
|
||||
[AC_TRY_RUN([
|
||||
#if HAVE_DLFCN_H
|
||||
#include <dlfcn.h>
|
||||
#endif
|
||||
|
||||
#include <stdio.h>
|
||||
fnord() { int i=42;}
|
||||
main() { void *self, *ptr1, *ptr2; self=dlopen(0,0);
|
||||
if(self) { ptr1=dlsym(self,"fnord"); ptr2=dlsym(self,"_fnord");
|
||||
if(ptr1 || ptr2) exit(0); } exit(1); }
|
||||
], lt_cv_dlopen_self=no, lt_cv_dlopen_self=yes, lt_cv_dlopen_self=cross)])
|
||||
LIBS="$LT_SAVE_LIBS"
|
||||
CPPFLAGS="$LT_SAVE_CPPFLAGS"
|
||||
;;
|
||||
# We should probably test other for NULL support in other dlopening
|
||||
# mechanisms too.
|
||||
*)
|
||||
lt_cv_dlopen_self=no
|
||||
;;
|
||||
esac
|
||||
])
|
||||
AC_DEFUN(AC_LIBTOOL_DLOPEN, [lt_dlopen=yes])
|
||||
|
||||
# AC_ENABLE_SHARED - implement the --enable-shared flag
|
||||
# Usage: AC_ENABLE_SHARED[(DEFAULT)]
|
||||
|
443
ltconfig.in
443
ltconfig.in
@ -179,7 +179,6 @@ enable_shared=yes
|
||||
enable_static=yes
|
||||
enable_fast_install=yes
|
||||
enable_dlopen=unknown
|
||||
enable_dlopen_self=unknown
|
||||
ltmain=
|
||||
silent=
|
||||
srcdir=
|
||||
@ -192,6 +191,7 @@ verify_host=yes
|
||||
with_gcc=no
|
||||
with_gnu_ld=no
|
||||
need_locks=yes
|
||||
ac_ext=c
|
||||
objext=o
|
||||
libext=a
|
||||
cache_file=
|
||||
@ -269,8 +269,6 @@ EOM
|
||||
|
||||
--enable-dlopen) enable_dlopen=yes ;;
|
||||
|
||||
--enable-dlopen-self) enable_dlopen_self=yes ;;
|
||||
|
||||
--quiet | --silent) silent=yes ;;
|
||||
|
||||
--srcdir) prev=srcdir ;;
|
||||
@ -1898,6 +1896,442 @@ fi
|
||||
rmdir .libs 2>/dev/null
|
||||
echo "$ac_t$objdir" 1>&6
|
||||
|
||||
if test "x$enable_dlopen" != xyes; then
|
||||
enable_dlopen=no
|
||||
enable_dlopen_self=no
|
||||
enable_dlopen_self_static=no
|
||||
else
|
||||
if eval "test \"`echo '$''{'lt_cv_dlopen'+set}'`\" != set"; then
|
||||
lt_cv_dlopen=no lt_cv_dlopen_libs=
|
||||
echo $ac_n "checking for dlopen""... $ac_c" 1>&6
|
||||
echo "configure:1381: checking for dlopen" >&5
|
||||
if eval "test \"`echo '$''{'ac_cv_func_dlopen'+set}'`\" = set"; then
|
||||
echo $ac_n "(cached) $ac_c" 1>&6
|
||||
else
|
||||
cat > conftest.$ac_ext <<EOF
|
||||
#line @LINENO@ "ltconfig"
|
||||
/* System header to define __stub macros and hopefully few prototypes,
|
||||
which can conflict with char dlopen(); below. */
|
||||
#include <assert.h>
|
||||
/* Override any gcc2 internal prototype to avoid an error. */
|
||||
/* We use char because int might match the return type of a gcc2
|
||||
builtin and then its argument prototype would still apply. */
|
||||
char dlopen();
|
||||
|
||||
int main() {
|
||||
|
||||
/* The GNU C library defines this for functions which it implements
|
||||
to always fail with ENOSYS. Some functions are actually named
|
||||
something starting with __ and the normal name is an alias. */
|
||||
#if defined (__stub_dlopen) || defined (__stub___dlopen)
|
||||
choke me
|
||||
#else
|
||||
dlopen();
|
||||
#endif
|
||||
|
||||
; return 0; }
|
||||
EOF
|
||||
if { (eval echo configure:1409: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
|
||||
rm -rf conftest*
|
||||
eval "ac_cv_func_dlopen=yes"
|
||||
else
|
||||
echo "configure: failed program was:" >&5
|
||||
cat conftest.$ac_ext >&5
|
||||
rm -rf conftest*
|
||||
eval "ac_cv_func_dlopen=no"
|
||||
fi
|
||||
rm -f conftest*
|
||||
fi
|
||||
|
||||
if eval "test \"`echo '$ac_cv_func_'dlopen`\" = yes"; then
|
||||
echo "$ac_t""yes" 1>&6
|
||||
lt_cv_dlopen="dlopen"
|
||||
else
|
||||
echo "$ac_t""no" 1>&6
|
||||
echo $ac_n "checking for dlopen in -ldl""... $ac_c" 1>&6
|
||||
echo "configure:1427: checking for dlopen in -ldl" >&5
|
||||
ac_lib_var=`echo dl'_'dlopen | sed 'y%./+-%__p_%'`
|
||||
if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
|
||||
echo $ac_n "(cached) $ac_c" 1>&6
|
||||
else
|
||||
ac_save_LIBS="$LIBS"
|
||||
LIBS="-ldl $LIBS"
|
||||
cat > conftest.$ac_ext <<EOF
|
||||
#line @LINENO@ "ltconfig"
|
||||
/* Override any gcc2 internal prototype to avoid an error. */
|
||||
/* We use char because int might match the return type of a gcc2
|
||||
builtin and then its argument prototype would still apply. */
|
||||
char dlopen();
|
||||
|
||||
int main() {
|
||||
dlopen()
|
||||
; return 0; }
|
||||
EOF
|
||||
if { (eval echo configure:1446: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
|
||||
rm -rf conftest*
|
||||
eval "ac_cv_lib_$ac_lib_var=yes"
|
||||
else
|
||||
echo "configure: failed program was:" >&5
|
||||
cat conftest.$ac_ext >&5
|
||||
rm -rf conftest*
|
||||
eval "ac_cv_lib_$ac_lib_var=no"
|
||||
fi
|
||||
rm -f conftest*
|
||||
LIBS="$ac_save_LIBS"
|
||||
|
||||
fi
|
||||
if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
|
||||
echo "$ac_t""yes" 1>&6
|
||||
lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"
|
||||
else
|
||||
echo "$ac_t""no" 1>&6
|
||||
echo $ac_n "checking for dld_link in -ldld""... $ac_c" 1>&6
|
||||
echo "configure:1465: checking for dld_link in -ldld" >&5
|
||||
ac_lib_var=`echo dld'_'dld_link | sed 'y%./+-%__p_%'`
|
||||
if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
|
||||
echo $ac_n "(cached) $ac_c" 1>&6
|
||||
else
|
||||
ac_save_LIBS="$LIBS"
|
||||
LIBS="-ldld $LIBS"
|
||||
cat > conftest.$ac_ext <<EOF
|
||||
#line @LINENO@ "ltconfig"
|
||||
/* Override any gcc2 internal prototype to avoid an error. */
|
||||
/* We use char because int might match the return type of a gcc2
|
||||
builtin and then its argument prototype would still apply. */
|
||||
char dld_link();
|
||||
|
||||
int main() {
|
||||
dld_link()
|
||||
; return 0; }
|
||||
EOF
|
||||
if { (eval echo configure:1484: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
|
||||
rm -rf conftest*
|
||||
eval "ac_cv_lib_$ac_lib_var=yes"
|
||||
else
|
||||
echo "configure: failed program was:" >&5
|
||||
cat conftest.$ac_ext >&5
|
||||
rm -rf conftest*
|
||||
eval "ac_cv_lib_$ac_lib_var=no"
|
||||
fi
|
||||
rm -f conftest*
|
||||
LIBS="$ac_save_LIBS"
|
||||
|
||||
fi
|
||||
if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
|
||||
echo "$ac_t""yes" 1>&6
|
||||
lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-ldld"
|
||||
else
|
||||
echo "$ac_t""no" 1>&6
|
||||
echo $ac_n "checking for shl_load""... $ac_c" 1>&6
|
||||
echo "configure:1503: checking for shl_load" >&5
|
||||
if eval "test \"`echo '$''{'ac_cv_func_shl_load'+set}'`\" = set"; then
|
||||
echo $ac_n "(cached) $ac_c" 1>&6
|
||||
else
|
||||
cat > conftest.$ac_ext <<EOF
|
||||
#line @LINENO@ "ltconfig"
|
||||
/* System header to define __stub macros and hopefully few prototypes,
|
||||
which can conflict with char shl_load(); below. */
|
||||
#include <assert.h>
|
||||
/* Override any gcc2 internal prototype to avoid an error. */
|
||||
/* We use char because int might match the return type of a gcc2
|
||||
builtin and then its argument prototype would still apply. */
|
||||
char shl_load();
|
||||
|
||||
int main() {
|
||||
|
||||
/* The GNU C library defines this for functions which it implements
|
||||
to always fail with ENOSYS. Some functions are actually named
|
||||
something starting with __ and the normal name is an alias. */
|
||||
#if defined (__stub_shl_load) || defined (__stub___shl_load)
|
||||
choke me
|
||||
#else
|
||||
shl_load();
|
||||
#endif
|
||||
|
||||
; return 0; }
|
||||
EOF
|
||||
if { (eval echo configure:1531: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
|
||||
rm -rf conftest*
|
||||
eval "ac_cv_func_shl_load=yes"
|
||||
else
|
||||
echo "configure: failed program was:" >&5
|
||||
cat conftest.$ac_ext >&5
|
||||
rm -rf conftest*
|
||||
eval "ac_cv_func_shl_load=no"
|
||||
fi
|
||||
rm -f conftest*
|
||||
fi
|
||||
|
||||
if eval "test \"`echo '$ac_cv_func_'shl_load`\" = yes"; then
|
||||
echo "$ac_t""yes" 1>&6
|
||||
lt_cv_dlopen="shl_load"
|
||||
else
|
||||
echo "$ac_t""no" 1>&6
|
||||
echo $ac_n "checking for LoadLibrary""... $ac_c" 1>&6
|
||||
echo "configure:1549: checking for LoadLibrary" >&5
|
||||
if eval "test \"`echo '$''{'ac_cv_func_LoadLibrary'+set}'`\" = set"; then
|
||||
echo $ac_n "(cached) $ac_c" 1>&6
|
||||
else
|
||||
cat > conftest.$ac_ext <<EOF
|
||||
#line @LINENO@ "ltconfig"
|
||||
/* System header to define __stub macros and hopefully few prototypes,
|
||||
which can conflict with char LoadLibrary(); below. */
|
||||
#include <assert.h>
|
||||
/* Override any gcc2 internal prototype to avoid an error. */
|
||||
/* We use char because int might match the return type of a gcc2
|
||||
builtin and then its argument prototype would still apply. */
|
||||
char LoadLibrary();
|
||||
|
||||
int main() {
|
||||
|
||||
/* The GNU C library defines this for functions which it implements
|
||||
to always fail with ENOSYS. Some functions are actually named
|
||||
something starting with __ and the normal name is an alias. */
|
||||
#if defined (__stub_LoadLibrary) || defined (__stub___LoadLibrary)
|
||||
choke me
|
||||
#else
|
||||
LoadLibrary();
|
||||
#endif
|
||||
|
||||
; return 0; }
|
||||
EOF
|
||||
if { (eval echo configure:1577: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
|
||||
rm -rf conftest*
|
||||
eval "ac_cv_func_LoadLibrary=yes"
|
||||
else
|
||||
echo "configure: failed program was:" >&5
|
||||
cat conftest.$ac_ext >&5
|
||||
rm -rf conftest*
|
||||
eval "ac_cv_func_LoadLibrary=no"
|
||||
fi
|
||||
rm -f conftest*
|
||||
fi
|
||||
|
||||
if eval "test \"`echo '$ac_cv_func_'LoadLibrary`\" = yes"; then
|
||||
echo "$ac_t""yes" 1>&6
|
||||
lt_cv_dlopen="LoadLibrary"
|
||||
else
|
||||
echo "$ac_t""no" 1>&6
|
||||
fi
|
||||
|
||||
|
||||
fi
|
||||
|
||||
|
||||
fi
|
||||
|
||||
|
||||
fi
|
||||
|
||||
|
||||
fi
|
||||
|
||||
fi
|
||||
|
||||
if test "x$lt_cv_dlopen" != xno; then
|
||||
enable_dlopen=yes
|
||||
fi
|
||||
|
||||
case "$lt_cv_dlopen" in
|
||||
dlopen)
|
||||
for ac_hdr in dlfcn.h; do
|
||||
ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
|
||||
echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
|
||||
echo "configure:2259: checking for $ac_hdr" >&5
|
||||
if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
|
||||
echo $ac_n "(cached) $ac_c" 1>&6
|
||||
else
|
||||
cat > conftest.$ac_ext <<EOF
|
||||
#line @LINENO@ "ltconfig"
|
||||
#include <$ac_hdr>
|
||||
int fnord() { return 0; }
|
||||
EOF
|
||||
ac_try="$ac_compile conftest.$ac_ext >/dev/null 2>conftest.out"
|
||||
{ (eval echo configure:2269: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
|
||||
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
|
||||
if test -z "$ac_err"; then
|
||||
rm -rf conftest*
|
||||
eval "ac_cv_header_$ac_safe=yes"
|
||||
else
|
||||
echo "$ac_err" >&5
|
||||
echo "configure: failed program was:" >&5
|
||||
cat conftest.$ac_ext >&5
|
||||
rm -rf conftest*
|
||||
eval "ac_cv_header_$ac_safe=no"
|
||||
fi
|
||||
rm -f conftest*
|
||||
fi
|
||||
if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then
|
||||
echo "$ac_t""yes" 1>&6
|
||||
else
|
||||
echo "$ac_t""no" 1>&6
|
||||
fi
|
||||
done
|
||||
|
||||
if test "x$ac_cv_header_dlfcn_h" = xyes; then
|
||||
CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H"
|
||||
fi
|
||||
eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\"
|
||||
LIBS="$lt_cv_dlopen_libs $LIBS"
|
||||
|
||||
echo $ac_n "checking whether a program can dlopen itself""... $ac_c" 1>&6
|
||||
echo "configure:1650: checking whether a program can dlopen itself" >&5
|
||||
if test "${lt_cv_dlopen_self+set}" = set; then
|
||||
echo $ac_n "(cached) $ac_c" 1>&6
|
||||
else
|
||||
if test "$cross_compiling" = yes; then
|
||||
lt_cv_dlopen_self=cross
|
||||
else
|
||||
cat > conftest.c <<EOF
|
||||
#line @LINENO@ "ltconfig"
|
||||
|
||||
#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,LTDL_GLOBAL|LTDL_LAZY_OR_NOW);
|
||||
if(self) { ptr1=dlsym(self,"fnord"); ptr2=dlsym(self,"_fnord");
|
||||
if(ptr1 || ptr2) exit(0); } exit(1); }
|
||||
|
||||
EOF
|
||||
if { (eval echo configure:@LINENO@: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null
|
||||
then
|
||||
lt_cv_dlopen_self=yes
|
||||
else
|
||||
echo "configure: failed program was:" >&5
|
||||
cat conftest.$ac_ext >&5
|
||||
rm -fr conftest*
|
||||
lt_cv_dlopen_self=no
|
||||
fi
|
||||
rm -fr conftest*
|
||||
fi
|
||||
|
||||
fi
|
||||
|
||||
echo "$ac_t""$lt_cv_dlopen_self" 1>&6
|
||||
|
||||
if test "$lt_cv_dlopen_self" = yes; then
|
||||
LDFLAGS="$LDFLAGS $link_static_flag"
|
||||
echo $ac_n "checking whether a statically linked program can dlopen itself""... $ac_c" 1>&6
|
||||
echo "configure:1650: checking whether a statically linked program can dlopen itself" >&5
|
||||
if test "${lt_cv_dlopen_self_static+set}" = set; then
|
||||
echo $ac_n "(cached) $ac_c" 1>&6
|
||||
else
|
||||
if test "$cross_compiling" = yes; then
|
||||
lt_cv_dlopen_self_static=cross
|
||||
else
|
||||
cat > conftest.c <<EOF
|
||||
#line @LINENO@ "ltconfig"
|
||||
|
||||
#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,LTDL_GLOBAL|LTDL_LAZY_OR_NOW);
|
||||
if(self) { ptr1=dlsym(self,"fnord"); ptr2=dlsym(self,"_fnord");
|
||||
if(ptr1 || ptr2) exit(0); } exit(1); }
|
||||
|
||||
EOF
|
||||
if { (eval echo configure:@LINENO@: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null
|
||||
then
|
||||
lt_cv_dlopen_self_static=yes
|
||||
else
|
||||
echo "configure: failed program was:" >&5
|
||||
cat conftest.$ac_ext >&5
|
||||
rm -fr conftest*
|
||||
lt_cv_dlopen_self_static=no
|
||||
fi
|
||||
rm -fr conftest*
|
||||
fi
|
||||
|
||||
fi
|
||||
|
||||
echo "$ac_t""$lt_cv_dlopen_self_static" 1>&6
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
|
||||
case "$lt_cv_dlopen_self" in
|
||||
yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;;
|
||||
*) enable_dlopen_self=unknown ;;
|
||||
esac
|
||||
|
||||
case "$lt_cv_dlopen_self_static" in
|
||||
yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;;
|
||||
*) enable_dlopen_self_static=unknown ;;
|
||||
esac
|
||||
fi
|
||||
|
||||
# Copy echo and quote the copy, instead of the original, because it is
|
||||
# used later.
|
||||
ltecho="$echo"
|
||||
@ -2104,6 +2538,9 @@ dlopen=$enable_dlopen
|
||||
# Whether dlopen of programs is supported.
|
||||
dlopen_self=$enable_dlopen_self
|
||||
|
||||
# Whether dlopen of statically linked programs is supported.
|
||||
dlopen_self_static=$enable_dlopen_self_static
|
||||
|
||||
# Compiler flag to prevent dynamic linking.
|
||||
link_static_flag=$link_static_flag
|
||||
|
||||
|
10
ltmain.in
10
ltmain.in
@ -927,10 +927,7 @@ compiler."
|
||||
if test -n "$link_static_flag"; then
|
||||
compile_command="$compile_command $link_static_flag"
|
||||
finalize_command="$finalize_command $link_static_flag"
|
||||
# Some platforms do not support self-dlopening with static
|
||||
# linking. Assume self-dlopening does not work in this case
|
||||
# till we figure out how to test it at configure time
|
||||
dlopen_self=no
|
||||
dlopen_self=$dlopen_self_static
|
||||
fi
|
||||
continue
|
||||
;;
|
||||
@ -1058,10 +1055,7 @@ compiler."
|
||||
if test -z "$pic_flag" && test -n "$link_static_flag"; then
|
||||
compile_command="$compile_command $link_static_flag"
|
||||
finalize_command="$finalize_command $link_static_flag"
|
||||
# Some platforms do not support self-dlopening with static
|
||||
# linking. Assume self-dlopening does not work in this case
|
||||
# till we figure out how to test it at configure time
|
||||
dlopen_self=no
|
||||
dlopen_self=$dlopen_self_static
|
||||
fi
|
||||
continue
|
||||
;;
|
||||
|
Loading…
x
Reference in New Issue
Block a user