* tests/instspc.test: Major rewrite to test for many other
authorAlexandre Duret-Lutz <adl@gnu.org>
Tue, 19 Jul 2005 20:08:40 +0000 (20:08 +0000)
committerAlexandre Duret-Lutz <adl@gnu.org>
Tue, 19 Jul 2005 20:08:40 +0000 (20:08 +0000)
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
tests/instspc.test

index 4de1392..f913593 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,10 @@
+2005-07-19  Paul Eggert  <eggert@cs.ucla.edu>
+
+       * 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  <kasal@ucw.cz>
 
        * Makefile.am (automake, aclocal): Merge the rules.
index fb83230..bc63033 100755 (executable)
@@ -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.
 #
 # 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='\b'
+cr='\r'
+ff='\f'
+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 <<EOF
+$0: $test test failed for the following file names:$failures
+EOF
+    eval test \"\$failures\" = \"\$expected_${test}_failures\" || fail=1
+  esac
+done
 
-../configure --prefix '/more  space'
-$MAKE
-dest=`pwd`/'with  space';
-DESTDIR=$dest $MAKE -e test-install-space
+exit $fail