summaryrefslogtreecommitdiff
path: root/t/maken3.sh
diff options
context:
space:
mode:
Diffstat (limited to 't/maken3.sh')
-rwxr-xr-xt/maken3.sh190
1 files changed, 190 insertions, 0 deletions
diff --git a/t/maken3.sh b/t/maken3.sh
new file mode 100755
index 000000000..2018549e5
--- /dev/null
+++ b/t/maken3.sh
@@ -0,0 +1,190 @@
+#! /bin/sh
+# 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
+# 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/>.
+
+# Test 'make -n' for various targets, to ensure that:
+#
+# 1. no files or directories are created or removed, and
+#
+# 2. if using GNU make or a make implementation supporting the .MAKE
+# special target, the output from make is sufficiently complete.
+#
+# This test exercises the GCS-mandated targets (except for dist)
+# as well as tags, TAGS.
+
+. ./defs || Exit 1
+
+# Does $MAKE support the '.MAKE' special target?
+have_dotmake=false
+if using_gmake; then
+ have_dotmake=: # GNU make must support it.
+else
+ unindent > mk.tmp << 'END'
+ targ.tmp:
+ : > $@
+ .MAKE: targ.tmp
+END
+ if $MAKE -n -f mk.tmp targ.tmp && test -f targ.tmp; then
+ have_dotmake=:
+ fi
+fi
+
+mkdir sub sub2
+
+cat >> configure.ac << '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 ()
+{
+ 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 ) ;;
+ *)
+ if $have_dotmake; then
+ grep "stamp-$target$" stdout || Exit 1
+ fi
+ test ! -f "stamp-$target$" || Exit 1
+ ;;
+ esac
+ case $target in
+ install-* | installdirs ) ;;
+ *)
+ if $have_dotmake; 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 $have_dotmake; then
+ grep "should-not-be-executed" stdout || Exit 1
+ fi
+ test ! -f "sub2/sub2-$target-should-not-be-executed" || Exit 1
+ ;;
+ esac
+ done
+}
+
+$AUTOMAKE -a -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