From 0188e0f50e4b9802f50ccaa11390a364db7354a6 Mon Sep 17 00:00:00 2001 From: Stefano Lattarini Date: Fri, 13 Jan 2012 21:56:54 +0100 Subject: [PATCH] tests: unify some tests on "make -n", reducing duplication * tests/maken2.test: Merge into ... * tests/maken.test: ... this test, to avoid unnecessary code duplication. Make checks depending on GNU make conditional to the actual presence of GNU make. * tests/maken4.test: Similarly, merge into ... * tests/maken3.test: ... this test. * tests/Makefile.am (TESTS): Remove maken2.test and maken4.test. --- tests/Makefile.am | 2 - tests/maken.test | 9 ++- tests/maken2.test | 63 -------------------- tests/maken3.test | 24 ++++++-- tests/maken4.test | 172 ------------------------------------------------------ 5 files changed, 25 insertions(+), 245 deletions(-) delete mode 100755 tests/maken2.test delete mode 100755 tests/maken4.test diff --git a/tests/Makefile.am b/tests/Makefile.am index e79c3be..a96218c 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -565,9 +565,7 @@ makefile-deps.test \ makej.test \ makej2.test \ maken.test \ -maken2.test \ maken3.test \ -maken4.test \ makevars.test \ man.test \ man2.test \ diff --git a/tests/maken.test b/tests/maken.test index 8c78b97..61f6886 100755 --- a/tests/maken.test +++ b/tests/maken.test @@ -1,5 +1,5 @@ #! /bin/sh -# Copyright (C) 2009 Free Software Foundation, Inc. +# Copyright (C) 2009, 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 @@ -16,8 +16,8 @@ # Ensure that `make -n dist' and `make -n distcheck' do not change files # on disk, due to GNU make executing rules containing `$(MAKE)'. - -# Please keep this test in sync with sister test maken2.test. +# Also, ensure that `make -n dist' and `make -n distcheck' show what +# would happen, at least when using GNU make. . ./defs || Exit 1 @@ -54,6 +54,9 @@ echo stamp > stampfile $sleep for target in dist distcheck; do $MAKE -n $target + if using_gmake; then + $MAKE -n $target | grep stamp-sub-dist-hook || Exit 1 + fi $MAKE test-no-distdir test `ls -1t | sed 1q` = stampfile done diff --git a/tests/maken2.test b/tests/maken2.test deleted file mode 100755 index 97bf798..0000000 --- a/tests/maken2.test +++ /dev/null @@ -1,63 +0,0 @@ -#! /bin/sh -# Copyright (C) 2009 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 . - -# Ensure that `make -n dist' and `make -n distcheck' show what would happen. -# This currently works for GNU make only. - -# Please keep this test in sync with sister test maken.test. - -required=GNUmake -. ./defs || Exit 1 - -set -e - -mkdir sub - -cat >> configure.in << 'END' -AC_CONFIG_FILES([sub/Makefile]) -AC_OUTPUT -END - -cat > Makefile.am <<'END' -SUBDIRS = sub -distcheck-hook: - @: > stamp-distcheck-hook -test-no-distdir: - test ! -d $(distdir) - test ! -f stamp-distcheck-hook - test ! -f sub/stamp-sub-dist-hook -END -cat >sub/Makefile.am <<'END' -dist-hook: - @: > stamp-sub-dist-hook -END - -$ACLOCAL -$AUTOCONF -$AUTOMAKE -./configure - -$sleep -echo stamp > stampfile -$sleep -for target in dist distcheck; do - $MAKE -n $target - $MAKE test-no-distdir - $MAKE -n $target | grep stamp-sub-dist-hook - test `ls -1t | sed 1q` = stampfile -done - -Exit 0 diff --git a/tests/maken3.test b/tests/maken3.test index b839d0d..27494cc 100755 --- a/tests/maken3.test +++ b/tests/maken3.test @@ -1,5 +1,5 @@ #! /bin/sh -# Copyright (C) 2009 Free Software Foundation, Inc. +# Copyright (C) 2009, 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 @@ -14,14 +14,19 @@ # You should have received a copy of the GNU General Public License # along with this program. If not, see . -# Test `make -n' for various targets, to ensure that no files or -# directories are created. +# Test `make -n' for various targets, to ensure that: +# +# 1. no files or directories are created or removed, and +# +# 2. if using GNU make, stdout output is sufficiently complete. +# +# FIXME: The checks in (2) should also work with BSD make implementations +# FIXME: that support the `.MAKE' special target, but currently we don't +# FIXME: explicitly test that this is truly the case. # # This test exercises the GCS-mandated targets (except for dist) # as well as tags, TAGS. -# Please keep this test in sync with sister test maken4.test. - . ./defs || Exit 1 set -e @@ -134,18 +139,27 @@ check_targets () case $target in install-* | installdirs | tags | TAGS ) ;; *) + if using_gmake; then + grep "stamp-$target$" stdout || Exit 1 + fi test ! -f "stamp-$target$" || Exit 1 ;; esac case $target in install-* | installdirs ) ;; *) + if using_gmake; then + grep "stamp-$target-sub" stdout || Exit 1 + fi test ! -f "sub/stamp-$target-sub" || Exit 1 ;; esac case $target in distclean | maintainer-clean ) ;; *) + if using_gmake; then + grep "should-not-be-executed" stdout || Exit 1 + fi test ! -f "sub2/sub2-$target-should-not-be-executed" || Exit 1 ;; esac diff --git a/tests/maken4.test b/tests/maken4.test deleted file mode 100755 index ae5ce27..0000000 --- a/tests/maken4.test +++ /dev/null @@ -1,172 +0,0 @@ -#! /bin/sh -# Copyright (C) 2009 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 . - -# Test `make -n' for various targets, to ensure that stdout output is -# sufficiently complete. This currently only works for GNU make and -# BSD make implementations that support the `.MAKE' special target. -# -# This test exercises the GCS-mandated targets (except for dist) -# as well as tags, TAGS. - -# Please keep this test in sync with sister test maken3.test. - -required=GNUmake -. ./defs || Exit 1 - -set -e - -mkdir sub sub2 - -cat >> configure.in << 'END' -AC_CONFIG_FILES([sub/Makefile sub2/Makefile]) -AC_OUTPUT -END - -cat > Makefile.am <<'END' -TESTS = foo.test -SUBDIRS = sub sub2 -##BUILT_SOURCES = foo -foo: -foo.test: -all-local: - @: > stamp-all -install-data-local: - @: > stamp-install -uninstall-local: - @: > stamp-uninstall -clean-local: - @: > stamp-clean -distclean-local: - @: > stamp-distclean -info-local: - @: > stamp-info -html-local: - @: > stamp-html -dvi-local: - @: > stamp-dvi -ps-local: - @: > stamp-ps -pdf-local: - @: > stamp-pdf -check-local: - @: > stamp-check -installcheck-local: - @: > stamp-installcheck -mostlyclean-local: - @: > stamp-mostlyclean -maintainer-clean-local: - @: > stamp-maintainer-clean -END -cat >sub/Makefile.am <<'END' -all-local: - @: > stamp-all-sub -install-data-local: - @: > stamp-install-sub -uninstall-local: - @: > stamp-uninstall-sub -clean-local: - @: > stamp-clean-sub -distclean-local: - @: > stamp-distclean-sub -info-local: - @: > stamp-info-sub -html-local: - @: > stamp-html-sub -dvi-local: - @: > stamp-dvi-sub -ps-local: - @: > stamp-ps-sub -pdf-local: - @: > stamp-pdf-sub -check-local: - @: > stamp-check-sub -installcheck-local: - @: > stamp-installcheck-sub -tags: - @: > stamp-tags-sub -TAGS: - @: > stamp-TAGS-sub -mostlyclean-local: - @: > stamp-mostlyclean-sub -maintainer-clean-local: - @: > stamp-maintainer-clean-sub -END -cat >sub2/Makefile.am <<'END' -all install uninstall clean check: - @: > sub2-$@-should-not-be-executed -info dvi pdf ps: - @: > sub2-$@-should-not-be-executed -html: - @: > sub2-$@-should-not-be-executed -install-info install-html install-dvi install-pdf install-ps: - @: > sub2-$@-should-not-be-executed -installcheck installdirs tags TAGS mostlyclean: - @: > sub2-$@-should-not-be-executed -## These targets cannot be overridden like this: -## install-strip distclean maintainer-clean -END - -$ACLOCAL -$AUTOCONF - -check_targets () -{ - set -e - for target in \ - all install install-strip uninstall clean distclean check \ - info html dvi pdf ps \ - install-info install-html install-dvi install-pdf install-ps \ - installcheck installdirs tags TAGS mostlyclean maintainer-clean - do - $MAKE -n $target >stdout || { cat stdout; Exit 1; } - cat stdout - case $target in - install-* | installdirs | tags | TAGS ) ;; - *) - grep "stamp-$target$" stdout || Exit 1 - test ! -f "stamp-$target$" || Exit 1 - ;; - esac - case $target in - install-* | installdirs ) ;; - *) - grep "stamp-$target-sub" stdout || Exit 1 - test ! -f "sub/stamp-$target-sub" || Exit 1 - ;; - esac - case $target in - distclean | maintainer-clean ) ;; - *) - grep "should-not-be-executed" stdout || Exit 1 - test ! -f "sub2/sub2-$target-should-not-be-executed" || Exit 1 - ;; - esac - done -} - -$AUTOMAKE -Wno-override -./configure -check_targets || Exit 1 - -# Now, introduce BUILT_SOURCES into the toplevel Makefile -# TODO: add BUILT_SOURCES to sub2, fix fallout. -sed 's/##//' < Makefile.am > t -mv -f t Makefile.am -$AUTOMAKE -Wno-override --force Makefile -./configure -check_targets || Exit 1 - -Exit 0 -- 2.7.4