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

Reply via email to