188 lines
4.6 KiB
Bash
Executable File
188 lines
4.6 KiB
Bash
Executable File
#! /bin/sh
|
||
# Copyright (C) 2004, 2005 Free Software Foundation, Inc.
|
||
#
|
||
# This program 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, or (at your option)
|
||
# any later version.
|
||
#
|
||
# This program 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 this program. If not, see <http://www.gnu.org/licenses/>.
|
||
|
||
# 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
|
||
# file names (Issue observed with ltmain.sh (GNU libtool) 1.5a (1.1323
|
||
# 2003/11/10 21:06:47))
|
||
|
||
|
||
required='gcc'
|
||
. ./defs || Exit 1
|
||
|
||
set -e
|
||
|
||
# Set up files that won't change each time through the loop.
|
||
|
||
cat >> configure.in <<'EOF'
|
||
AC_PROG_CC
|
||
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
|
||
|
||
foo_HEADERS = sub/base.h
|
||
nobase_foo_HEADERS = sub/nobase.h
|
||
|
||
dist_foo_DATA = sub/base.dat
|
||
nobase_dist_foo_DATA = sub/nobase.dat
|
||
|
||
dist_fooexec_SCRIPTS = sub/base.sh
|
||
nobase_dist_fooexec_SCRIPTS = sub/nobase.sh
|
||
|
||
fooexec_PROGRAMS = sub/base
|
||
nobase_fooexec_PROGRAMS = sub/nobase
|
||
sub_base_SOURCES = source.c
|
||
sub_nobase_SOURCES = source.c
|
||
|
||
fooexec_LIBRARIES = sub/libbase.a
|
||
nobase_fooexec_LIBRARIES = sub/libnobase.a
|
||
sub_libbase_a_SOURCES = source.c
|
||
sub_libnobase_a_SOURCES = source.c
|
||
|
||
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
|
||
|
||
$ACLOCAL
|
||
$AUTOCONF
|
||
$AUTOMAKE -a
|
||
|
||
# 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, M4, or the shell.
|
||
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
|
||
|
||
Exit $fail
|