diff options
author | Stefano Lattarini <stefano.lattarini@gmail.com> | 2012-11-07 23:40:59 +0100 |
---|---|---|
committer | Stefano Lattarini <stefano.lattarini@gmail.com> | 2012-11-07 23:41:21 +0100 |
commit | 696f44c0840d931656f986e9f4fb623e63df16ba (patch) | |
tree | af442e022bca58dc1f3ec452d7cb5bf873b40d6b /t/silent-cxx.sh | |
parent | cbcf5001c535a05d3262b92465aabfcbe39320e1 (diff) | |
download | automake-696f44c0840d931656f986e9f4fb623e63df16ba.tar.gz |
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>
Diffstat (limited to 't/silent-cxx.sh')
-rwxr-xr-x | t/silent-cxx.sh | 107 |
1 files changed, 107 insertions, 0 deletions
diff --git a/t/silent-cxx.sh b/t/silent-cxx.sh new file mode 100755 index 000000000..0a7aa82e2 --- /dev/null +++ b/t/silent-cxx.sh @@ -0,0 +1,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 + +: |