[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
improved Automake test for file names with funny characters
From: |
Paul Eggert |
Subject: |
improved Automake test for file names with funny characters |
Date: |
Fri, 01 Jul 2005 14:50:26 -0700 |
User-agent: |
Gnus/5.1007 (Gnus v5.10.7) Emacs/21.4 (gnu/linux) |
Following up on a discussion in the Autoconf and Automake mailing
lists, here's a proposed patch to Automake to have it test better for
file names with funny characters. If you look for the
expected_build_failures and expected_install_failures variables,
you'll see the test cases that Automake/Autoconf/Make etc. cannot
handle now. For example, file names containing '$'. I suppose that
these lists should either be shortened, or documented, or both.
The worst case are two tests that cause infinite loops. Ouch! The
script doesn't attempt to run those two tests. Look for 'infinite
loop' in the patch below.
Watch out: there are unusual control characters in this patch. I'll
attach a copy of the patched file too, just in case.
2005-07-01 Paul Eggert <address@hidden>
* 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 report an expected
failure if the usual candidates show up.
Index: tests/instspc.test
===================================================================
RCS file: /cvs/automake/automake/tests/instspc.test,v
retrieving revision 1.3
diff -p -u -r1.3 instspc.test
--- tests/instspc.test 14 May 2005 20:28:55 -0000 1.3
+++ tests/instspc.test 1 Jul 2005 21:49:37 -0000
@@ -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,8 +18,9 @@
# 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
@@ -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,135 @@ nobase_fooexec_LIBRARIES = sub/libnobase
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=' '
+
+# Make sure this system supports spaces and other strange
+# characters in file names.
+
+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.
+ if mkdir sub1 "./$file"; then
+ cd "$build"
+
+ # Some tests are known to fail, with infinite loops!
+ # Don't bother to run them; assume they'll fail.
+ case $test-$file in
+ 'build-&' | 'build-@&t@') false;;
+ *)
+ ../configure --prefix "/$file-prefix" &&
+ $MAKE &&
+ DESTDIR="$dest" $MAKE -e file="$file" test-install-sep;;
+ esac ||
+ eval "${test}_failures=\"\$${test}_failures$lf\$file\""
+
+ cd ..
+ fi
+
+ 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='
+"
+#
+$
+%
+&
+'\''
+\
+`
+|
+'"$ht"'
+'"$lf"'
+'"$sp"'
address@hidden|@
address@hidden:@
+@&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='
+"
+#
+$
+%
+'\''
+*
+`
+'"$ht"'
+'"$lf"'
+'"$sp"'
address@hidden:@
+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
+ if test $fail != 1 &&
+ eval test \"\$failures\" = \"\$expected_${test}_failures\"; then
+ fail=77
+ else
+ fail=1
+ fi
+ esac
+done
-../configure --prefix '/more space'
-$MAKE
-dest=`pwd`/'with space';
-DESTDIR=$dest $MAKE -e test-install-space
+exit $fail
instspc.test
Description: revised instspc.test
- improved Automake test for file names with funny characters,
Paul Eggert <=
- Re: improved Automake test for file names with funny characters, Alexandre Duret-Lutz, 2005/07/02
- Re: improved Automake test for file names with funny characters, Paul Eggert, 2005/07/04
- Re: improved Automake test for file names with funny characters, Alexandre Duret-Lutz, 2005/07/19
- Re: improved Automake test for file names with funny characters, Stepan Kasal, 2005/07/20
- Re: improved Automake test for file names with funny characters, Paul Eggert, 2005/07/20
- Re: improved Automake test for file names with funny characters, Stepan Kasal, 2005/07/21
- Re: improved Automake test for file names with funny characters, Alexandre Duret-Lutz, 2005/07/27
- Re: improved Automake test for file names with funny characters, Alexandre Duret-Lutz, 2005/07/27
Re: improved Automake test for file names with funny characters, Paul Eggert, 2005/07/04