Hash :
696f44c0
Author :
Date :
2012-11-07T23:40:59
tests: remove mostly-redundant tests on silent rules We used to have several couples of tests named like 'silent-foo-gcc.sh' and 'silent-foo-generic.sh'. Differently from what the names suggest, the first test in such a couple (that is, "silent-foo-gcc.sh") was not meant to check specific GCC-related features, but rather to check how the silent rules behave in combination with automatic dependency tracking when the 'gcc' depmode (that targets GCC versions before the 3.x and 4.x release series) is forced. Such depmode forcing was done exclusively to cover the code paths in 'lib/am/depend2.am' that actually invoke the 'depcomp' script, rather than using the inlined, GCC-specific compiler invocation (the so-called "fastdep" mode), which is the default with modern GCC or with other modern compilers that can emulate the GCC command-line interface (e.g., clang 3.0). But whenever we run the silent-*-generic.sh" tests with other supported compilers which have an associated depmode different from 'gcc3', these same "non-fastdep" code paths are covered, since in those tests we run ./configure with the '--enable-dependency-tracking' option, which causes slower depmodes not to be rejected. Examples of such compilers are the Sun C and C++ compilers (at least since version 5.9, a.k.a. Sun Studio 12.1), and the Tiny C Compiler (from version 0.9.26); and I run the Automake testsuite quite regularly with those compilers. So, the "silent-*-gcc.sh" test cases don't offer any real coverage enhancements, while still using testsuite runtime and causing some (admittedly minor, but still annoying) synchronization headaches with the sister tests "silent-foo-general.sh" tests. So let's just remove these "silent-*-gcc.sh" tests. * t/silent-c-gcc.sh: Remove. * t/silent-cxx-gcc.sh: Likewise. * t/silent-lt-gcc.sh: Likewise. * t/silent-many-gcc.sh: Likewise. * t/silent-c-generic.sh: Rename ... * t/silent-c.sh: ... like this, and adjust heading comments. * t/silent-cxx-generic.sh: Rename ... * t/silent-cxx.sh: ... like this, and adjust heading comments. * t/silent-lt-generic.sh: Rename ... * t/silent-lt.sh: ... like this, and adjust heading comments. * t/silent-many-generic.sh: Rename ... * t/silent-many-languages.sh: ... like this, and adjust heading comments. * t/list-of-tests.mk: Adjust. Signed-off-by: Stefano Lattarini <stefano.lattarini@gmail.com>
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107
#!/bin/sh
# Copyright (C) 2010-2012 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 silent-rules mode for C++, both with and without automatic
# dependency tracking.
required=c++
. test-init.sh
mkdir sub
cat >>configure.ac <<'EOF'
AC_PROG_CXX
AC_CONFIG_FILES([sub/Makefile])
AC_OUTPUT
EOF
cat > Makefile.am <<'EOF'
# Need generic and non-generic rules.
bin_PROGRAMS = foo1 foo2
foo1_SOURCES = foo.cpp baz.cxx quux.cc
foo2_SOURCES = $(foo1_SOURCES)
foo2_CXXFLAGS = $(AM_CXXFLAGS)
SUBDIRS = sub
EOF
cat > sub/Makefile.am <<'EOF'
AUTOMAKE_OPTIONS = subdir-objects
# Need generic and non-generic rules.
bin_PROGRAMS = bar1 bar2
bar1_SOURCES = bar.cpp
bar2_SOURCES = $(bar1_SOURCES)
bar2_CXXFLAGS = $(AM_CXXFLAGS)
EOF
cat > foo.cpp <<'EOF'
using namespace std; /* C compilers fail on this. */
int main (void) { return 0; }
EOF
# Let's try out other extensions too.
echo 'class Baz { public: int i; };' > baz.cxx
echo 'class Quux { public: bool b; };' > quux.cc
cp foo.cpp sub/bar.cpp
$ACLOCAL
$AUTOMAKE --add-missing
$AUTOCONF
# Sanity check: make sure the cache variable we force is really used
# by configure.
$FGREP am_cv_CXX_dependencies_compiler_type configure
# Force dependency tracking explicitly, so that slow dependency
# extractors are not rejected. Try also with dependency tracking
# explicitly disabled.
for config_args in \
--enable-dependency-tracking --disable-dependency-tracking
do
./configure $config_args --enable-silent-rules
$MAKE >stdout || { cat stdout; exit 1; }
cat stdout
$EGREP ' (-c|-o)' stdout && exit 1
grep 'mv ' stdout && exit 1
grep 'CXX .*foo\.' stdout
grep 'CXX .*baz\.' stdout
grep 'CXX .*quux\.' stdout
grep 'CXX .*bar\.' stdout
grep 'CXXLD .*foo1' stdout
grep 'CXXLD .*bar1' stdout
grep 'CXXLD .*foo2' stdout
grep 'CXXLD .*bar2' stdout
# Ensure a clean rebuild.
$MAKE clean
$MAKE V=1 >stdout || { cat stdout; exit 1; }
cat stdout
grep ' -c ' stdout
grep ' -o ' stdout
$EGREP '(CXX|LD) ' stdout && exit 1
# Ensure a clean reconfiguration/rebuild.
$MAKE clean
$MAKE maintainer-clean
done
: