[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Preloading in ltdl doesn't heed libname_spec.
From: |
Peter Rosin |
Subject: |
Preloading in ltdl doesn't heed libname_spec. |
Date: |
Sat, 24 Jan 2009 11:55:50 +0100 |
User-agent: |
Thunderbird 2.0.0.19 (Windows/20081209) |
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 <address@hidden>
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])
- Preloading in ltdl doesn't heed libname_spec.,
Peter Rosin <=