Hi! When you open libfoo.la, the preloader assumes that the preloaded library is named libfoo.$libext. I.e. it doesn't care about the libname_spec variable. This patch fixes that and makes lt_dladvise.at pass on MSYS/MSVC (and maybe on OS/2).
Cheers, Peter 2009-11-24 Peter Rosin <p...@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.
diff --git a/libltdl/ltdl.c b/libltdl/ltdl.c index 6e19599..28ffc8a 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 @@ -1263,8 +1268,8 @@ try_dlopen (lt_dlhandle *phandle, const char *filename, const char *ext, if (vtable) { - /* name + "." + libext + NULL */ - archive_name = MALLOC (char, LT_STRLEN (name) + LT_STRLEN (libext) + 2); + /* libprefix + name + "." + libext + NULL */ + archive_name = MALLOC (char, LT_STRLEN (libprefix) + LT_STRLEN (name) + LT_STRLEN (libext) + 2); *phandle = (lt_dlhandle) lt__zalloc (sizeof (struct lt__handle)); if ((*phandle == NULL) || (archive_name == NULL)) @@ -1276,7 +1281,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 111fac1..2b9bd06 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])