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])

Reply via email to