tests: avoid a spurious failure on MSYS
[platform/upstream/automake.git] / maint.mk
index 2994ef4..3071360 100644 (file)
--- a/maint.mk
+++ b/maint.mk
@@ -1,6 +1,6 @@
 # Maintainer makefile rules for Automake.
 #
-# Copyright (C) 1995-2012 Free Software Foundation, Inc.
+# Copyright (C) 1995-2013 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
@@ -18,6 +18,9 @@
 # Avoid CDPATH issues.
 unexport CDPATH
 
+# Program to use to fetch files from the Net.
+WGET = wget
+
 # --------------------------------------------------------- #
 #  Automatic generation of the ChangeLog from git history.  #
 # --------------------------------------------------------- #
@@ -67,10 +70,10 @@ PERL_COVERAGE_FLAGS = -MDevel::Cover=-db,$(PERL_COVERAGE_DB),-silent,on,-summary
 PERL_COVER = cover
 
 check-coverage-run recheck-coverage-run: %-coverage-run: all
-       $(mkinstalldirs) $(PERL_COVERAGE_DB)
+       $(MKDIR_P) $(PERL_COVERAGE_DB)
        PERL5OPT="$$PERL5OPT $(PERL_COVERAGE_FLAGS)"; export PERL5OPT; \
        WANT_NO_THREADS=yes; export WANT_NO_THREADS; unset AUTOMAKE_JOBS; \
-       $(MAKE) $(AM_MAKEFLAGS) $*
+       $(MAKE) $*
 
 check-coverage-report:
        @if test ! -d "$(PERL_COVERAGE_DB)"; then \
@@ -83,10 +86,10 @@ check-coverage-report:
 # We don't use direct dependencies here because we'd like to be able
 # to invoke the report even after interrupted check-coverage.
 check-coverage: check-coverage-run
-       $(MAKE) $(AM_MAKEFLAGS) check-coverage-report
+       $(MAKE) check-coverage-report
 
 recheck-coverage: recheck-coverage-run
-       $(MAKE) $(AM_MAKEFLAGS) check-coverage-report
+       $(MAKE) check-coverage-report
 
 clean-coverage:
        rm -rf "$(PERL_COVERAGE_DB)"
@@ -156,19 +159,19 @@ git-tag-release: maintainer-check
        $$run $(GIT) tag -s "v$(VERSION)" -m "$$release_type $(VERSION)"
 
 git-upload-release:
-       @# Check this a version we can cut a release release from the
-       @# current repository: we must have a beta version, and the
-       @# repository must be clean.
+       @# Check this is a version we can cut a release (either test
+       @# or stable) from.
        @$(determine_release_type)
+       @# The repository must be clean.
        @$(git_must_have_clean_workdir)
        @# Check that we are releasing from a valid tag.
-       tag=`$(GIT) describe` \
+       @tag=`$(GIT) describe` \
          && case $$tag in "v$(VERSION)") true;; *) false;; esac \
          || { echo "$@: you can only create a release from a tagged" \
                    "version" >&2; \
               exit 1; }
        @# Build the distribution tarball(s).
-       $(MAKE) $(AM_MAKEFLAGS) dist
+       $(MAKE) dist
        @# Upload it to the correct FTP repository.
        @$(determine_release_type) \
          && dest=$$dest.gnu.org:automake \
@@ -290,7 +293,11 @@ announcement: NEWS
          && X \
          && X "-*-*-*-" \
          && X \
-         && sed -n -e '/^~~~/q' -e p $(srcdir)/NEWS >> $@-t \
+         && $(AWK) '\
+               ($$0 == "New in $(VERSION):") { wait_for_end=1; } \
+               (/^~~~/ && wait_for_end) { exit(0) } \
+               { print } \
+            ' <$(srcdir)/NEWS >> $@-t \
          && mv -f $@-t $@
 .PHONY: announcement
 CLEANFILES += announcement
@@ -299,14 +306,14 @@ CLEANFILES += announcement
 #  Synchronize third-party files that are committed in our repository.  #
 # --------------------------------------------------------------------- #
 
-# 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 +472,162 @@ update-copyright:
          | grep -Ev '(^|/)README$$' \
          | grep -Ev "^($$excluded_re)$$" \
          | $(update_copyright_env) xargs $(srcdir)/lib/$@
+
+# -------------------------------------------------------------- #
+#  Run the testsuite with the least supported autoconf version.  #
+# -------------------------------------------------------------- #
+
+gnu-ftp = http://ftp.gnu.org/gnu
+
+# Various shorthands: version, name, package name, tarball name,
+# tarball location, installation directory.
+ac-v = $(required_autoconf_version)
+ac-n = autoconf
+ac-p = $(ac-n)-$(ac-v)
+ac-t = $(ac-p).tar.gz
+ac-l = maintainer/$(ac-t)
+ac-d = maintainer/$(ac-p)
+
+fetch-minimal-autoconf: o = $(ac-l)
+fetch-minimal-autoconf:
+       $(AM_V_at)$(MKDIR_P) $(dir $o)
+       $(AM_V_at)rm -f $o $o-t
+       $(AM_V_GEN)$(WGET) -O $o-t $(gnu-ftp)/$(ac-n)/$(ac-t)
+       $(AM_V_at)chmod a-w $o-t && mv -f $o-t $o && ls -l $o
+.PHONY: fetch-minimal-autoconf
+
+build-minimal-autoconf:
+       $(AM_V_GEN):; \
+       test -f $(ac-l) || { \
+         echo "$@: tarball $(ac-l) seems missing." >&2; \
+         echo "$@: have you run '$(MAKE) fetch-minimal-autoconf'?" >&2; \
+         exit 1; \
+       }; \
+         set -x \
+         && $(PERL) $(srcdir)/t/ax/deltree.pl $(ac-d) \
+         && $(MKDIR_P) $(ac-d) \
+         && cd $(ac-d) \
+         && tar xzf '$(CURDIR)/$(ac-l)' \
+         && mv $(ac-p) src \
+         && mkdir build \
+         && cd build \
+         && env CONFIG_SHELL='$(SHELL)' $(SHELL) ../src/configure \
+              --prefix='$(CURDIR)/$(ac-d)' CONFIG_SHELL='$(SHELL)' \
+         && $(MAKE) install
+       $(AM_V_at)echo ' ======' && $(ac-d)/bin/autoconf --version
+.PHONY: build-minimal-autoconf
+
+check-minimal-autoconf:
+       $(AM_V_at)p='$(ac-d)/bin/autoconf'; \
+         if test ! -f "$$p" || test ! -x "$$p"; then \
+           echo "$@: program '$$p' seems missing." >&2; \
+           echo "$@: have you run '$(MAKE) build-minimal-autoconf'?" >&2; \
+           exit 1; \
+         fi
+       $(AM_V_GEN): \
+         && PATH='$(CURDIR)/$(ac-d)/bin$(PATH_SEPARATOR)'$$PATH \
+         && export PATH \
+         && AUTOCONF=autoconf \
+         && AUTOHEADER=autoheader \
+         && AUTORECONF=autoreconf \
+         && AUTOM4TE=autom4te \
+         && AUTOUPDATE=autoupdate \
+         && export AUTOCONF AUTOHEADER AUTORECONF AUTOM4TE AUTOUPDATE \
+         && echo === check autoconf version '(must be = $(ac-v))' \
+         && autoconf --version \
+         && autoconf --version | sed -e 's/^/ /; s/$$/ /' -e 1q \
+              | $(FGREP) '$(ac-v)' >/dev/null \
+         && echo === configure \
+         && ./configure $(shell ./config.status --config) \
+         && echo === build and test \
+         && $(MAKE) check
+.PHONY: check-minimal-autoconf
+
+
+# --------------------------------------------------------------- #
+#  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