Hi! Den 2010-06-23 16:47 skrev Peter Rosin:
I'm intend to reply to this message with testsuite results for the "Add MSVC support" patch plus this patch for various systems.
While I didn't see any regressions, I did notice that it didn't go too well with MSVC either. So, I dug around and found a forgotten gem [1], and updated it to apply on top of the previous patch. Result attached. So, I'm asking if this too can be commited, if the testsuite finds no regressions... [1] http://lists.gnu.org/archive/html/libtool-patches/2008-09/msg00000.html Cheers, Peter
commit a5763df949041e07cb01b7da29dbfdb4d3eb9491 Author: Peter Rosin <peda@lysator.liu.se> Date: Wed Jun 23 18:05:11 2010 +0200 Handle -o w/ and w/o $EXEEXT during manifest embedding * libltdl/m4/libtool.m4 (_LT_LINKER_SHLIBS) [ cygwin, mingw, cegcc ] <cl*>: @OUTPUT@ may or may not include a trailing $EXEEXT. If mt fails, make sure libtool exits with an error. (_LT_LANG_CXX_CONFIG): Likewise. * tests/exeext.at: New. Make sure linking with both -o prog and -o prog$EXEEXT works. * Makefile.am: Add previous test to testsuite. diff --git a/ChangeLog b/ChangeLog index 1ee1b81..b9a5c80 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,17 @@ 2010-06-23 Peter Rosin <peda@lysator.liu.se> + Handle -o w/ and w/o $EXEEXT during manifest embedding + * libltdl/m4/libtool.m4 (_LT_LINKER_SHLIBS) + [ cygwin, mingw, cegcc ] <cl*>: @OUTPUT@ may or may not + include a trailing $EXEEXT. If mt fails, make sure libtool + exits with an error. + (_LT_LANG_CXX_CONFIG): Likewise. + * tests/exeext.at: New. Make sure linking with both -o prog + and -o prog$EXEEXT works. + * Makefile.am: Add previous test to testsuite. + +2010-06-23 Peter Rosin <peda@lysator.liu.se> + For MSVC, embed the manifest as a resource in the executable. * libltdl/m4/libtool.m4 (_LT_LINKER_SHLIBS) <postlink_cmds>: New tag variable. diff --git a/Makefile.am b/Makefile.am index 5822428..de98e4e 100644 --- a/Makefile.am +++ b/Makefile.am @@ -471,6 +471,7 @@ TESTSUITE_AT = tests/testsuite.at \ tests/search-path.at \ tests/indirect_deps.at \ tests/archive-in-archive.at \ + tests/exeext.at \ tests/execute-mode.at \ tests/bindir.at \ tests/cwrapper.at \ diff --git a/libltdl/m4/libtool.m4 b/libltdl/m4/libtool.m4 index a0c723c..0a7065a 100644 --- a/libltdl/m4/libtool.m4 +++ b/libltdl/m4/libtool.m4 @@ -4858,9 +4858,14 @@ _LT_EOF _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1,DATA/'\'' | $SED -e '\''/^[[AITW]][[ ]]/s/.*[[ ]]//'\'' | sort | uniq > $export_symbols' # Don't use ranlib _LT_TAGVAR(old_postinstall_cmds, $1)='chmod 644 $oldlib' - _LT_TAGVAR(postlink_cmds, $1)='if test -e "@OUTPUT@.exe.manifest"; then - mt -manifest "@OUTPUT@.exe.manifest" -outputresource:"@OUTPUT@.exe"; - $RM "@OUTPUT@.exe.manifest"; + _LT_TAGVAR(postlink_cmds, $1)='lt_outputfile="@OUTPUT@"~ + case "$lt_outputfile" in + *.[[eE][xX][eE]]) ;; + *) lt_outputfile="$lt_outputfile.exe" ;; + esac~ + if test -e "$lt_outputfile.manifest"; then + mt -manifest "$lt_outputfile.manifest" -outputresource:"$lt_outputfile" || exit 1; + $RM "$lt_outputfile.manifest"; fi' ;; *) @@ -5840,9 +5845,14 @@ if test "$_lt_caught_CXX_error" != yes; then _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes # Don't use ranlib _LT_TAGVAR(old_postinstall_cmds, $1)='chmod 644 $oldlib' - _LT_TAGVAR(postlink_cmds, $1)='if test -e "@OUTPUT@.exe.manifest"; then - mt -manifest "@OUTPUT@.exe.manifest" -outputresource:"@OUTPUT@.exe"; - $RM "@OUTPUT@.exe.manifest"; + _LT_TAGVAR(postlink_cmds, $1)='lt_outputfile="@OUTPUT@"~ + case "$lt_outputfile" in + *.[[eE][xX][eE]]) ;; + *) lt_outputfile="$lt_outputfile.exe" ;; + esac~ + if test -e "$lt_outputfile.manifest"; then + mt -manifest "$lt_outputfile.manifest" -outputresource:"$lt_outputfile" || exit 1; + $RM "$lt_outputfile.manifest"; fi' ;; *) diff --git a/tests/exeext.at b/tests/exeext.at new file mode 100644 index 0000000..ee5d755 --- /dev/null +++ b/tests/exeext.at @@ -0,0 +1,53 @@ +# exeext.at -- ensure that exeext handling works -*- Autotest -*- +# +# Copyright (C) 2010 Free Software Foundation, Inc. +# Written by Peter Rosin +# +# 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([both of -o prog and -o prog$EXEEXT work]) +AT_KEYWORDS([libtool]) + +AT_CHECK([test -n "$EXEEXT" || exit 77]) + +bin=`pwd`/bin +binext=`pwd`/binext +mkdir src $bin srcext $binext + +AT_DATA(src/prog.c, +[[ +int main(void) { return 0; } +]]) + +$CC $CPPFLAGS $CFLAGS -c src/prog.c -o src/prog.$OBJEXT + +AT_CHECK($LIBTOOL --mode=link $CC $CFLAGS $LDFLAGS -o src/prog src/prog.$OBJEXT, + [0], [ignore], [ignore]) +AT_CHECK($LIBTOOL --mode=link $CC $CFLAGS $LDFLAGS -o srcext/prog$EXEEXT src/prog.$OBJEXT, + [0], [ignore], [ignore]) + +$LIBTOOL --mode=install cp src/prog $bin/prog +$LIBTOOL --mode=install cp srcext/prog$EXEEXT $binext/prog$EXEEXT + +LT_AT_EXEC_CHECK([$bin/prog]) +LT_AT_EXEC_CHECK([$binext/prog$EXEEXT]) + +AT_CLEANUP