From: Stefano Lattarini Date: Thu, 6 Oct 2011 19:30:04 +0000 (+0200) Subject: parallel-tests: don't allow @substitutions@ in TEST_EXTENSIONS X-Git-Tag: v1.11.1b~16^2~9^2 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=b9b79d887abdc615bae92a9dd79de881664d19d3;p=thirdparty%2Fautomake.git parallel-tests: don't allow @substitutions@ in TEST_EXTENSIONS Even after the last commit `v1.11-476-g90bea64', the checks performed by automake on entries in $(TEST_EXTENSIONS) tried to allow for @substitited@ stuff. This however ends up allowing quite brittle setups, which, most importantly, are of no real practical usefulness anyway. So it's better to just disallow @substitutions@ in TEST_EXTENSIONS altogether, offering a clear error message, instead of risking weird bugs and unexpected behaviors in the generated Makefile.in. * automake.in ($TEST_EXTENSION_PATTERN): Turned from a regular expression ... (is_valid_test_extension): ... into this subroutine. Don't allow generic @substitutions@ anymore (possibly making an exception for `@EXEEXT@' under the proper circumstances). * tests/test-extensions.test: Adjust and extend. --- diff --git a/ChangeLog b/ChangeLog index e52a275fa..98771233d 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,21 @@ +2011-10-06 Stefano Lattarini + + parallel-tests: don't allow @substitutions@ in TEST_EXTENSIONS + Even after the last commit `v1.11-476-g90bea64', the checks + performed by automake on entries in $(TEST_EXTENSIONS) tried to + allow for @substitited@ stuff. This however ends up allowing + quite brittle setups, which, most importantly, are of no real + practical usefulness anyway. So it's better to just disallow + @substitutions@ in TEST_EXTENSIONS altogether, offering a clear + error message, instead of risking weird bugs and unexpected + behaviors in the generated Makefile.in. + * automake.in ($TEST_EXTENSION_PATTERN): Turned from a regular + expression ... + (is_valid_test_extension): ... into this subroutine. Don't allow + generic @substitutions@ anymore (possibly making an exception for + `@EXEEXT@' under the proper circumstances). + * tests/test-extensions.test: Adjust and extend. + 2011-10-01 Stefano Lattarini parallel-tests: automake error our on invalid TEST_EXTENSIONS diff --git a/automake.in b/automake.in index a60bc9fca..0080df815 100755 --- a/automake.in +++ b/automake.in @@ -213,8 +213,6 @@ my $DASH_D_PATTERN = "(^|\\s)-d(\\s|\$)"; # Directories installed during 'install-exec' phase. my $EXEC_DIR_PATTERN = '^(?:bin|sbin|libexec|sysconf|localstate|lib|pkglib|.*exec.*)' . "\$"; -# Suffixes that can appear in TEST_EXTENSIONS (parallel-tests support). -my $TEST_EXTENSION_PATTERN = '^(\.[a-zA-Z_][a-zA-Z0-9_]*|@[a-zA-Z0-9_]+@)$'; # Values for AC_CANONICAL_* use constant AC_CANONICAL_BUILD => 1; @@ -4929,6 +4927,19 @@ sub handle_tests_dejagnu $output_rules .= file_contents ('dejagnu', new Automake::Location); } +# is_valid_test_extension ($EXT) +# ------------------------------ +# Return true if $EXT can appear in $(TEST_EXTENSIONS), return false +# otherwise. +sub is_valid_test_extension ($) +{ + my $ext = shift; + return 1 + if ($ext =~ /^\.[a-zA-Z_][a-zA-Z0-9_]*$/); + return 1 + if (exists $configure_vars{'EXEEXT'} && $ext eq subst ('EXEEXT')); + return 0; +} # Handle TESTS variable and other checks. sub handle_tests @@ -4976,12 +4987,12 @@ sub handle_tests my $var = rvar 'TEST_EXTENSIONS'; my @test_suffixes = $var->value_as_list_recursive; if ((my @invalid_test_suffixes = - grep { !/$TEST_EXTENSION_PATTERN/o } @test_suffixes) > 0) + grep { !is_valid_test_extension $_ } @test_suffixes) > 0) { error $var->rdef (TRUE)->location, "invalid test extensions: @invalid_test_suffixes"; } - @test_suffixes = grep { /$TEST_EXTENSION_PATTERN/o } @test_suffixes; + @test_suffixes = grep { is_valid_test_extension $_ } @test_suffixes; if ($handle_exeext) { unshift (@test_suffixes, $at_exeext) diff --git a/tests/test-extensions.test b/tests/test-extensions.test index 1d5872c4e..901d872bc 100755 --- a/tests/test-extensions.test +++ b/tests/test-extensions.test @@ -24,29 +24,29 @@ parallel_tests=yes set -e cat >> configure.in <<'END' -AC_SUBST([ext], [".e"]) AC_OUTPUT END $ACLOCAL $AUTOCONF -cat > Makefile.am << 'END' -TESTS = -TEST_EXTENSIONS = .sh .T .t1 ._foo .BAR .x_Y_z ._ @ext@ -END +valid_extensions='sh T t1 _foo BAR x_Y_z _' + +echo TESTS = > Makefile.am +echo " $valid_extensions" \ + | sed -e 's/ / ./g' -e 's/^/TEST_EXTENSIONS =/' >> Makefile.am +cat Makefile.am # For debugging. $AUTOMAKE -$EGREP -i 'log|ext' Makefile.in # For debugging. +grep -i 'log' Makefile.in # For debugging. -for lc in sh T t1 _foo BAR x_Y_z _; do +for lc in $valid_extensions; do uc=`echo $lc | tr '[a-z]' '[A-Z]'` $FGREP "\$(${uc}_LOG_COMPILER)" Makefile.in grep "^${uc}_LOG_COMPILE =" Makefile.in grep "^\.${lc}\.log:" Makefile.in done -grep "^@ext@\.log:" Makefile.in # The produced Makefile is not broken. ./configure @@ -54,11 +54,12 @@ $MAKE all check cat > Makefile.am << 'END' TESTS = foo.test bar.sh -TEST_EXTENSIONS = .test mu .x-y a-b .t.1 .sh .6c .0 .11 .@ .t33 .a=b _&_ +TEST_EXTENSIONS = .test mu .x-y a-b .t.1 .sh .6c .0 .11 .= @suf@ .@ext@ +TEST_EXTENSIONS += .= .t33 .a@b _&_ END AUTOMAKE_fails -for suf in mu .x-y a-b .t.1 .6c .0 .11 '.@' '.a=b' '_&_'; do +for suf in mu .x-y a-b .t.1 .6c .0 .11 @suf@ .@ext@ '.=' '_&_'; do suf2=`printf '%s\n' "$suf" | sed -e 's/\./\\./'` $EGREP "^Makefile\.am:2:.*invalid test extension.* $suf2( |$)" stderr done