From be2413f09c789d10ec40c7a6bb1925680a19a119 Mon Sep 17 00:00:00 2001 From: Alexandre Duret-Lutz Date: Tue, 19 Jul 2005 20:08:40 +0000 Subject: [PATCH] * tests/instspc.test: Major rewrite to test for many other problematic file names, e.g., '$', '"', '('. Automake and Autoconf can't handle many of them, so do not report a failure if the usual candidates show up. --- ChangeLog | 7 +++ tests/instspc.test | 171 +++++++++++++++++++++++++++++++++++++++-------------- 2 files changed, 132 insertions(+), 46 deletions(-) diff --git a/ChangeLog b/ChangeLog index 4de1392f1..f9135936a 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,10 @@ +2005-07-19 Paul Eggert + + * tests/instspc.test: Major rewrite to test for many other + problematic file names, e.g., '$', '"', '('. Automake and + Autoconf can't handle many of them, so do not report a failure + if the usual candidates show up. + 2005-07-19 Stepan Kasal * Makefile.am (automake, aclocal): Merge the rules. diff --git a/tests/instspc.test b/tests/instspc.test index fb832301e..bc63033c6 100755 --- a/tests/instspc.test +++ b/tests/instspc.test @@ -1,5 +1,5 @@ #! /bin/sh -# Copyright (C) 2004 Free Software Foundation, Inc. +# Copyright (C) 2004, 2005 Free Software Foundation, Inc. # # This file is part of GNU Automake. # @@ -18,12 +18,13 @@ # the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, # Boston, MA 02110-1301, USA. -# Check that installation to directory with spaces succeed. -# Report from James Amundson. +# Check that installation to directory with shell metacharacters succeed. +# Original report from James Amundson about file names with spaces. +# Other characters added by Paul Eggert. # This is mostly the same input as nobase.test, but we do not use # libtool libraries, because Libtool does not preserve space in -# filenames (Issue observed with ltmain.sh (GNU libtool) 1.5a (1.1323 +# file names (Issue observed with ltmain.sh (GNU libtool) 1.5a (1.1323 # 2003/11/10 21:06:47)) @@ -32,8 +33,7 @@ required='gcc' set -e -# Make sure this system supports spaces in filenames. -mkdir 'a b' || exit 77 +# Set up files that won't change each time through the loop. cat >> configure.in <<'EOF' AC_PROG_CC @@ -41,6 +41,24 @@ AC_PROG_RANLIB AC_OUTPUT EOF +mkdir sub + +: > sub/base.h +: > sub/nobase.h +: > sub/base.dat +: > sub/nobase.dat +: > sub/base.sh +: > sub/nobase.sh + +cat >source.c <<'EOF' +int +main (int argc, char **argv) +{ + return 0; +} +EOF +cp source.c source2.c + cat > Makefile.am << 'EOF' foodir = $(prefix)/foo fooexecdir = $(prefix)/foo @@ -64,50 +82,111 @@ nobase_fooexec_LIBRARIES = sub/libnobase.a sub_libbase_a_SOURCES = source.c sub_libnobase_a_SOURCES = source.c -test-install-space: install - test -f "$(DESTDIR)/more space/foo/sub/nobase.h" - test ! -f "$(DESTDIR)/more space/foo/nobase.h" - test -f "$(DESTDIR)/more space/foo/base.h" - test -f "$(DESTDIR)/more space/foo/sub/nobase.dat" - test ! -f "$(DESTDIR)/more space/foo/nobase.dat" - test -f "$(DESTDIR)/more space/foo/base.dat" - test -f "$(DESTDIR)/more space/foo/sub/nobase.sh" - test ! -f "$(DESTDIR)/more space/foo/nobase.sh" - test -f "$(DESTDIR)/more space/foo/base.sh" - test -f "$(DESTDIR)/more space/foo/sub/nobase$(EXEEXT)" - test ! -f "$(DESTDIR)/more space/foo/nobase$(EXEEXT)" - test -f "$(DESTDIR)/more space/foo/base$(EXEEXT)" - test -f "$(DESTDIR)/more space/foo/sub/libnobase.a" - test ! -f "$(DESTDIR)/more space/foo/libnobase.a" - test -f "$(DESTDIR)/more space/foo/libbase.a" +test-install-sep: install + test -f '$(DESTDIR)/$(file)-prefix/foo/sub/nobase.h' + test ! -f '$(DESTDIR)/$(file)-prefix/foo/nobase.h' + test -f '$(DESTDIR)/$(file)-prefix/foo/base.h' + test -f '$(DESTDIR)/$(file)-prefix/foo/sub/nobase.dat' + test ! -f '$(DESTDIR)/$(file)-prefix/foo/nobase.dat' + test -f '$(DESTDIR)/$(file)-prefix/foo/base.dat' + test -f '$(DESTDIR)/$(file)-prefix/foo/sub/nobase.sh' + test ! -f '$(DESTDIR)/$(file)-prefix/foo/nobase.sh' + test -f '$(DESTDIR)/$(file)-prefix/foo/base.sh' + test -f '$(DESTDIR)/$(file)-prefix/foo/sub/nobase$(EXEEXT)' + test ! -f '$(DESTDIR)/$(file)-prefix/foo/nobase$(EXEEXT)' + test -f '$(DESTDIR)/$(file)-prefix/foo/base$(EXEEXT)' + test -f '$(DESTDIR)/$(file)-prefix/foo/sub/libnobase.a' + test ! -f '$(DESTDIR)/$(file)-prefix/foo/libnobase.a' + test -f '$(DESTDIR)/$(file)-prefix/foo/libbase.a' EOF -mkdir sub - -: > sub/base.h -: > sub/nobase.h -: > sub/base.dat -: > sub/nobase.dat -: > sub/base.sh -: > sub/nobase.sh - -cat >source.c <<'EOF' -int -main (int argc, char *argv[]) -{ - return 0; -} -EOF -cp source.c source2.c - $ACLOCAL $AUTOCONF $AUTOMAKE -a -mkdir build -cd build +# Some control characters that are white space: +# back space, carriage return, form feed, horizontal tab, line feed, space +bs='' +cr=' ' +ff=' ' +ht=' ' +lf=' +' +sp=' ' + +build_failures= +install_failures= + +for file in \ + '!' '"' '#' '$' '%' '&' \' '(' ')' '*' '+' ',' '-' ':' ';' \ + '<' '=' '>' '?' '@' '[' '\' ']' '^' '`' '{' '|' '}' '~' \ + "$bs" "$cr" "$ff" "$ht" "$lf" "$sp" \ + '@<:@' '@:>@' '@S|@' '@%:@' '@&t@' \ + "a${sp}b" "a${sp}${sp}b" "a${lf}b" ... a: +do + for test in build install; do + case $test in + build) + build=$file + dest=`pwd`/sub1;; + install) + build=sub1 + dest=`pwd`/$file;; + esac + + # Make sure this system supports this character in file names. + mkdir sub1 "./$file" || exit 77 + + cd "$build" + + ../configure --prefix "/$file-prefix" && + $MAKE && + DESTDIR=$dest file=$file $MAKE -e test-install-sep || + eval "${test}_failures=\"\$${test}_failures$lf\$file\"" + + cd .. + + rm -fr sub1 "./$file" + done +done + +# The list of the above file names that cannot be used as a build directory +# on a POSIX host. This list should be empty, but is not due to limitations +# in Autoconf, Automake, Make, or M4. +expected_build_failures=' +" +# +$ +& +'\'' +\ +` +'"$lf"' +@&t@ +a'"${lf}"'b' + +# Similarly, the list of file names that cannot be used as an install directory +# on a POSIX host. This list should also be empty. +expected_install_failures=' +" +# +$ +'\'' +* +` +'"$lf"' +a'"${lf}"'b' + +fail=0 +for test in build install; do + eval failures=\$${test}_failures + case $failures in + ?*) + cat >&2 <