Hi!

Here's the next patch on the MSVC branch. I decided to merge in
a couple of things further ahead, no point in reviewing stuff
when an improvement is around the corner, right?

What I'm looking for is a go-ahead that this patch is ready for
master, but then delay pushing it until enough of the MSVC support
is reviewed and ready to make this patch relevant. I'm fine with
waiting with regression testing until just before pushing (as I
don't expect any regressions), so that we are not getting too
tired of regression testing and run out of steem.

So, this is basically

"On Windows, find potential libs regardless of file name case."
7350644a0a5f5922326cfebe073b1822ae028a9b
"Disable nocase handling for cross compiles."
5b9cabda803d10ba01b7b38e2731d4927e4c0024

and relevant parts of

"patch msvc-documentation.patch"
06cfce005204bb8ca212aadab38b38c0202ea04e

merged into one patch but with cygwin removed since I don't
really care about Cygwin+MSVC at this point and Eric Blake
and Chuck didn't want it. Minimum resistance etc...

Previous discussions of "this" patch:

http://lists.gnu.org/archive/html/libtool-patches/2008-08/msg00007.html
http://lists.gnu.org/archive/html/libtool-patches/2007-07/msg00039.html

Cheers,
Peter

2010-06-14  Peter Rosin  <p...@lysator.liu.se>

        On Windows, find potential libs regardless of file name case.
        * libltdl/m4/libtool.m4 (_LT_CHECK_MAGIC_METHOD),
        libltdl/config/ltmain.m4sh (func_mode_link): On Windows,
        find potential libs regardless of file name case.
        * tests/nocase.at: New test, to check for regressions
        of the above.
        * Makefile.am: Add above new test.
        * doc/libtool.texi (libtool script contents): Document
        new variables.
commit b9a24622056e15aeca5fba9afa5647d949a6f2fa
Author: Peter Rosin <p...@lysator.liu.se>
Date:   Mon Jun 14 12:52:55 2010 +0200

    On Windows, find potential libs regardless of file name case.
    
    * libltdl/m4/libtool.m4 (_LT_CHECK_MAGIC_METHOD),
    libltdl/config/ltmain.m4sh (func_mode_link): On Windows,
    find potential libs regardless of file name case.
    * tests/nocase.at: New test, to check for regressions
    of the above.
    * Makefile.am: Add above new test.
    * doc/libtool.texi (libtool script contents): Document
    new variables.

diff --git a/ChangeLog b/ChangeLog
index a313b4b..10c1c62 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,15 @@
+2010-06-14  Peter Rosin  <p...@lysator.liu.se>
+
+       On Windows, find potential libs regardless of file name case.
+       * libltdl/m4/libtool.m4 (_LT_CHECK_MAGIC_METHOD),
+       libltdl/config/ltmain.m4sh (func_mode_link): On Windows,
+       find potential libs regardless of file name case.
+       * tests/nocase.at: New test, to check for regressions
+       of the above.
+       * Makefile.am: Add above new test.
+       * doc/libtool.texi (libtool script contents): Document
+       new variables.
+
 2010-06-13  Peter O'Gorman  <pe...@pogma.com>
 
        Test with --disable-shared at release time too.
diff --git a/Makefile.am b/Makefile.am
index 8e00b3e..1114e67 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -477,6 +477,7 @@ TESTSUITE_AT        = tests/testsuite.at \
                  tests/deplib-in-subdir.at \
                  tests/infer-tag.at \
                  tests/localization.at \
+                 tests/nocase.at \
                  tests/install.at \
                  tests/versioning.at \
                  tests/destdir.at \
diff --git a/doc/libtool.texi b/doc/libtool.texi
index 051aec3..035cb38 100644
--- a/doc/libtool.texi
+++ b/doc/libtool.texi
@@ -5981,6 +5981,16 @@ and relinking at install time is triggered.  This also 
means that @var{DESTDIR}
 installation does not work as expected.
 @end defvar
 
+...@defvar file_magic_glob
+How to find potential files when @var{deplibs_check_method} is
+...@samp{file_magic}. @var{file_magic_glob} is a @code{sed} expression,
+and the @code{sed} instance is fed potential files, that is
+transformed by the @var{file_magic_glob} expression. Useful when the
+shell does not support the shell option @code{nocaseglob}, making
+...@var{want_nocaseglob} inappropriate. Normally disabled (i.e.
+...@var{file_magic_glob} empty).
+...@end defvar
+
 @defvar finish_cmds
 Commands to tell the dynamic linker how to find shared libraries in a
 specific directory.
@@ -6252,6 +6262,13 @@ The library version numbering type.  One of 
@samp{libtool},
 @samp{osf}, @samp{sunos}, @samp{windows}, or @samp{none}.
 @end defvar
 
+...@defvar want_nocaseglob
+Find potential files using the shell option @code{nocaseglob} when
+...@var{deplibs_check_method} is @samp{file_magic}. Normally set to
+...@samp{no}, set to @samp{yes} to enable the @code{nocaseglob} shell
+option when looking for potential files.
+...@end defvar
+
 @defvar whole_archive_flag_spec
 Compiler flag to generate shared objects from convenience archives.
 @end defvar
diff --git a/libltdl/config/ltmain.m4sh b/libltdl/config/ltmain.m4sh
index dd883a6..a339bff 100644
--- a/libltdl/config/ltmain.m4sh
+++ b/libltdl/config/ltmain.m4sh
@@ -6381,8 +6381,20 @@ EOF
              fi
              if test -n "$a_deplib" ; then
                libname=`eval "\\$ECHO \"$libname_spec\""`
+               if test -n "$file_magic_glob"; then
+                 libnameglob=`func_echo_all "$libname" | $SED -e 
$file_magic_glob`
+               else
+                 libnameglob=$libname
+               fi
+               test "$want_nocaseglob" = yes && nocaseglob=`shopt -p 
nocaseglob`
                for i in $lib_search_path $sys_lib_search_path 
$shlib_search_path; do
-                 potential_libs=`ls $i/$libname[.-]* 2>/dev/null`
+                 if test "$want_nocaseglob" = yes; then
+                   shopt -s nocaseglob
+                   potential_libs=`ls $i/$libnameglob[.-]* 2>/dev/null`
+                   $nocaseglob
+                 else
+                   potential_libs=`ls $i/$libnameglob[.-]* 2>/dev/null`
+                 fi
                  for potent_lib in $potential_libs; do
                      # Follow soft links.
                      if ls -lLd "$potent_lib" 2>/dev/null |
diff --git a/libltdl/m4/libtool.m4 b/libltdl/m4/libtool.m4
index 22924a8..058e35b 100644
--- a/libltdl/m4/libtool.m4
+++ b/libltdl/m4/libtool.m4
@@ -3163,6 +3163,21 @@ tpf*)
   ;;
 esac
 ])
+
+file_magic_glob=
+want_nocaseglob=no
+if test "$build" = "$host"; then
+  case $host_os in
+  mingw* | pw32*)
+    if ( shopt | grep nocaseglob ) >/dev/null 2>&1; then
+      want_nocaseglob=yes
+    else
+      file_magic_glob=`echo 
aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ | $SED -e 
"s/\(..\)/s\/[[\1]]\/[[\1]]\/g;/g"`
+    fi
+    ;;
+  esac
+fi
+
 file_magic_cmd=$lt_cv_file_magic_cmd
 deplibs_check_method=$lt_cv_deplibs_check_method
 test -z "$deplibs_check_method" && deplibs_check_method=unknown
@@ -3171,6 +3186,10 @@ _LT_DECL([], [deplibs_check_method], [1],
     [Method to check whether dependent libraries are shared objects])
 _LT_DECL([], [file_magic_cmd], [1],
     [Command to use when deplibs_check_method == "file_magic"])
+_LT_DECL([], [file_magic_glob], [1],
+    [How to find potential files when deplibs_check_method == "file_magic"])
+_LT_DECL([], [want_nocaseglob], [1],
+    [Find potential files using nocaseglob when deplibs_check_method == 
"file_magic"])
 ])# _LT_CHECK_MAGIC_METHOD
 
 
diff --git a/tests/nocase.at b/tests/nocase.at
new file mode 100644
index 0000000..3627a8f
--- /dev/null
+++ b/tests/nocase.at
@@ -0,0 +1,82 @@
+# nocase.at --  test for nocase lib search  -*- Autotest -*-
+#
+#   Copyright (C) 2007 Free Software Foundation, Inc.
+#   Written by Peter Rosin, 2007
+#
+#   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([nocase library search])
+AT_KEYWORDS([libtool])
+
+eval `$LIBTOOL --config | $EGREP '^(want_nocaseglob|file_magic_glob)='`
+
+AT_CHECK([test "$want_nocaseglob" != yes && ]dnl
+         [test -z "$file_magic_glob" && exit 77],
+         [1], [ignore], [ignore])
+
+mkdir foo
+AT_DATA([foo/Foo.c],
+[
+int Foo(void) { return 1; }
+])
+
+mkdir bar
+AT_DATA([bar/bar.c],
+[
+extern int Foo(void);
+int bar(void) { return Foo(); }
+])
+
+AT_DATA([main.c],
+[
+extern int bar(void);
+int main(void) { return bar(); }
+])
+
+libdir=`pwd`/inst/lib
+mkdir inst inst/bin inst/lib
+
+$LIBTOOL --mode=compile --tag=CC $CC $CPPFLAGS $CFLAGS -c -o foo/Foo.lo 
foo/Foo.c
+AT_CHECK([$LIBTOOL --mode=link --tag=CC $CC $CFLAGS $LDFLAGS -o foo/libFoo.la 
foo/Foo.lo ]dnl
+        [-no-undefined -version-info 1:0:0 -rpath $libdir],
+        [], [ignore], [ignore])
+AT_CHECK([$LIBTOOL --mode=install cp foo/libFoo.la $libdir],
+        [], [ignore], [ignore])
+
+rm -f $libdir/libFoo.la
+
+$LIBTOOL --mode=compile --tag=CC $CC $CPPFLAGS $CFLAGS -c -o bar/bar.lo 
bar/bar.c
+AT_CHECK([$LIBTOOL --mode=link --tag=CC $CC $CFLAGS $LDFLAGS -o bar/libbar.la 
bar/bar.lo ]dnl
+        [-L$libdir -lfoo -no-undefined -version-info 1:0:0 -rpath $libdir],
+        [], [ignore], [ignore])
+AT_CHECK([$LIBTOOL --mode=install cp bar/libbar.la $libdir],
+        [], [ignore], [ignore])
+
+eval `$EGREP '^(old_library)=' < $libdir/libbar.la`
+libbar=$old_library
+rm -f $libdir/$libbar
+
+$LIBTOOL --mode=compile --tag=CC $CC $CPPFLAGS $CFLAGS -c -o main.$OBJEXT 
main.c
+
+AT_CHECK([$LIBTOOL --mode=link $CC $CFLAGS $LDFLAGS -o main main.$OBJEXT 
-L$libdir -lbar],
+        [], [ignore], [ignore])
+
+AT_CLEANUP

Reply via email to