libtool-commit
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[SCM] GNU Libtool branch, master, updated. v2.2.10-10-g2a42785


From: Ralf Wildenhues
Subject: [SCM] GNU Libtool branch, master, updated. v2.2.10-10-g2a42785
Date: Sat, 12 Jun 2010 08:09:56 +0000

This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "GNU Libtool".

The branch, master has been updated
       via  2a4278537315a9b073f2669e56753b41d5ab493d (commit)
      from  d4558ac9bee7bde487ea982c28771d43a610d4fc (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
commit 2a4278537315a9b073f2669e56753b41d5ab493d
Author: Peter Rosin <address@hidden>
Date:   Thu Jun 10 19:53:39 2010 +0200

    Improve libdir usage from within ltdl on MinGW.
    
    * libltdl/ltdl.c (parse_dotla_file) [__WINDOWS__]: Read the
    libdir entry in the .la file, but accept it only if it is not
    a unix-style absolute name.
    * tests/ltdl-libdir.at: New test that checks if ltdl finds an
    installed module via the libdir variable in the .la file.  On
    MinGW, use a Windows-style libdir name including drive spec.
    * Makefile.am: Add above.
    
    Signed-off-by: Ralf Wildenhues <address@hidden>

-----------------------------------------------------------------------

Summary of changes:
 ChangeLog            |   12 +++++
 Makefile.am          |    1 +
 libltdl/ltdl.c       |    7 ++-
 tests/ltdl-libdir.at |  119 ++++++++++++++++++++++++++++++++++++++++++++++++++
 4 files changed, 137 insertions(+), 2 deletions(-)
 create mode 100644 tests/ltdl-libdir.at

diff --git a/ChangeLog b/ChangeLog
index 823c6d3..ba5aa6b 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,15 @@
+2010-06-12  Peter Rosin  <address@hidden>
+           Ralf Wildenhues  <address@hidden>
+
+       Improve libdir usage from within ltdl on MinGW.
+       * libltdl/ltdl.c (parse_dotla_file) [__WINDOWS__]: Read the
+       libdir entry in the .la file, but accept it only if it is not
+       a unix-style absolute name.
+       * tests/ltdl-libdir.at: New test that checks if ltdl finds an
+       installed module via the libdir variable in the .la file.  On
+       MinGW, use a Windows-style libdir name including drive spec.
+       * Makefile.am: Add above.
+
 2010-06-11  Peter O'Gorman  <address@hidden>
 
        Skip bindir install test if we're not building shared.
diff --git a/Makefile.am b/Makefile.am
index 7c7f571..c3f74e0 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -486,6 +486,7 @@ TESTSUITE_AT        = tests/testsuite.at \
                  tests/lt_dlopen.at \
                  tests/lt_dlopen_a.at \
                  tests/lt_dlopenext.at \
+                 tests/ltdl-libdir.at \
                  tests/ltdl-api.at \
                  tests/dlloader-api.at \
                  tests/loadlibrary.at \
diff --git a/libltdl/ltdl.c b/libltdl/ltdl.c
index e1b4e2f..1213f0d 100644
--- a/libltdl/ltdl.c
+++ b/libltdl/ltdl.c
@@ -1079,14 +1079,17 @@ parse_dotla_file(FILE *file, char **dlname, char 
**libdir, char **deplibs,
 
       /* Windows native tools do not understand the POSIX paths we store
         in libdir. */
-#ifndef __WINDOWS__
 #undef  STR_LIBDIR
 #define STR_LIBDIR     "libdir="
       else if (strncmp (line, STR_LIBDIR, sizeof (STR_LIBDIR) - 1) == 0)
        {
          errors += trim (libdir, &line[sizeof(STR_LIBDIR) - 1]);
-       }
+#ifdef __WINDOWS__
+         /* Disallow following unix-style paths on MinGW.  */
+         if (*libdir && (**libdir == '/' || **libdir == '\\'))
+           **libdir = '\0';
 #endif
+       }
 
 #undef  STR_DL_DEPLIBS
 #define STR_DL_DEPLIBS "dependency_libs="
diff --git a/tests/ltdl-libdir.at b/tests/ltdl-libdir.at
new file mode 100644
index 0000000..432d18e
--- /dev/null
+++ b/tests/ltdl-libdir.at
@@ -0,0 +1,119 @@
+# ltdl-libdir.at -- test libltdl functionality             -*- Autotest -*-
+#
+#   Copyright (C) 2010 Free Software Foundation, Inc.
+#   This file is part of GNU Libtool.
+#
+# GNU Libtool is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License as
+# published by the Free Software Foundation; either version 2 of
+# the License, or (at your option) any later version.
+#
+# GNU Libtool is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with GNU Libtool; see the file COPYING.  If not, a copy
+# can be downloaded from  http://www.gnu.org/licenses/gpl.html,
+# or obtained by writing to the Free Software Foundation, Inc.,
+# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+####
+
+AT_SETUP([libdir of installed modules])
+AT_KEYWORDS([libltdl])
+
+# This test requires shared library support.
+AT_CHECK([$LIBTOOL --features | grep 'enable shared libraries' || exit 77],
+        [], [ignore])
+
+# With MinGW, try Windows-style paths only.
+if pwd -W >/dev/null 2>&1; then
+  prefix=`pwd -W`/inst
+else
+  prefix=`pwd`/inst
+fi
+libdir=$prefix/lib
+bindir=$prefix/bin
+mkdir $prefix $libdir $bindir
+
+AT_DATA([a.c],
+[[
+int f (void)
+{
+  return 42;
+}
+]])
+
+AT_DATA([m.c],
+[[
+#include <stdio.h>
+#include <ltdl.h>
+
+typedef int func_f(void);
+
+int
+main (int argc, const char *argv[])
+{
+  lt_dlhandle module = NULL;
+  func_f *f = NULL;
+
+  if (lt_dlinit()) {
+    fprintf(stderr, "lt_dlinit failed '%s'\n", lt_dlerror());
+    return 1;
+  }
+
+  module = lt_dlopen("./a.la");
+
+  if (!module) {
+    fprintf(stderr, "lt_dlopen failed '%s'\n", lt_dlerror());
+    return 1;
+  }
+
+  f = (func_f *)lt_dlsym(module, "f");
+
+  if (!f) {
+    fprintf(stderr, "lt_dlsym failed '%s'\n", lt_dlerror());
+    return 1;
+  }
+
+  if (f() != 42) {
+    fprintf(stderr, "f did not return 42\n");
+    return 1;
+  }
+
+  lt_dlclose(module);
+  lt_dlexit();
+  return 0;
+}
+]])
+
+: ${LTDLINCL="-I$abs_top_srcdir/libltdl"}
+: ${LIBLTDL="$abs_builddir/../libltdl/libltdlc.la"}
+
+CPPFLAGS="$LTDLINCL $CPPFLAGS"
+LDFLAGS="$LDFLAGS -no-undefined"
+
+AT_CHECK([$LIBTOOL --mode=compile $CC $CPPFLAGS $CFLAGS -c a.c],
+        [], [ignore], [ignore])
+AT_CHECK([$LIBTOOL --mode=link $CC $CFLAGS $LDFLAGS -o a.la ]dnl
+        [a.lo -rpath $libdir -module -shared -avoid-version],
+        [], [ignore], [ignore])
+AT_CHECK([$LIBTOOL --mode=compile $CC $CPPFLAGS $CFLAGS -c m.c],
+        [], [ignore], [ignore])
+AT_CHECK([$LIBTOOL --mode=link $CC $CFLAGS $LDFLAGS -o m$EXEEXT ]dnl
+        [m.$OBJEXT $LIBLTDL],
+        [], [ignore], [ignore])
+AT_CHECK([$LIBTOOL --mode=install cp a.la $libdir/a.la],
+        [], [ignore], [ignore])
+AT_CHECK([$LIBTOOL --mode=install cp m$EXEEXT $bindir/m$EXEEXT],
+        [], [ignore], [ignore])
+
+# Try finding the module via the libdir entry in a misplaced .la file.
+
+mv $libdir/a.la $bindir/a.la
+cd $bindir
+LT_AT_EXEC_CHECK([./m],
+                [], [ignore], [ignore])
+
+AT_CLEANUP


hooks/post-receive
-- 
GNU Libtool



reply via email to

[Prev in Thread] Current Thread [Next in Thread]