[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: Handle -o w/ and w/o $EXEEXT during manifest embedding
From: |
Peter Rosin |
Subject: |
Re: Handle -o w/ and w/o $EXEEXT during manifest embedding |
Date: |
Mon, 01 Sep 2008 14:55:09 +0200 |
User-agent: |
Thunderbird 2.0.0.16 (Windows/20080708) |
Den 2008-08-31 10:07, skrev Peter Rosin:
Den 2008-08-31 09:22, skrev Ralf Wildenhues:
* Peter Rosin wrote on Sun, Aug 31, 2008 at 09:11:51AM CEST:
Den 2008-08-31 07:29, skrev Ralf Wildenhues:
* Peter Rosin wrote on Sat, Aug 30, 2008 at 10:26:45PM CEST:
During my exercise with libsndfile I found a problem with
the manifest embedding code. $output may or may not contain
the trailing $EXEEXT, so the code in $postlink_cmds has
to handle both cases (or some c14n has to be added to ltmain).
Is this really a problem with the libtool variable exeext not being set
correctly, or with the libtool script being passed '-o prog' vs. '-o
prog.exe'?
The patch solves the latter, i.e. '-o prog' vs. '-o prog.exe'. I
have not seen any problem with exeext not being correct.
Hmm, ok.
If it's a problem with exeext not being set correctly, then
shouldn't we
fix that? Markus Duft posted a patch for that on this list before,
which I've never found the time to evaluate.
Also, this needs testsuite exposure if not already done.
By "this", I assume you mean a check if both '-o prog' and
"-o prog$EXEEXT" work?
Yes. At least if such a test is easily possible.
Should that test do what is needed to
expose a failure to embed the manifest? I.e. do you want the
test to install both progs and then try to run them?
If a runtime test is the only way to find out if things went alright,
then I guess that would be best. In this case the test should ensure
to SKIP for cross compilation. It's also OK to SKIP the test generally
when CL is not used, I guess.
My thought was to SKIP if exeext is empty and jump over the runtime
test if doing a cross...
Like this?
I have tested on Cygwin and MSYS/MSVC. With MSVC I have also tested
with a libtool script where I broke the manifest embedding on purpose
to make sure the test caught that (and I checked for problems in both
the -o prog and -o prog$EXEEXT cases).
I haven't tested on a $host where $EXEEXT is empty, and I haven't
tested a cross compile, but -- famous last words -- that works, I'm
sure of it. :-)
Ok to push?
2008-09-01 Peter Rosin <address@hidden>
* 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.
Cheers,
Peter
diff --git a/Makefile.am b/Makefile.am
index e70cd38..1049289 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -447,6 +447,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/localization.at \
tests/nocase.at \
diff --git a/libltdl/m4/libtool.m4 b/libltdl/m4/libtool.m4
index a8f20f0..a9f9035 100644
--- a/libltdl/m4/libtool.m4
+++ b/libltdl/m4/libtool.m4
@@ -4824,9 +4824,14 @@ _LT_EOF
_LT_TAGVAR(old_postinstall_cmds, $1)='chmod 644 $oldlib'
_LT_TAGVAR(compile_tag, $1)=-TC
_LT_TAGVAR(dashl_xform, $1)='s/\(.*\)/\1.lib/'
- _LT_TAGVAR(postlink_cmds, $1)='if test -e "@address@hidden"; then
- mt -manifest "@address@hidden" -outputresource:"@address@hidden";
- $RM "@address@hidden";
+ _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'
;;
*)
@@ -5821,9 +5826,14 @@ if test "$_lt_caught_CXX_error" != yes; then
_LT_TAGVAR(old_postinstall_cmds, $1)='chmod 644 $oldlib'
_LT_TAGVAR(compile_tag, $1)=-TP
_LT_TAGVAR(dashl_xform, $1)='s/\(.*\)/\1.lib/'
- _LT_TAGVAR(postlink_cmds, $1)='if test -e "@address@hidden"; then
- mt -manifest "@address@hidden" -outputresource:"@address@hidden";
- $RM "@address@hidden";
+ _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..30a9e4f
--- /dev/null
+++ b/tests/exeext.at
@@ -0,0 +1,53 @@
+# exeext.at -- ensure that exeext handling works -*- Autotest -*-
+#
+# Copyright (C) 2008 Free Software Foundation, Inc.
+# Written by Peter Rosin, 2008
+#
+# 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
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- Re: Handle -o w/ and w/o $EXEEXT during manifest embedding,
Peter Rosin <=