From b078ea7ce89d9f422384b6708c8e2341b743084e Mon Sep 17 00:00:00 2001 From: "Gary V. Vaughan" Date: Thu, 4 Oct 2012 21:00:30 +0700 Subject: [PATCH] tests: migrate legacy quote.test to Autotest. * tests/quote.test: Moved from here... * tests/libtool.at: ...to here, and updated to Autotest. * Makefile.am (TESTS): Remove tests/quote.test. (TESTSUITE_AT): Add tests/libtool.at. Signed-off-by: Gary V. Vaughan --- Makefile.am | 2 +- tests/{quote.test => libtool.at} | 95 +++++++++++--------------------- 2 files changed, 32 insertions(+), 65 deletions(-) rename tests/{quote.test => libtool.at} (51%) diff --git a/Makefile.am b/Makefile.am index 180d82fca..052cbfa84 100644 --- a/Makefile.am +++ b/Makefile.am @@ -618,6 +618,7 @@ TESTSUITE = tests/testsuite TESTSUITE_AT = tests/testsuite.at \ tests/getopt-m4sh.at \ tests/libtoolize.at \ + tests/libtool.at \ tests/demo.at \ tests/pic_flag.at \ tests/with-pic.at \ @@ -799,7 +800,6 @@ TESTS = \ tests/link-2.test \ tests/nomode.test \ tests/objectlist.test \ - tests/quote.test \ tests/suffix.test \ tests/tagtrace.test diff --git a/tests/quote.test b/tests/libtool.at similarity index 51% rename from tests/quote.test rename to tests/libtool.at index bff82806d..ef64c3582 100755 --- a/tests/quote.test +++ b/tests/libtool.at @@ -1,5 +1,4 @@ -#! /bin/sh -# quote.test - make sure that shell metacharacters do not blow up libtool +# libtool.at -- basic libtool operation tests -*- Autotest -*- # # Copyright (C) 2003-2005, 2008, 2011-2012 Free Software Foundation, # Inc. @@ -24,24 +23,19 @@ # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. #### -. tests/defs || exit 1 +AT_BANNER([Basic libtool operation.]) -# Do the torture test. -status=$EXIT_SUCCESS -case $1 in - --no-reexec) - ;; - *) - func_get_config "SHELL" "$LIBTOOL --config" - exec $SHELL "$0" --no-reexec ${1+"$@"} - ;; -esac +## ----------------------------------- ## +## Shell meta-characters in filenames. ## +## ----------------------------------- ## -func_get_config "ECHO wl" "$LIBTOOL --config" +AT_SETUP([quote shell meta-characters in filenames]) +eval `$LIBTOOL --config | grep '^wl='` + +# Do the torture test. for mode in compile link install; do - echo "== $mode mode" # Unfortunately, without an array data type, it is nearly impossible # to protect libtool from metacharacters in filenames. So, we just @@ -75,62 +69,35 @@ for mode in compile link install; do esac # Trivial. - echo "= trying: no quoting" - result=`$LIBTOOL -n --mode=$mode $preargs $preflag"$flag:test" $postargs` || status=$EXIT_FAILURE - # We used to have the contents of $match in the case statement, - # without an intermediate variable, but it would fail on at least - # Solaris' and HP-UX's /bin/sh. Ugh! + LT_AT_CHECK([$LIBTOOL -n --mode=$mode $preargs $preflag"$flag:test" $postargs], + [0], [stdout]) # We must not attempt to match $preargs in the output, because libtool # may modify them. For example, on Cygwin, ``libtool --mode=link gcc -o # foo foo.o'' becomes ``gcc -o foo.exe foo.o''. - match="$match_preflag$flag:test " - case $result in - *"$match"*) - $ECHO "= passed: $result" - ;; - *) - $ECHO "= failed: $result" - status=$EXIT_FAILURE - ;; - esac + LT_AT_CHECK([$EGREP "$mode:.*$match_preflag$flag:test " stdout], [0], [ignore]) # Metacharacters that should be backslashified. - for mchar in \\ \" \` \$; do - $ECHO "= trying: \\$mchar quoting" - result=`$LIBTOOL -n --mode=$mode $preargs $preflag"$flag$mchar:test$mchar" $postargs` || status=$EXIT_FAILURE - match="$match_preflag$flag\\$mchar:test\\$mchar " - alt_match="$match_preflag\"$flag\\$mchar:test\\$mchar\" " - case $result in - *"$match"*) - $ECHO "= passed: $result" - ;; - *"$alt_match"*) - $ECHO "= passed (harmless ksh bug): $result" - ;; - *) - $ECHO "= failed: $result" - status=$EXIT_FAILURE - ;; - esac + for mchar in \" \` \$ \\; do + LT_AT_CHECK([$LIBTOOL -n --mode=$mode $preargs $preflag"$flag$mchar:test$mchar" $postargs], + [0], [stdout]) + LT_AT_CHECK([$EGREP "$mode:.*$match_preflag\"?$flag\\\\\\$mchar:test\\\\\\$mchar\"? " stdout], [0], [ignore]) + done + + # Metacharacters that should be double quoted, and need escaping for grep + for mchar in "@<:@" "@:>@" "^" "*"; do + + LT_AT_CHECK([$LIBTOOL -n --mode=$mode $preargs $preflag"$flag$mchar:test$mchar" $postargs], + [0], [stdout]) + LT_AT_CHECK([grep "$mode:.*$match_preflag\"$flag\\$mchar:test\\$mchar\" " stdout], [0], [ignore]) done - # Metacharacters that should be double quoted. - for mchar in "[" "]" "~" "#" "^" "&" "*" "(" ")" "{" "}" "|" ";" "<" ">" "?" \ - "'" " " " "; do - - $ECHO "= trying: \"$mchar\" quoting" - result=`$LIBTOOL -n --mode=$mode $preargs $preflag"$flag$mchar:test$mchar" $postargs` || status=$EXIT_FAILURE - match="$match_preflag\"$flag$mchar:test$mchar\" " - case $result in - *"$match"*) - $ECHO "= passed: $result" - ;; - *) - $ECHO "= failed: $result" - status=$EXIT_FAILURE - ;; - esac + # Metacharacters that should be double quoted, that are not special to grep. + for mchar in "~" "#" "&" "(" ")" "{" "}" "|" ";" "<" ">" "?" "'" " " " "; do + + LT_AT_CHECK([$LIBTOOL -n --mode=$mode $preargs $preflag"$flag$mchar:test$mchar" $postargs], + [0], [stdout]) + LT_AT_CHECK([grep "$mode:.*$match_preflag\"$flag$mchar:test$mchar\" " stdout], [0], [ignore]) done done -exit $status +AT_CLEANUP -- 2.47.3