summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog29
-rwxr-xr-xbootstrap1
-rw-r--r--tests/.gitignore1
-rw-r--r--tests/Makefile.am30
-rw-r--r--tests/Makefile.in45
-rwxr-xr-xtests/depcomp10.test90
-rwxr-xr-xtests/depcomp9.test92
-rwxr-xr-xtests/depmod-data.test30
-rwxr-xr-xtests/depmod-tests.sh220
9 files changed, 343 insertions, 195 deletions
diff --git a/ChangeLog b/ChangeLog
index b91c7644e..541955c29 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,34 @@
2011-05-01 Stefano Lattarini <stefano.lattarini@gmail.com>
+ tests: extend tests on dependency tracking with VPATH
+ * tests/depmod-tests.sh: New script, fulfilling a threefold role:
+ 1. it is called to generate a Makefile.am snippet, containing the
+ definition of proper lists of tests;
+ 2. it is called to set up a directory containing some common data
+ files and autotools-generated files used by the aforementioned
+ tests (this is done for speed reasons only); and
+ 3. it is called to properly run those tests, one at a time.
+ * tests/depcomp9.test: Delete, it's obsolete now.
+ * tests/depcomp10.test: Likewise.
+ * tests/Makefile.am ($(srcdir)/depmod-tests.am): Include this
+ snippet, which defines ...
+ (depmode_tests): ... this new macro, containing the list of the
+ newly generated `*.depmod' tests.
+ (TESTS_EXTENSIONS): Add `.depmod'.
+ (DEPMOD_LOG_COMPILER): Define. It calls `depmod-tests.sh', so that
+ the "depmode tests" will be executed by passing that driver script
+ a proper parameter.
+ ($(depmod_tests)): New dependency declaration (dummy, but required
+ in order to have make actually produce expected log files from the
+ `.depmod.log' suffix rule).
+ (TESTS): Add $(depmod_tests).
+ (EXTRA_DIST): Distribute depmod-tests.sh.
+ Other minor cosmetic changes and reorderings.
+ * bootstrap: Generate depmod-tests.am.
+ * tests/.gitignore: Updated.
+
+2011-05-01 Stefano Lattarini <stefano.lattarini@gmail.com>
+
tests: avoid extra test generation (for `instspc' tests)
We don't really need to generate tons and tons of wrapper test
scripts (presently, ~ 90) just to run what is basically a single
diff --git a/bootstrap b/bootstrap
index 41f1f4e75..95e51d1ba 100755
--- a/bootstrap
+++ b/bootstrap
@@ -107,6 +107,7 @@ dosubst automake.in automake.tmp
cd tests
$BOOTSTRAP_SHELL ./gen-parallel-tests > parallel-tests.am
$BOOTSTRAP_SHELL ./instspc-tests.sh --generate-makefile > instspc-tests.am
+$BOOTSTRAP_SHELL ./depmod-tests.sh --generate-makefile > depmod-tests.am
cd ..
# Run the autotools.
diff --git a/tests/.gitignore b/tests/.gitignore
index 026e261e4..c309c2227 100644
--- a/tests/.gitignore
+++ b/tests/.gitignore
@@ -3,6 +3,7 @@ automake-*
defs-static
instspc-tests.am
parallel-tests.am
+depmod-tests.am
*.dir
*.log
*.log-t
diff --git a/tests/Makefile.am b/tests/Makefile.am
index a5c5a63ec..56e5859f5 100644
--- a/tests/Makefile.am
+++ b/tests/Makefile.am
@@ -18,7 +18,8 @@
MAINTAINERCLEANFILES =
EXTRA_DIST = ChangeLog-old
-TEST_EXTENSIONS = .test .instspc
+
+TEST_EXTENSIONS = .test
XFAIL_TESTS = \
all.test \
@@ -64,7 +65,9 @@ EXTRA_DIST += gen-parallel-tests
include $(srcdir)/instspc-tests.am
+TEST_EXTENSIONS += .instspc
INSTSPC_LOG_COMPILER = $(SHELL) $(srcdir)/instspc-tests.sh
+EXTRA_DIST += instspc-tests.sh
$(srcdir)/instspc-tests.am: instspc-tests.sh Makefile.am
$(AM_V_GEN)($(am__cd) $(srcdir) \
@@ -79,10 +82,29 @@ $(instspc_tests:.instspc=.log): instspc-tests.sh instspc-data.log
# expected log files from the `.instspc.log' suffix rule.
$(instspc_tests):
-EXTRA_DIST += instspc-tests.sh
XFAIL_TESTS += $(instspc_xfail_tests)
+include $(srcdir)/depmod-tests.am
+
+$(srcdir)/depmod-tests.am: depmod-tests.sh Makefile.am
+ $(AM_V_GEN)($(am__cd) $(srcdir) \
+ && $(SHELL) ./depmod-tests.sh --generate-makefile) >$@
+
+TEST_EXTENSIONS += .depmod
+DEPMOD_LOG_COMPILER = $(SHELL) $(srcdir)/depmod-tests.sh
+EXTRA_DIST += depmod-tests.sh
+
+# All `*.depmod' tests work by calling the script `depmod-tests.sh'.
+# Also, they all use shared data generated by the `depmod-data.test'
+# helper test (for reasons of speed).
+depmod-data.log: depmod-tests.sh
+$(depmod_tests:.depmod=.log): depmod-tests.sh depmod-data.log
+# This dummy declaration is required to have make actually produce
+# expected log files from the `.depmod.log' suffix rule.
+$(depmod_tests):
+
+
# Some testsuite-influential variables should be overridable from the
# test scripts, but not from the environment.
# We want warning messages and explanations for skipped tests to go to
@@ -98,6 +120,7 @@ AM_TESTS_ENVIRONMENT = \
TESTS = \
$(handwritten_tests) \
$(generated_tests) \
+ $(depmod_tests) \
$(instspc_tests)
EXTRA_DIST += $(handwritten_tests) $(generated_tests)
@@ -378,8 +401,7 @@ depcomp6.test \
depcomp7.test \
depcomp8a.test \
depcomp8b.test \
-depcomp9.test \
-depcomp10.test \
+depmod-data.test \
depdist.test \
depend.test \
depend2.test \
diff --git a/tests/Makefile.in b/tests/Makefile.in
index 828897310..e44b2e78a 100644
--- a/tests/Makefile.in
+++ b/tests/Makefile.in
@@ -50,8 +50,8 @@ POST_UNINSTALL = :
build_triplet = @build@
DIST_COMMON = README $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
$(srcdir)/aclocal.in $(srcdir)/automake.in $(srcdir)/defs \
- $(srcdir)/defs-static.in $(srcdir)/instspc-tests.am \
- $(srcdir)/parallel-tests.am
+ $(srcdir)/defs-static.in $(srcdir)/depmod-tests.am \
+ $(srcdir)/instspc-tests.am $(srcdir)/parallel-tests.am
subdir = tests
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/m4/amversion.m4 \
@@ -190,9 +190,12 @@ am__test_logs1 = $(TESTS:=.log)
am__test_logs2 = $(am__test_logs1:.test.log=.log)
TEST_LOG_COMPILE = $(TEST_LOG_COMPILER) $(AM_TEST_LOG_FLAGS) \
$(TEST_LOG_FLAGS)
-TEST_LOGS = $(am__test_logs2:.instspc.log=.log)
+am__test_logs3 = $(am__test_logs2:.instspc.log=.log)
INSTSPC_LOG_COMPILE = $(INSTSPC_LOG_COMPILER) $(AM_INSTSPC_LOG_FLAGS) \
$(INSTSPC_LOG_FLAGS)
+TEST_LOGS = $(am__test_logs3:.depmod.log=.log)
+DEPMOD_LOG_COMPILE = $(DEPMOD_LOG_COMPILER) $(AM_DEPMOD_LOG_FLAGS) \
+ $(DEPMOD_LOG_FLAGS)
TEST_LOGS_TMP = $(TEST_LOGS:.log=.log-t)
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
ACLOCAL = @ACLOCAL@
@@ -288,8 +291,8 @@ top_builddir = @top_builddir@
top_srcdir = @top_srcdir@
MAINTAINERCLEANFILES = $(parallel_tests)
EXTRA_DIST = ChangeLog-old gen-parallel-tests instspc-tests.sh \
- $(handwritten_tests) $(generated_tests)
-TEST_EXTENSIONS = .test .instspc
+ depmod-tests.sh $(handwritten_tests) $(generated_tests)
+TEST_EXTENSIONS = .test .instspc .depmod
XFAIL_TESTS = all.test auxdir2.test cond17.test gcj6.test \
override-conditional-2.test pr8365-remake-timing.test \
yacc-dist-nobuild-subdir.test txinfo5.test \
@@ -355,6 +358,15 @@ instspc_xfail_tests = build-squote.instspc build-dquote.instspc \
install-sharp.instspc install-dollar.instspc \
install-linefeed.instspc install-a_lf_b.instspc
INSTSPC_LOG_COMPILER = $(SHELL) $(srcdir)/instspc-tests.sh
+depmod_tests = depcomp-gcc3.depmod depcomp-gcc.depmod \
+ depcomp-hp.depmod depcomp-sgi.depmod depcomp-aix.depmod \
+ depcomp-icc.depmod depcomp-hp2.depmod depcomp-tru64.depmod \
+ depcomp-msvc7.depmod depcomp-msvc7msys.depmod \
+ depcomp-nosideeffect.depmod depcomp-dashmstdout.depmod \
+ depcomp-dashXmstdout.depmod depcomp-makedepend.depmod \
+ depcomp-cpp.depmod depcomp-msvisualcpp.depmod \
+ depcomp-msvcmsys.depmod
+DEPMOD_LOG_COMPILER = $(SHELL) $(srcdir)/depmod-tests.sh
# Some testsuite-influential variables should be overridable from the
# test scripts, but not from the environment.
@@ -371,6 +383,7 @@ AM_TESTS_ENVIRONMENT = \
TESTS = \
$(handwritten_tests) \
$(generated_tests) \
+ $(depmod_tests) \
$(instspc_tests)
generated_tests = $(parallel_tests)
@@ -648,8 +661,7 @@ depcomp6.test \
depcomp7.test \
depcomp8a.test \
depcomp8b.test \
-depcomp9.test \
-depcomp10.test \
+depmod-data.test \
depdist.test \
depend.test \
depend2.test \
@@ -1311,8 +1323,8 @@ yflags-var-expand.test
all: all-am
.SUFFIXES:
-.SUFFIXES: .html .instspc .log .test
-$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(srcdir)/parallel-tests.am $(srcdir)/instspc-tests.am $(am__configure_deps)
+.SUFFIXES: .depmod .html .instspc .log .test
+$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(srcdir)/parallel-tests.am $(srcdir)/instspc-tests.am $(srcdir)/depmod-tests.am $(am__configure_deps)
@for dep in $?; do \
case '$(am__configure_deps)' in \
*$$dep*) \
@@ -1485,6 +1497,8 @@ recheck recheck-html:
@p='$<'; $(am__check_pre) $(TEST_LOG_COMPILE) "$$tst" $(am__check_post)
.instspc.log:
@p='$<'; $(am__check_pre) $(INSTSPC_LOG_COMPILE) "$$tst" $(am__check_post)
+.depmod.log:
+ @p='$<'; $(am__check_pre) $(DEPMOD_LOG_COMPILE) "$$tst" $(am__check_post)
distdir: $(DISTFILES)
@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
@@ -1702,6 +1716,19 @@ $(instspc_tests:.instspc=.log): instspc-tests.sh instspc-data.log
# expected log files from the `.instspc.log' suffix rule.
$(instspc_tests):
+$(srcdir)/depmod-tests.am: depmod-tests.sh Makefile.am
+ $(AM_V_GEN)($(am__cd) $(srcdir) \
+ && $(SHELL) ./depmod-tests.sh --generate-makefile) >$@
+
+# All `*.depmod' tests work by calling the script `depmod-tests.sh'.
+# Also, they all use shared data generated by the `depmod-data.test'
+# helper test (for reasons of speed).
+depmod-data.log: depmod-tests.sh
+$(depmod_tests:.depmod=.log): depmod-tests.sh depmod-data.log
+# This dummy declaration is required to have make actually produce
+# expected log files from the `.depmod.log' suffix rule.
+$(depmod_tests):
+
# Each test case depends on defs, aclocal, and automake.
$(TEST_LOGS): defs aclocal-$(APIVERSION) automake-$(APIVERSION)
diff --git a/tests/depcomp10.test b/tests/depcomp10.test
deleted file mode 100755
index b278766c1..000000000
--- a/tests/depcomp10.test
+++ /dev/null
@@ -1,90 +0,0 @@
-#! /bin/sh
-# Copyright (C) 2011 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/>.
-
-# hp depmode should work with GNU make in VPATH mode (bug similar to
-# depcomp9.test).
-# For automake bug#8473.
-
-# Here's the bug: hp depmode will prefix VPATH to the object file name,
-# thus the second gmake will invoke depcomp with object='../../src/foo.o',
-# causing errors such as (broken on multiple lines for clarity):
-# cpp: "", line 0: error 4066: Cannot create
-# "../../gllib/.deps/nonblocking.TPo" file for
-# "-M../../gllib/.deps/nonblocking.TPo" option.
-# (No such file or directory[errno=2])
-
-required=GNUmake
-. ./defs || Exit 1
-
-mkdir src src/sub build
-
-cat >> configure.in << 'END'
-AC_PROG_CC
-AM_PROG_CC_C_O
-AC_CONFIG_FILES([src/Makefile])
-AC_OUTPUT
-END
-
-cat > Makefile.am << 'END'
-SUBDIRS = src
-END
-
-cat > src/Makefile.am << 'END'
-AUTOMAKE_OPTIONS = subdir-objects
-bin_PROGRAMS = foo
-foo_SOURCES = foo.c foo.h sub/subfoo.c
-END
-
-cat > src/foo.h <<EOF
-extern int subfoo (void);
-EOF
-
-cat >src/foo.c <<EOF
-#include "foo.h"
-int main (void)
-{
- return subfoo ();
-}
-EOF
-
-cat >src/sub/subfoo.c <<EOF
-#include "foo.h"
-int subfoo (void)
-{
- return 0;
-}
-EOF
-
-$ACLOCAL
-$AUTOCONF
-$AUTOMAKE -a
-
-cd build
-../configure am_cv_CC_dependencies_compiler_type=hp
-# Do not error out with the first make, as the forced 'hp' depmode might
-# not actually work, but we have overridden the _AM_DEPENDENCIES tests.
-$MAKE || skip_ "forced depmode doesn't work"
-
-# We must clean and rebuild, as the actual error only happens the second
-# time the objects are built because 'depcomp' has silently messed up the
-# .Po files the first time.
-$MAKE clean
-
-$MAKE >out 2>&1 || { cat out; Exit 1; }
-cat out
-grep 'src/[._]deps' out && Exit 1
-
-:
diff --git a/tests/depcomp9.test b/tests/depcomp9.test
deleted file mode 100755
index d1323545b..000000000
--- a/tests/depcomp9.test
+++ /dev/null
@@ -1,92 +0,0 @@
-#! /bin/sh
-# Copyright (C) 2011 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/>.
-
-# makedepend should work in VPATH mode.
-
-# Here's the bug: makedepend will prefix VPATH to the object file name,
-# thus the second make will invoke depcomp with object='../../src/foo.o',
-# causing errors such as:
-# touch: cannot touch `../../src/.deps/foo.TPo': No such file or directory
-# makedepend: error: cannot open "../../src/.deps/foo.TPo"
-# ../../depcomp: line 560: ../../src/.deps/foo.TPo: No such file or directory
-
-# We include subfoo only to be sure that we don't remove too much
-# from the object file name.
-
-required='makedepend'
-. ./defs || Exit 1
-
-mkdir src src/sub build
-
-cat >> configure.in << 'END'
-AC_PROG_CC
-AM_PROG_CC_C_O
-AC_CONFIG_FILES([src/Makefile])
-AC_OUTPUT
-END
-
-cat > Makefile.am << 'END'
-SUBDIRS = src
-END
-
-cat > src/Makefile.am << 'END'
-AUTOMAKE_OPTIONS = subdir-objects
-bin_PROGRAMS = foo
-foo_SOURCES = foo.c foo.h sub/subfoo.c
-END
-
-cat > src/foo.h <<EOF
-extern int subfoo (void);
-EOF
-
-cat >src/foo.c <<EOF
-#include "foo.h"
-int main (void)
-{
- return subfoo ();
-}
-EOF
-
-cat >src/sub/subfoo.c <<EOF
-#include "foo.h"
-int subfoo (void)
-{
- return 0;
-}
-EOF
-
-$ACLOCAL
-$AUTOCONF
-$AUTOMAKE -a
-
-cd build
-../configure am_cv_CC_dependencies_compiler_type=makedepend
-
-# Do not error out with the first make, as the forced 'makedepend'
-# depmode might not actually work, but we have overridden the
-# _AM_DEPENDENCIES tests.
-$MAKE || skip_ "forced depmode doesn't work"
-
-# We must clean and rebuild, as the actual error only happens the second
-# time the objects are built because 'makedepend' has silently messed up
-# the .Po files the first time.
-$MAKE clean
-
-$MAKE >out 2>&1 || { cat out; Exit 1; }
-cat out
-grep 'src/[._]deps' out && Exit 1
-
-:
diff --git a/tests/depmod-data.test b/tests/depmod-data.test
new file mode 100755
index 000000000..fdaa52b04
--- /dev/null
+++ b/tests/depmod-data.test
@@ -0,0 +1,30 @@
+#! /bin/sh
+# Copyright (C) 2011 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/>.
+
+# Helper testcase which generate input data for the other tests
+# `*.depmod'. It basically delegates the work to the helper script
+# `depmod-test.sh'.
+
+# Ensure proper definition of $testsrcdir.
+. ./defs-static || exit 99
+
+# Sanity check.
+if test x"$testsrcdir" = x; then
+ echo "$0: \$testsrcdir not set after sourcing of ./defs-static" >&2
+ exit 99
+fi
+
+exec $SHELL $testsrcdir/depmod-tests.sh --generate-data
diff --git a/tests/depmod-tests.sh b/tests/depmod-tests.sh
new file mode 100755
index 000000000..4eb8419fb
--- /dev/null
+++ b/tests/depmod-tests.sh
@@ -0,0 +1,220 @@
+#! /bin/sh
+# Copyright (C) 2011 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/>.
+
+# Driver script to generate and run tests checking that dependency
+# tracking in various flavours works with VPATH builds.
+#
+# This script fulfills a threefold role:
+# 1. It is called to generate a Makefile.am snippet, containing the
+# definition of proper lists of tests.
+# 2. It is called to set up a directory containing some common data
+# files and autotools-generated files used by the aforementioned
+# tests (this is done for speed reasons only).
+# 3. It is called to properly run those tests, one at a time.
+#
+# Examples of reported failures follows ...
+
+# <http://lists.gnu.org/archive/html/automake-patches/2011-04/msg00028.html>
+#
+# Here's the bug: makedepend will prefix VPATH to the object file name,
+# thus the second make will invoke depcomp with object='../../src/foo.o',
+# causing errors such as:
+# touch: cannot touch `../../src/.deps/foo.TPo': No such file or directory
+# makedepend: error: cannot open "../../src/.deps/foo.TPo"
+# ../../depcomp: line 560: ../../src/.deps/foo.TPo: No such file or directory
+
+# <http://debbugs.gnu.org/cgi/bugreport.cgi?bug=8473>
+# <http://lists.gnu.org/archive/html/automake-patches/2011-04/msg00079.html>
+#
+# Here's the bug: hp depmode will prefix VPATH to the object file name,
+# thus the second gmake will invoke depcomp with object='../../src/foo.o',
+# causing errors such as (broken on multiple lines for clarity):
+# cpp: "", line 0: error 4066: Cannot create
+# "../../gllib/.deps/nonblocking.TPo" file for
+# "-M../../gllib/.deps/nonblocking.TPo" option.
+# (No such file or directory[errno=2])
+
+# Be more Bourne compatible (snippet copied from `tests/defs').
+DUALCASE=1; export DUALCASE # for MKS sh
+if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
+ emulate sh
+ NULLCMD=:
+ # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which
+ # is contrary to our usage. Disable this feature.
+ alias -g '${1+"$@"}'='"$@"'
+ setopt NO_GLOB_SUBST
+else
+ case `(set -o) 2>/dev/null` in *posix*) set -o posix;; esac
+fi
+
+set -e
+
+case $# in
+ 0) echo "$0: missing argument" >&2; exit 99;;
+ 1) ;;
+ *) echo "$0: too many arguments" >&2; exit 99;;
+esac
+
+case $1 in
+ --generate-makefile|--generate-data)
+ action=`expr x"$1" : x'--\(.*\)'`
+ ;;
+ depcomp-*.depmod|*/depcomp-*.depmod)
+ action=run-test
+ depmode=`expr /"$1" : '.*/depcomp-\(.*\)\.depmod'`
+ ;;
+ *)
+ echo "$0: invalid argument '$1'" >&2
+ exit 99
+ ;;
+esac
+
+# Helper subroutines for creation of input data files.
+
+create_input_data ()
+{
+ mkdir src src/sub
+
+ unindent > configure.in << 'END'
+ AC_INIT([depcomp], [1.0])
+ AM_INIT_AUTOMAKE
+ AC_CONFIG_FILES([Makefile src/Makefile])
+ AC_PROG_CC
+ AM_PROG_CC_C_O
+ AC_OUTPUT
+END
+
+ echo 'SUBDIRS = src' > Makefile.am
+
+ unindent > src/Makefile.am << 'END'
+ AUTOMAKE_OPTIONS = subdir-objects
+ bin_PROGRAMS = foo
+ foo_SOURCES = foo.c foo.h sub/subfoo.c
+END
+
+ echo 'extern int subfoo (void);' > src/foo.h
+
+ unindent > src/foo.c << 'END'
+ #include "foo.h"
+ int main (void)
+ {
+ return subfoo ();
+ }
+END
+
+ # We include subfoo only to be sure that we don't remove too much
+ # from the object file name.
+ unindent > src/sub/subfoo.c << 'END'
+ #include "foo.h"
+ int subfoo (void)
+ {
+ return 0;
+ }
+END
+
+ $ACLOCAL
+ $AUTOCONF
+ $AUTOMAKE -a
+
+ # Sanity check: make sure the cache variable we force is used
+ # by configure.
+ grep am_cv_CC_dependencies_compiler_type configure
+
+ : > success
+}
+
+# Usage: get_depmodes DEPCOMP-FILE PROGRAM-NAME
+get_depmodes ()
+{
+ # Keep this in sync with the contents of depend.m4.
+ all_depmodes=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < "$1" \
+ | grep -v '^none$' | tr "$nl" "$sp"` \
+ && test -n "$all_depmodes" || {
+ echo "$2: failed to extract list of valid depmodes from '$1'" >&2
+ exit 99
+ }
+}
+
+if test x"$action" = x"generate-makefile"; then
+ # We must generate a makefile fragment on stdout. It must refer
+ # to all tests at once, hence the loop below.
+ get_depmodes ../lib/depcomp
+ echo '## Generated by depmode-tests.sh. DO NOT EDIT!'
+ echo 'depmod_tests ='
+ for depmode in $all_depmodes; do
+ echo "depmod_tests += depcomp-$depmode.depmod"
+ done
+ exit 0
+fi
+
+# We'll need the full setup provided by `tests/defs'. Temporarily disable
+# the errexit flag, since the setup code might not be prepared to deal
+# with it. Also pre-set `$me' for `tests/defs', so that different calls
+# to `depmod-tests.sh' won't try to use the same temporary directory.
+if test x"$action" = x"generate-data"; then
+ me=depmod-data
+else
+ me=depcomp-$depmode
+fi
+set +e
+. ./defs || Exit 99
+set -e
+
+# The directory set up by the `generate-data' action should contain all
+# the files we need. So remove the other files created by ./defs. And
+# check we really are in a temporary `*.dir' directory in the build tree,
+# since the last thing we want is to remove some random user files!
+test -f ../defs-static && test -f ../defs || Exit 99
+case `pwd` in *.dir);; *) Exit 99;; esac
+rm -f *
+
+if test x"$action" = x"generate-data"; then
+ # We must *not* remove the test directory, since its contents must be
+ # used by following dependent tests.
+ keep_testdirs=yes
+ create_input_data
+ Exit 0
+fi
+
+get_depmodes "$top_testsrcdir/lib/depcomp" "$me"
+case " $all_depmodes " in
+ *" $depmode "*) ;;
+ *) echo "$me: invalid depmode '$depmode'" >&2; exit 99;;
+esac
+
+### If we are still here, we have to run a test ...
+
+test -f ../depmod-data.dir/success || {
+ echo "$me: setup by depmod-data.test failed" >&2
+ Exit 99
+}
+
+../depmod-data.dir/configure am_cv_CC_dependencies_compiler_type=$depmode
+
+# Do not error out with the first make, as the depmode we've forced might
+# not actually work, but we have overridden the _AM_DEPENDENCIES tests.
+$MAKE || skip_ "forced depmode '$depmode' doesn't work"
+
+# We must clean and rebuild, as the actual error only happens the second
+# time the objects are built because 'depcomp' has silently messed up the
+# .Po files the first time.
+$MAKE clean
+
+$MAKE >out 2>&1 || { cat out; Exit 1; }
+cat out
+grep 'src/[._]deps' out && Exit 1
+
+: