Improve VPATH handling in config.status for non-Automake projects.

* lib/autoconf/status.m4 (_AC_OUTPUT_FILES_PREPARE): Be sure not
to remove references to a subdir of srcdir.  Fix treatment of
multiple colon-separated VPATH entries.
* tests/torture.at (VPATH): New test.
Report by Keith Marshall.

Signed-off-by: Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
This commit is contained in:
Ralf Wildenhues 2010-06-23 19:23:12 +02:00
parent d11a65ced6
commit 7eccc094e8
3 changed files with 108 additions and 7 deletions

View File

@ -1,5 +1,12 @@
2010-06-23 Ralf Wildenhues <Ralf.Wildenhues@gmx.de> 2010-06-23 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
Improve VPATH handling in config.status for non-Automake projects.
* lib/autoconf/status.m4 (_AC_OUTPUT_FILES_PREPARE): Be sure not
to remove references to a subdir of srcdir. Fix treatment of
multiple colon-separated VPATH entries.
* tests/torture.at (VPATH): New test.
Report by Keith Marshall.
Further improve docs about nested double-quotes and backquotes. Further improve docs about nested double-quotes and backquotes.
* doc/autoconf.texi (Shellology): Remove anchor for pdksh. * doc/autoconf.texi (Shellology): Remove anchor for pdksh.
Move quoting bug example to ... Move quoting bug example to ...

View File

@ -552,17 +552,25 @@ fi < "$tmp/subs1.awk" > "$tmp/subs.awk" \
|| AC_MSG_ERROR([could not setup config files machinery]) || AC_MSG_ERROR([could not setup config files machinery])
_ACEOF _ACEOF
# VPATH may cause trouble with some makes, so we remove $(srcdir), # VPATH may cause trouble with some makes, so we remove sole $(srcdir),
# ${srcdir} and @srcdir@ from VPATH if srcdir is ".", strip leading and # ${srcdir} and @srcdir@ entries from VPATH if srcdir is ".", strip leading and
# trailing colons and then remove the whole line if VPATH becomes empty # trailing colons and then remove the whole line if VPATH becomes empty
# (actually we leave an empty line to preserve line numbers). # (actually we leave an empty line to preserve line numbers).
if test "x$srcdir" = x.; then if test "x$srcdir" = x.; then
ac_vpsub=['/^[ ]*VPATH[ ]*=/{ ac_vpsub=['/^[ ]*VPATH[ ]*=[ ]*/{
s/:*\$(srcdir):*/:/ h
s/:*\${srcdir}:*/:/ s///
s/:*@srcdir@:*/:/ s/^/:/
s/^\([^=]*=[ ]*\):*/\1/ s/[ ]*$/:/
s/:\$(srcdir):/:/g
s/:\${srcdir}:/:/g
s/:@srcdir@:/:/g
s/^:*//
s/:*$// s/:*$//
x
s/\(=[ ]*\).*/\1/
G
s/\n//
s/^[^=]*=[ ]*$// s/^[^=]*=[ ]*$//
}'] }']
fi fi

View File

@ -1151,6 +1151,92 @@ AT_CHECK([cd at-dir && "$at_here/configure" $configure_options], [], [ignore])
AT_CLEANUP AT_CLEANUP
## ------- ##
## VPATH. ##
## ------- ##
AT_SETUP([VPATH])
dirs='at paren brace space'
for dir in $dirs; do
mkdir $dir $dir/s1 $dir/s2
touch $dir/f $dir/s1/f1 $dir/s2/f2
done
AT_DATA([configure.ac],
[[AC_INIT
AC_CONFIG_FILES([at/Makefile paren/Makefile brace/Makefile space/Makefile])
AC_OUTPUT
]])
AT_DATA([at/Makefile.in],
[[# This is what you should use in order to be portable to old makes.
srcdir = @srcdir@
VPATH = @srcdir@/s1:@srcdir@:@srcdir@/s2
all: f f1 f2
@echo ok
]])
AT_DATA([paren/Makefile.in],
[[# This works with some makes but not with old ones.
srcdir = @srcdir@
VPATH = $(srcdir)/s1:$(srcdir):$(srcdir)/s2
all: f f1 f2
@echo ok
]])
AT_DATA([brace/Makefile.in],
[[# This works with some makes but not with old ones.
srcdir = @srcdir@
VPATH = ${srcdir}/s1:${srcdir}:${srcdir}/s2
all: f f1 f2
@echo ok
]])
AT_DATA([space/Makefile.in],
[[# This fails with FreeBSD make, for example.
srcdir = @srcdir@
VPATH = @srcdir@/s1 @srcdir@ @srcdir@/s2
all: f f1 f2
@echo ok
]])
AT_CHECK_AUTOCONF
: ${MAKE=make}
# In place.
AT_CHECK([./configure $configure_options], [], [ignore])
# Treat BSD make separately, afterwards, for maximal coverage.
dirs='at paren brace'
for dir in $dirs; do
AT_CHECK([cd $dir && $MAKE], [], [ignore], [ignore])
done
rm -f config.status
mkdir build absbuild
# Relative name.
AT_CHECK([cd build && ../configure $configure_options], [], [ignore])
for dir in $dirs; do
AT_CHECK([cd build/$dir && $MAKE], [], [ignore], [ignore])
done
# Absolute name.
at_here=`pwd`
AT_CHECK([cd absbuild && "$at_here/configure" $configure_options], [], [ignore])
for dir in $dirs; do
AT_CHECK([cd absbuild/$dir && $MAKE], [], [ignore], [ignore])
done
# These will not pass with BSD make.
AT_CHECK([cd space && { $MAKE || exit 77; }], [], [ignore], [ignore])
AT_CHECK([cd build/space && $MAKE], [], [ignore], [ignore])
AT_CHECK([cd absbuild/space && $MAKE], [], [ignore], [ignore])
AT_CLEANUP
## ----------------- ## ## ----------------- ##
## Signal handling. ## ## Signal handling. ##
## ----------------- ## ## ----------------- ##