* Ralf Wildenhues wrote on Sun, Nov 16, 2008 at 11:48:01PM CET: > There is at least one more place with problematic usage of $ECHO, in > func_infer_tag (several instances in two lines). Not yet sure how to > fix that in a concise way.
Like this. I also added some initial testsuite exposure. This doesn't really exercise the code paths changed by the ltmain part of the patch, though. Commit c76530e05 was done (on 2004-02-04) to match $CC that contains a `~', the `$ECHO $CC` construction stems from 6fcbecee4 from the multi-language-branch (2000-07-26). I guess a better test could set up a compiler wrapper script that used these constructions. Meanwhile, I pushed this. Cheers, Ralf Fix func_infer_tag $ECHO usage; some testsuite exposure. * libltdl/config/ltmain.m4sh (func_infer_tag): Use func_echo_all rather than $ECHO for possibly multiple arguments. * tests/infer-tag.at (inferred tag, CXX inferred tag) (F77 inferred tag, FC inferred tag, GCJ inferred tag): New file, new tests. * Makefile.am: Adjust. diff --git a/Makefile.am b/Makefile.am index a09ed3d..98feed4 100644 --- a/Makefile.am +++ b/Makefile.am @@ -466,6 +466,7 @@ TESTSUITE_AT = tests/testsuite.at \ tests/indirect_deps.at \ tests/archive-in-archive.at \ tests/execute-mode.at \ + tests/infer-tag.at \ tests/localization.at \ tests/install.at \ tests/destdir.at \ diff --git a/libltdl/config/ltmain.m4sh b/libltdl/config/ltmain.m4sh index 0fe3fc9..2769149 100644 --- a/libltdl/config/ltmain.m4sh +++ b/libltdl/config/ltmain.m4sh @@ -578,10 +578,13 @@ func_infer_tag () func_quote_for_eval "$arg" CC_quoted="$CC_quoted $func_quote_for_eval_result" done + CC_expanded=`func_echo_all $CC` + CC_quoted_expanded=`func_echo_all $CC_quoted` case $@ in # Blanks in the command may have been stripped by the calling shell, # but not from the CC environment variable when configure was run. - " $CC "* | "$CC "* | " `$ECHO $CC` "* | "`$ECHO $CC` "* | " $CC_quoted"* | "$CC_quoted "* | " `$ECHO $CC_quoted` "* | "`$ECHO $CC_quoted` "*) ;; + " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \ + " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*) ;; # Blanks at the start of $base_compile will cause this to fail # if we don't check for them as well. *) @@ -595,8 +598,11 @@ func_infer_tag () func_quote_for_eval "$arg" CC_quoted="$CC_quoted $func_quote_for_eval_result" done + CC_expanded=`func_echo_all $CC` + CC_quoted_expanded=`func_echo_all $CC_quoted` case "$@ " in - " $CC "* | "$CC "* | " `$ECHO $CC` "* | "`$ECHO $CC` "* | " $CC_quoted"* | "$CC_quoted "* | " `$ECHO $CC_quoted` "* | "`$ECHO $CC_quoted` "*) + " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \ + " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*) # The compiler in the base compile command matches # the one in the tagged configuration. # Assume this is the tagged configuration we want. diff --git a/tests/infer-tag.at b/tests/infer-tag.at new file mode 100644 index 0000000..ebc7581 --- /dev/null +++ b/tests/infer-tag.at @@ -0,0 +1,101 @@ +# infer-tag.at -- libtool without --tag -*- Autotest -*- +# +# Copyright (C) 2008 Free Software Foundation, Inc. +# +# 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. +#### + +# Check that func_infer_tag works. + +# We add one test per tag, so that only those tests are skipped +# for which the tags are disabled (otherwise we only ever test +# on systems where all tags are enabled). + +AT_SETUP([inferred tag]) +AT_KEYWORDS([libtool]) + +AT_DATA([a.c], +[[int a (void) { return 0; } +]]) + +AT_CHECK([$LIBTOOL --mode=compile $CC $CPPFLAGS $CFLAGS -c a.c], + [], [ignore], [ignore]) + +AT_CLEANUP + +AT_SETUP([CXX inferred tag]) +LT_AT_TAG([CXX]) +AT_KEYWORDS([libtool]) + +AT_DATA([a.cpp], +[[int a (void) { return 0; } +]]) + +AT_CHECK([$LIBTOOL --mode=compile $CXX $CPPFLAGS $CXXFLAGS -c a.cpp], + [], [ignore], [ignore]) + +AT_CLEANUP + +AT_SETUP([F77 inferred tag]) +LT_AT_TAG([F77]) +AT_KEYWORDS([libtool]) + +AT_DATA([a.f], +[[ program main + end +]]) + +AT_CHECK([$LIBTOOL --mode=compile $F77 $FFLAGS -c a.f], + [], [ignore], [ignore]) + +AT_CLEANUP + +AT_SETUP([FC inferred tag]) +LT_AT_TAG([FC]) +AT_KEYWORDS([libtool]) + +AT_DATA([a.f], +[[ program main + end +]]) + +AT_CHECK([$LIBTOOL --mode=compile $FC $FCFLAGS -c a.f], + [], [ignore], [ignore]) + +AT_CLEANUP + +AT_SETUP([GCJ inferred tag]) +LT_AT_TAG([GCJ]) +AT_KEYWORDS([libtool]) + +AT_DATA([A.java], +[[public class A { + private int a; + public A () { a = 0; } +}; +]]) + +# There are just too many broken gcj installations out there, either missing +# libgcj.spec or unable to find it. Skip this test for them. +AT_CHECK([$GCJ $GCJFLAGS -c A.java || exit 77], [], [ignore], [ignore]) + +AT_CHECK([$LIBTOOL --mode=compile $GCJ $GCJCFLAGS -c A.java], + [], [ignore], [ignore]) + +AT_CLEANUP