+2011-10-07 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ parallel-tests: warn on conditional TEST_EXTENSIONS definition
+ Before this change, automake would have still bailed out, but
+ with a confusing error message (about an invalid redefinition
+ of TEST_EXTENSIONS).
+ * automake.in (handle_tests): Warn explicitly if TEST_EXTENSIONS
+ has conditional contents.
+ * tests/test-extensions-con.test: New test.
+ * tests/Makefile.am (TESTS): Add it.
+ * NEWS: Update.
+
2011-10-06 Stefano Lattarini <stefano.lattarini@gmail.com>
parallel-tests: don't allow @substitutions@ in TEST_EXTENSIONS
does not report spurious successes when used with concurrent FreeBSD
make (e.g., "make check -j3").
- - Automake now explicitly rejects invalid entries in TEST_EXTENSIONS when
- the parallel-tests diver is in use, instead of issuing confusing and
- apparently unrelated error messages (about "non-POSIX variable name"
- or "bad characters in variable name"), or even, in some situations,
- producing broken `Makefile.in' files.
+ - When the parallel-tests driver is in use, automake now explicitly
+ rejects invalid entries and conditional contents in TEST_EXTENSIONS,
+ instead of issuing confusing and apparently unrelated error messages
+ (e.g., "non-POSIX variable name", "bad characters in variable name",
+ or "redefinition of TEST_EXTENSIONS), or even, in some situations,
+ silently producing broken `Makefile.in' files.
- The `silent-rules' option now also silences all compile rules if dependency
tracking is disabled. Also, when `silent-rules' is not used, the output from
$at_exeext = subst ('EXEEXT');
$suff = $at_exeext . ' ' . $suff;
}
- define_variable ('TEST_EXTENSIONS', $suff, INTERNAL);
- # FIXME: this mishandles conditions.
- my $var = rvar 'TEST_EXTENSIONS';
+ if (! var 'TEST_EXTENSIONS')
+ {
+ define_variable ('TEST_EXTENSIONS', $suff, INTERNAL);
+ }
+ my $var = var 'TEST_EXTENSIONS';
+ # Currently, we are not able to deal with conditional contents
+ # in TEST_EXTENSIONS.
+ if ($var->has_conditional_contents)
+ {
+ msg_var 'unsupported', $var,
+ "`TEST_EXTENSIONS' cannot have conditional contents";
+ }
my @test_suffixes = $var->value_as_list_recursive;
if ((my @invalid_test_suffixes =
grep { !is_valid_test_extension $_ } @test_suffixes) > 0)
test-trs-recover.test \
test-trs-recover2.test \
test-extensions.test \
+test-extensions-cond.test \
parse.test \
percent.test \
percent2.test \
test-trs-recover.test \
test-trs-recover2.test \
test-extensions.test \
+test-extensions-cond.test \
parse.test \
percent.test \
percent2.test \
--- /dev/null
+#! /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/>.
+
+# Expose bug in conditional definition of TEST_EXTENSIONS.
+
+parallel_tests=yes
+. ./defs || Exit 1
+
+set -e
+
+cat >> configure.in << 'END'
+AM_CONDITIONAL([COND], [:])
+AM_CONDITIONAL([COND2], [:])
+END
+
+$ACLOCAL
+
+cat > 1.am << 'END'
+TESTS =
+if COND
+## lineno 4
+TEST_EXTENSIONS = .foo
+endif
+END
+
+cat > 2.am << 'END'
+TESTS =
+## lineno 3
+TEST_EXTENSIONS = .foo
+if COND
+# Do nothing.
+else
+TEST_EXTENSIONS += .bar
+endif
+END
+
+cat > 3.am << 'END'
+TESTS =
+if COND
+if !COND2
+TESTS = x
+else
+## lineno 7
+TEST_EXTENSIONS = .foo
+endif
+endif
+END
+
+: > test-driver
+
+for i in 1 2 3; do
+ AUTOMAKE_fails $i
+ lineno=`sed -n 's/^## lineno //p' $i.am` \
+ && test 0 -lt "$lineno" \
+ || Exit 99
+ grep "^$i\\.am:$lineno:.*TEST_EXTENSIONS.*conditional content" stderr
+done
+
+: