From b993a265e6af722c2d4cea69d1782ffde33d6d80 Mon Sep 17 00:00:00 2001 From: Stefano Lattarini Date: Fri, 3 May 2013 23:02:11 +0200 Subject: [PATCH] maint: targets and recipes to simplify testing on real-world packages We introduce a new section in the maintainer-specific makefile that contains recipes to test the build system of some well-known GNU packages with the current development version of Automake. Not the cleanest way to do so, but good enough for the moment. We'll revisit the matter after the 1.13.2 release (which we now hope will happen soon). * maint.mk (git-sv-host): New. (SV_GIT_CF, SV_GIT_AC, SV_GIT_GL): Use it to reduce code duplication. (ALL_PACKAGES, FEW_PACKAGES): New, lists of GNU packages to try out. (ttp-check, ttp-check-all): New targets, do the checking with said packages. (ttp): New, alias for 'ttp-check'. (ttp-all): New, alias for 'ttp-check-all'. Signed-off-by: Stefano Lattarini --- maint.mk | 97 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 94 insertions(+), 3 deletions(-) diff --git a/maint.mk b/maint.mk index 69b1630..77b072f 100644 --- a/maint.mk +++ b/maint.mk @@ -302,11 +302,14 @@ CLEANFILES += announcement # Program to use to fetch files. WGET = wget +# Git repositories on Savannah. +git-sv-host = git.savannah.gnu.org + # Some repositories we sync files from. SV_CVS = 'http://savannah.gnu.org/cgi-bin/viewcvs/~checkout~/' -SV_GIT_CF = 'http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;hb=HEAD;f=' -SV_GIT_AC = 'http://git.savannah.gnu.org/gitweb/?p=autoconf.git;a=blob_plain;hb=HEAD;f=' -SV_GIT_GL = 'http://git.savannah.gnu.org/gitweb/?p=gnulib.git;a=blob_plain;hb=HEAD;f=' +SV_GIT_CF = 'http://$(git-sv-host)/gitweb/?p=config.git;a=blob_plain;hb=HEAD;f=' +SV_GIT_AC = 'http://$(git-sv-host)/gitweb/?p=autoconf.git;a=blob_plain;hb=HEAD;f=' +SV_GIT_GL = 'http://$(git-sv-host)/gitweb/?p=gnulib.git;a=blob_plain;hb=HEAD;f=' # Files that we fetch and which we compare against. # Note that the 'lib/COPYING' file must still be synced by hand. @@ -465,3 +468,91 @@ update-copyright: | grep -Ev '(^|/)README$$' \ | grep -Ev "^($$excluded_re)$$" \ | $(update_copyright_env) xargs $(srcdir)/lib/$@ + +# --------------------------------------------------------------- # +# Testing on real-world packages can help us avoid regressions. # +# --------------------------------------------------------------- # + +# +# NOTE (from Stefano Lattarini): +# +# This section is mostly hacky and ad-hoc, but works for me and +# on my system. And while far from clean, it should help catching +# real regressions on real world packages, which is important. +# Ideas about how to improve this and make it more generic, portable, +# clean, etc., are welcome. +# + +# Tiny sample package. +FEW_PACKAGES += hello +# Smallish package using recursive make setup. +FEW_PACKAGES += make +# Medium-size package using non-recursive make setup. +FEW_PACKAGES += coreutils + +ALL_PACKAGES = \ + $(FEW_PACKAGES) \ + autoconf \ + bison \ + grep \ + tar \ + diffutils \ + smalltalk + +pkg-targets = check dist + +# Note: "ttp" stays for "Third Party Package". + +ttp-check ttp-check-all: do-clone = $(GIT) clone --verbose +ttp-check: ttp-packages = $(FEW_PACKAGES) +ttp-check-all: ttp-packages = $(ALL_PACKAGES) + +# Note: some packages depend on pkg-config, and its provided macros. +ttp-check ttp-check-all: t/pkg-config-macros.log + @set -e; \ + $(setup_autotools_paths); \ + skip_all_ () \ + { \ + echo "***" >&2; \ + echo "*** $@: WARNING: $$@" >&2; \ + echo "*** $@: WARNING: some packages might fail to bootstrap" >&2; \ + echo "***" >&2; \ + }; \ + . t/pkg-config-macros.dir/get.sh || exit 1; \ + mkdir $@.d && cd $@.d || exit 1; \ + for p in $(ttp-packages); do \ + echo; \ + echo ======== BEGIN TTP $$p =========; \ + echo; \ + set -x; \ + $(do-clone) git://$(git-sv-host)/$$p.git || exit 1; \ + ( \ + cd $$p \ + && ls -l \ + && if test -f bootstrap; then \ + ./bootstrap --no-git; \ + else \ + $$AUTORECONF -fvi; \ + fi \ + && ./configure \ + && if test $$p = make; then \ + $(MAKE) update; \ + else :; fi \ + && for t in $(pkg-targets); do \ + $(MAKE) $$t WERROR_CFLAGS= || exit 1; \ + done \ + ) || exit 1; \ + set +x; \ + echo; \ + echo ======== END TTP $$p =========; \ + echo; \ + done +ifndef keep-ttp-dir + rm -rf $@.d +endif + +# Alias for lazy typists. +ttp: ttp-check +ttp-all: ttp-check-all + +.PHONY: ttp ttp-check ttp-all ttp-check-all -- 2.7.4