Hi! Inspired by the remarkable progress, I'm bringing up this patch again.
The discussion dead-ended last time without anything being merged into any branch, but follow this thread to get up to speed: http://lists.gnu.org/archive/html/libtool-patches/2009-01/msg00152.html The patch has seen (very) minor adjustments to changes since then, but the principle is exactly the same. Cheers, Peter
commit d2cec6695c6048487774c869d08ddd165ca3c21e Author: Peter Rosin <peda@lysator.liu.se> Date: Mon Jan 26 09:11:44 2009 +0100 Make preloading heed libname_spec. * libltdl/ltdl.c (libprefix): New static variable describing the prefix of static archives. (try_dlopen): Use libprefix. * libltdl/m4/ltdl.m4 (_LTDL_SETUP): Export prefix of static archives to config.h. diff --git a/ChangeLog b/ChangeLog index f5fa68f..73912d3 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,12 @@ +2009-11-24 Peter Rosin <peda@lysator.liu.se> + + Make preloading heed libname_spec. + * libltdl/ltdl.c (libprefix): New static variable describing + the prefix of static archives. + (try_dlopen): Use libprefix. + * libltdl/m4/ltdl.m4 (_LTDL_SETUP): Export prefix of static + archives to config.h. + 2010-07-05 Peter Rosin <peda@lysator.liu.se> * tests/export.at [MSVC]: dllimport all imported variables. diff --git a/libltdl/ltdl.c b/libltdl/ltdl.c index 1213f0d..992584c 100644 --- a/libltdl/ltdl.c +++ b/libltdl/ltdl.c @@ -54,6 +54,10 @@ or obtained by writing to the Free Software Foundation, Inc., # define LT_LIBEXT "a" #endif +#if !defined(LT_LIBPREFIX) +# define LT_LIBPREFIX "lib" +#endif + /* This is the maximum symbol size that won't require malloc/free */ #undef LT_SYMBOL_LENGTH #define LT_SYMBOL_LENGTH 128 @@ -72,6 +76,7 @@ or obtained by writing to the Free Software Foundation, Inc., static const char objdir[] = LT_OBJDIR; static const char archive_ext[] = LT_ARCHIVE_EXT; static const char libext[] = LT_LIBEXT; +static const char libprefix[] = LT_LIBPREFIX; #if defined(LT_MODULE_EXT) static const char shlib_ext[] = LT_MODULE_EXT; #endif @@ -1272,8 +1277,8 @@ try_dlopen (lt_dlhandle *phandle, const char *filename, const char *ext, if (vtable) { - /* name + "." + libext + NULL */ - archive_name = MALLOC (char, LT_STRLEN (name) + strlen (libext) + 2); + /* libprefix + name + "." + libext + NULL */ + archive_name = MALLOC (char, strlen (libprefix) + LT_STRLEN (name) + strlen (libext) + 2); *phandle = (lt_dlhandle) lt__zalloc (sizeof (struct lt__handle)); if ((*phandle == NULL) || (archive_name == NULL)) @@ -1285,7 +1290,14 @@ try_dlopen (lt_dlhandle *phandle, const char *filename, const char *ext, /* Preloaded modules are always named according to their old archive name. */ - sprintf (archive_name, "%s.%s", name, libext); + if (strncmp(name, "lib", 3) == 0) + { + sprintf (archive_name, "%s%s.%s", libprefix, name + 3, libext); + } + else + { + sprintf (archive_name, "%s.%s", name, libext); + } if (tryall_dlopen (&newhandle, archive_name, advise, vtable) == 0) { diff --git a/libltdl/m4/ltdl.m4 b/libltdl/m4/ltdl.m4 index 93de12a..bf1c9bb 100644 --- a/libltdl/m4/ltdl.m4 +++ b/libltdl/m4/ltdl.m4 @@ -410,6 +410,11 @@ AC_CHECK_FUNCS([strlcat strlcpy], [], [AC_LIBOBJ([lt__strl])]) m4_pattern_allow([LT_LIBEXT])dnl AC_DEFINE_UNQUOTED([LT_LIBEXT],["$libext"],[The archive extension]) +name= +lt_libprefix=`eval "\\$ECHO \"$libname_spec\""` +m4_pattern_allow([LT_LIBPREFIX])dnl +AC_DEFINE_UNQUOTED([LT_LIBPREFIX],["$lt_libprefix"],[The archive prefix]) + name=ltdl LTDLOPEN=`eval "\\$ECHO \"$libname_spec\""` AC_SUBST([LTDLOPEN])