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 <[email protected]> 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 <[email protected]> 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 <[email protected]> + + 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 <[email protected]> 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
