# Maintainer makefile rules for Automake.
#
# Copyright (C) 1995-2026 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 <https://www.gnu.org/licenses/>.

# Avoid CDPATH issues.
unexport CDPATH

# Program to use to fetch files from the Net.
WGET = wget

# --------------------------------------------------------- #
#  Automatic generation of the ChangeLog from git history.  #
# --------------------------------------------------------- #

gitlog_to_changelog_command = $(PERL) $(srcdir)/lib/gitlog-to-changelog
gitlog_to_changelog_fixes = $(srcdir)/.git-log-fix
gitlog_to_changelog_options = \
  --srcdir=$(srcdir) \
  --amend=$(gitlog_to_changelog_fixes) \
  --since='2011-12-28 00:00:00' \
  --no-cluster --format '%s%n%n%b'

EXTRA_DIST += lib/gitlog-to-changelog
EXTRA_DIST += $(gitlog_to_changelog_fixes)

# When executed from a git checkout, generate the ChangeLog from the git
# history.  When executed from an extracted distribution tarball, just
# copy the distributed ChangeLog in the build directory (and if this
# fails, or if no distributed ChangeLog file is present, complain and
# give an error).
#
# The ChangeLog should be regenerated unconditionally when working from
# checked-out sources; otherwise, if we're working from a distribution
# tarball, we expect the ChangeLog to be distributed, so check that it
# is indeed present in the source directory.
ChangeLog:
	$(AM_V_GEN)set -e; set -u; \
	if test -d $(srcdir)/.git; then \
	  rm -f $@-t \
	    && $(gitlog_to_changelog_command) \
	       $(gitlog_to_changelog_options) >$@-t \
	    && chmod a-w $@-t \
	    && mv -f $@-t $@ \
	    || exit 1; \
	elif test ! -f $(srcdir)/$@; then \
	  echo "Source tree is not a git checkout, and no pre-existent" \
	       "$@ file has been found there" >&2; \
	  exit 1; \
	fi
.PHONY: ChangeLog


# --------------------------- #
#  Perl coverage statistics.  #
# --------------------------- #

PERL_COVERAGE_DB = $(abs_top_builddir)/cover_db
PERL_COVERAGE_FLAGS = -MDevel::Cover=-db,$(PERL_COVERAGE_DB),-silent,on,-summary,off
PERL_COVER = cover

check-coverage-run recheck-coverage-run: %-coverage-run: all
	$(MKDIR_P) $(PERL_COVERAGE_DB)
	PERL5OPT="$$PERL5OPT $(PERL_COVERAGE_FLAGS)"; export PERL5OPT; \
	WANT_NO_THREADS=yes; export WANT_NO_THREADS; unset AUTOMAKE_JOBS; \
	$(MAKE) $*

check-coverage-report:
	@if test ! -d "$(PERL_COVERAGE_DB)"; then \
	  echo "No coverage database found in '$(PERL_COVERAGE_DB)'." >&2; \
	  echo "Please run \"make check-coverage\" first" >&2; \
	  exit 1; \
	fi
	$(PERL_COVER) $(PERL_COVER_FLAGS) "$(PERL_COVERAGE_DB)"

# 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) check-coverage-report

recheck-coverage: recheck-coverage-run
	$(MAKE) check-coverage-report

clean-coverage:
	rm -rf "$(PERL_COVERAGE_DB)"
clean-local: clean-coverage

.PHONY: check-coverage recheck-coverage check-coverage-run \
	recheck-coverage-run check-coverage-report clean-coverage


# ---------------------------------------------------- #
#  Tagging and/or uploading stable and beta releases.  #
# ---------------------------------------------------- #

GIT = git

EXTRA_DIST += lib/gnupload

# First component of a version number (mandatory).
rx-0 = ^[1-9][0-9]*
#
# Minor component of a version number (omitted only for a major
# release): .1, .10, etc. Assume we won't go beyond .99.
rx-1 = \.[0-9]{1,2}
#
# Micro component of a version number (optional):
# Either a single digit 0-9, or multiple digits starting with 0-8.
# Multiple digits starting with 9 (.90, etc.) are for test releases.
rx-2 = \.([0-9]|[0-8][0-9]+)
#
# Used in recipes to decide which kind of release we are.
stable_major_version_rx = $(rx-0)\.0$$
stable_minor_version_rx = $(rx-0)$(rx-1)$$
stable_micro_version_rx = $(rx-0)$(rx-1)$(rx-2)$$
# The 9* is for pretests beyond the first five, e.g., .990, .992, ...
beta_version_rx = $(rx-0)$(rx-1)\.99*[02468]$$
alpha_version_rx  = $(rx-0)$(rx-1)\.99*[13579]$$
match_version = echo "$(VERSION)" | $(EGREP) >/dev/null

# Check that we don't have uncommitted or unstaged changes.
# TODO: Maybe the git suite already offers a shortcut to verify if the
# TODO: working directory is "clean" or not?  If yes, use that instead
# TODO: of duplicating the logic here.
git_must_have_clean_workdir = \
  $(GIT) rev-parse --verify HEAD >/dev/null \
    && $(GIT) update-index -q --refresh \
    && $(GIT) diff-files --quiet \
    && $(GIT) diff-index --quiet --cached HEAD \
    || { echo "$@: you have uncommitted or unstaged changes" >&2; exit 1; }

determine_release_type = \
  if $(match_version) '$(stable_major_version_rx)'; then \
    release_type='Major release'; \
    announcement_type='major release'; \
    dest=ftp; \
  elif $(match_version) '$(stable_minor_version_rx)'; then \
    release_type='Minor release'; \
    announcement_type='minor release'; \
    dest=ftp; \
  elif $(match_version) '$(stable_micro_version_rx)'; then \
    release_type='Micro release'; \
    announcement_type='maintenance release'; \
    dest=ftp; \
  elif $(match_version) '$(beta_version_rx)'; then \
    release_type='Beta release'; \
    announcement_type='test release'; \
    dest=alpha; \
  elif $(match_version) '$(alpha_version_rx)'; then \
    echo "$@: improper version '$(VERSION)' for a release" >&2; \
    if test -n '$(strip $(DEVEL_SNAPSHOT))'; then \
      echo "$@: continuing anyway since DEVEL_SNAPSHOT is set" >&2; \
      release_type='Development snapshot'; \
      announcement_type='development snapshot'; \
      dest=alpha; \
    else \
      exit 1; \
    fi; \
  else \
    echo "$@: invalid version number '$(VERSION)'" >&2; \
    exit 1; \
  fi

# Help the debugging of $(determine_release_type) and related code.
print-release-type:
	@$(determine_release_type); \
	 echo "$$release_type $(VERSION);" \
	      "it will be announced as a \"$$announcement_type\""

git-tag-release: maintainer-check
	@set -e -u; \
	case '$(AM_TAG_DRYRUN)' in \
	  ""|[nN]|[nN]o|NO) run=;; \
	  *) run="echo Would run:";; \
	esac; \
	$(git_must_have_clean_workdir); \
	set -x; $$run $(GIT) tag -s "v$(VERSION)" -m "$(PACKAGE) $(VERSION)"

git-upload-release:
	@# 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` \
	  && 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) dist
	@# Upload it to the correct FTP repository.
	@$(determine_release_type) \
	  && dest=$$dest.gnu.org:automake \
	  && echo "Uploading to $$dest: $(DIST_ARCHIVES)" \
	  && set -x && $(srcdir)/lib/gnupload $(GNUPLOADFLAGS) --to $$dest \
	                            $(DIST_ARCHIVES)

.PHONY: print-release-type git-upload-release git-tag-release


# ------------------------------------------------------------------ #
#  Explore differences of autogenerated files in different commits.  #
# ------------------------------------------------------------------ #

# Visually comparing differences between the Makefile.in files in
# automake's own build system as generated in two different branches
# might help to catch bugs and blunders.  This has already happened a
# few times in the past, when we used to version-control Makefile.in.
autodiffs:
	@set -u; \
	 NEW_COMMIT=$${NEW_COMMIT-"HEAD"}; \
	 OLD_COMMIT=$${OLD_COMMIT-"HEAD~1"}; \
	 am_gitdir='$(abs_top_srcdir)/.git'; \
	 get_autofiles_from_rev () \
	 { \
	     rev=$$1 dir=$$2 \
	       && echo "$@: will get files from revision $$rev" \
	       && $(GIT) clone -q --depth 1 "$$am_gitdir" tmp \
	       && cd tmp \
	       && $(GIT) checkout -q "$$rev" \
	       && echo "$@: bootstrapping $$rev" \
	       && $(SHELL) ./bootstrap \
	       && echo "$@: copying files from $$rev" \
	       && makefile_ins=`find . -name Makefile.in` \
	       && (tar cf - configure aclocal.m4 $$makefile_ins) | \
	          (cd .. && cd "$$dir" && tar xf -) \
	       && cd .. \
	       && rm -rf tmp; \
	 }; \
	 outdir=$@.dir \
	   && : Before proceeding, ensure the specified revisions truly exist. \
	   && $(GIT) --git-dir="$$am_gitdir" describe $$OLD_COMMIT >/dev/null \
	   && $(GIT) --git-dir="$$am_gitdir" describe $$NEW_COMMIT >/dev/null \
	   && rm -rf $$outdir \
	   && mkdir $$outdir \
	   && cd $$outdir \
	   && mkdir new old \
	   && get_autofiles_from_rev $$OLD_COMMIT old \
	   && get_autofiles_from_rev $$NEW_COMMIT new \
	   && exit 0

# With lots of eye candy; we like our developers pampered and spoiled :-)
compare-autodiffs: autodiffs
	@set -u; \
	: $${COLORDIFF=colordiff} $${DIFF=diff}; \
	dir=autodiffs.dir; \
	if test ! -d "$$dir"; then \
	  echo "$@: $$dir: Not a directory" >&2; \
	  exit 1; \
	fi; \
	mydiff=false mypager=false; \
	if test -t 1; then \
	  if ($$COLORDIFF -r . .) </dev/null >/dev/null 2>&1; then \
	    mydiff=$$COLORDIFF; \
	    mypager="less -R"; \
	  else \
	    mypager=less; \
	  fi; \
	else \
	  mypager=cat; \
	fi; \
	if test "$$mydiff" = false; then \
	  if ($$DIFF -r -u . .); then \
	    mydiff=$$DIFF; \
	  else \
	    echo "$@: no good-enough diff program specified" >&2; \
	    exit 1; \
	  fi; \
	fi; \
	st=0; $$mydiff -r -u $$dir/old $$dir/new | $$mypager || st=$$?; \
	rm -rf $$dir; \
	exit $$st
.PHONY: autodiffs compare-autodiffs

# ---------------------------------------------- #
#  Help writing the announcement for a release.  #
# ---------------------------------------------- #

PACKAGE_MAILINGLIST = automake@gnu.org

announcement: DEVEL_SNAPSHOT = yes
announcement: NEWS
	$(AM_V_GEN): \
	  && rm -f $@ $@-t \
	  && $(determine_release_type) \
	  && ftp_base="https://$$dest.gnu.org/gnu/$(PACKAGE)" \
	  && X () { printf '%s\n' "$$*" >> $@-t; } \
	  && AO () { if test "$$dest" = alpha; then X "$$*"; else :; fi; } \
	  && X "We are pleased to announce the $(PACKAGE_NAME) $(VERSION)" \
	       "$$announcement_type." \
	  && X \
	  && X "**TODO** Brief description of the release here." \
	  && X \
	  && X "**TODO** This description can span multiple paragraphs." \
	  && X \
	  && X "See below for the detailed list of changes since the" \
	  && X "previous version, as summarized by the NEWS file." \
	  && X \
	  && X "Download here:" \
	  && X \
	  && X "  $$ftp_base/$(PACKAGE)-$(VERSION).tar.gz" \
	  && X "  $$ftp_base/$(PACKAGE)-$(VERSION).tar.xz" \
	  && X \
	  && X "Please report bugs and problems to" \
	       "<$(PACKAGE_BUGREPORT)>" \
	  && X "(instead of replying to this mail)," \
	  && X "and send general comments and feedback to" \
	       "<$(PACKAGE_MAILINGLIST)>," \
	  && X "and patches to" \
	       "<automake-patches@gnu.org>." \
	  && X \
	  && X "Thanks to everyone who has reported problems, contributed" \
	  && X "patches, and helped test Automake!" \
	  && X \
	  && X "-*-*-*-" \
	  && X \
  && AO "If you install this test release in its own prefix (recommended)" \
  && AO "and you use libtool, you'll need to arrange for the libtool m4 files"\
  && AO "to be found by aclocal. For info on this, see:" \
  && AO "  https://gnu.org/s/automake/manual/automake.html#Libtool-library-used-but-LIBTOOL-is-undefined" \
  && AO \
	  && $(AWK) '\
	        ($$0 ~ /^New in .*:/) { wait_for_end=1; } \
		(/^~~~/ && wait_for_end) { print; exit(0) } \
		{ print } \
	     ' <$(srcdir)/NEWS >> $@-t \
	  && mv -f $@-t $@ \
	  && ls -l ./$@
.PHONY: announcement
CLEANFILES += announcement

# --------------------------------------------------------------------- #
#  Synchronize third-party files that are committed in our repository.  #
# --------------------------------------------------------------------- #

# Git repositories on Savannah.
# In May 2025, we switched away from https://git.savannah.gnu.org/gitweb
# because it has become unreliable, often returning 502 Bad Gateway
# due to endless crawler bombardment of Savannah. The new
# https://cgi.git.savannah.gnu.org url is an experimental read-only
# mirror. It would probably be better to just switch to assuming local
# checkouts instead of retrieving via a web interface. See thread around
# https://lists.gnu.org/archive/html/savannah-hackers-public/2025-05/msg00040.html

git-sv-host = cgit.git.savannah.gnu.org/cgit

# Some repositories we sync files from.
SV_GIT_CF = https://$(git-sv-host)/config.git/plain/
SV_GIT_GL = https://$(git-sv-host)/gnulib.git/plain/

# Files that we fetch and which we compare against.
# Note that the 'lib/COPYING' file and help2man must still be synced by hand.
FETCHFILES = \
  $(SV_GIT_CF)config.guess \
  $(SV_GIT_CF)config.sub \
  $(SV_GIT_GL)build-aux/texinfo.tex \
  $(SV_GIT_GL)build-aux/gendocs.sh \
  $(SV_GIT_GL)build-aux/gitlog-to-changelog \
  $(SV_GIT_GL)build-aux/gnupload \
  $(SV_GIT_GL)build-aux/update-copyright \
  $(SV_GIT_GL)doc/gendocs_template \
  $(SV_GIT_GL)doc/INSTALL

# Fetch the latest versions of few scripts and files we care about.
# A retrieval or copying failure usually means serious problems,
# so we'll just bail out if 'wget' or 'cp' fail.
# Update the top-level INSTALL in sync with lib/INSTALL as a special case.
fetch:
	$(AM_V_at)rm -rf Fetchdir
	$(AM_V_at)mkdir Fetchdir
	$(AM_V_GEN)set -ex; \
	if $(AM_V_P); then wget_opts=; else wget_opts=-nv; fi; \
	for url in $(FETCHFILES); do \
	   file=`printf '%s\n' "$$url" | sed 's|^.*/||; s|^.*=||'`; \
	   $(WGET) $$wget_opts "$$url" -O Fetchdir/$$file || exit 1; \
	   if cmp Fetchdir/$$file $(srcdir)/lib/$$file >/dev/null; then \
	     : Nothing to do; \
	   else \
	     echo "$@: updating file $$file"; \
	     cp Fetchdir/$$file $(srcdir)/lib/$$file || exit 1; \
	     test "$$file" != INSTALL || cp Fetchdir/$$file ../$$file; \
	   fi; \
	done
	$(AM_V_at)rm -rf Fetchdir
.PHONY: fetch

# ---------------------------------------------------------------------- #
#  Generate and upload manuals in several formats, for the GNU website.  #
# ---------------------------------------------------------------------- #

web_manual_dir = doc/web-manual

RSYNC = rsync
CVS = cvs
CVSU = cvsu
CVS_USER = $${USER}
WEBCVS_ROOT = cvs.savannah.gnu.org:/web
CVS_RSH = ssh
export CVS_RSH

.PHONY: web-manual web-manual-update
web-manual web-manual-update: t = $@.dir

MANUAL_VERSION_HTML = \
	<p>See the <a href="index-full.html">full version index</a> for the manual for other releases of Automake.</p>
MANUAL_VERSION_HTML_PARENT = \
	<p>See the <a href="../index-full.html">full version index</a> for the manual for other releases of Automake.</p>

# Build manual in several formats.  Note to the recipe:
# 1. The symlinking of automake.texi into the temporary directory is
#    required to pacify extra checks from gendocs.sh.
# 2. The redirection to /dev/null before the invocation of gendocs.sh
#    is done to better respect silent rules.
web-manual:
	$(AM_V_at)rm -rf $(web_manual_dir) $t
	$(AM_V_at)mkdir $t
	$(AM_V_at)$(LN_S) '$(abs_srcdir)/doc/$(PACKAGE).texi' '$t/'
	$(AM_V_GEN)cd $t \
	  && GENDOCS_TEMPLATE_DIR='$(abs_srcdir)/lib' \
	  && export GENDOCS_TEMPLATE_DIR \
	  && if $(AM_V_P); then :; else exec >/dev/null 2>&1; fi \
	  && $(SHELL) '$(abs_srcdir)/lib/gendocs.sh' \
	     -I '$(abs_srcdir)/doc' --email $(PACKAGE_BUGREPORT) \
	     $(PACKAGE) '$(PACKAGE_NAME)'
	$(AM_V_at)mkdir $(web_manual_dir)
	$(AM_V_at)mv -f $t/manual/* $(web_manual_dir)
	$(AM_V_at)rm -rf $t
	@! $(AM_V_P) || ls -l $(web_manual_dir)

# Upload manual to www.gnu.org, using CVS (sigh!)
web-manual-update:
	$(AM_V_at)$(determine_release_type); \
	case $$release_type in \
	  [Mm]ajor\ release|[Mm]inor\ release|[Mm]icro\ release);; \
	  *) echo "Cannot upload manuals from a \"$$release_type\"" >&2; \
	     exit 1;; \
	esac
	$(AM_V_at)test -f $(web_manual_dir)/$(PACKAGE).html || { \
	  echo 'You have to run "$(MAKE) web-manual" before' \
	       'invoking "$(MAKE) $@"' >&2; \
	  exit 1; \
	}
	$(AM_V_at)rm -rf $t
	$(AM_V_at)mkdir $t
	$(AM_V_at)cd $t \
	  && $(CVS) -z3 -d :ext:$(CVS_USER)@$(WEBCVS_ROOT)/$(PACKAGE) \
	            co -l $(PACKAGE)/manual \
	  && cd $(PACKAGE)/manual \
	  && $(CVS) up html_node
	@# According to the rsync manpage, "a trailing slash on the
	@# source [...] avoids creating an additional directory
	@# level at the destination".  So the trailing '/' after
	@# '$(web_manual_dir)' below is intended.
	$(AM_V_at)$(RSYNC) -avP $(web_manual_dir)/ $t/$(PACKAGE)/manual
	$(AM_V_at)sed -i '/This page generated by the/i$(MANUAL_VERSION_HTML)\n' $t/$(PACKAGE)/manual/index.html
	$(AM_V_at)$(RSYNC) -avP $(web_manual_dir)/ $t/$(PACKAGE)/manual/$(VERSION)
	$(AM_V_at)sed -i '/This page generated by the/i$(MANUAL_VERSION_HTML_PARENT)\n' $t/$(PACKAGE)/manual/$(VERSION)/index.html
	$(AM_V_GEN): \
	  && cd $t/$(PACKAGE)/manual \
	  && $(CVS) add $(VERSION) $(VERSION)/*/ \
	  && new_files=`$(CVSU) --types='?'` \
	  && new_files=`echo "$$new_files" | sed s/^..//` \
	  && { test -z "$$new_files" || $(CVS) add -ko $$new_files; } \
	  && $(CVS) ci -m $(VERSION)
	$(AM_V_at)rm -rf $t
.PHONY: web-manual-update

clean-web-manual:
	$(AM_V_at)rm -rf $(web_manual_dir)
.PHONY: clean-web-manual
clean-local: clean-web-manual

EXTRA_DIST += lib/gendocs.sh lib/gendocs_template

# --------------------------------------------------------- #
#  Update copyright years of (almost) all committed files.  #
# --------------------------------------------------------- #

EXTRA_DIST += lib/update-copyright

update_copyright_env = \
  UPDATE_COPYRIGHT_FORCE=1 \
  UPDATE_COPYRIGHT_USE_INTERVALS=2

# In addition to the several README files, these as well are
# not expected to have a copyright notice. help2man should be handled in
# make fetch, but currently isn't (fixme).
files_without_copyright = \
  .autom4te.cfg \
  .dir-locals.el \
  .git-log-fix \
  .gitattributes \
  .gitignore \
  INSTALL \
  COPYING \
  AUTHORS \
  THANKS \
  lib/help2man \
  lib/INSTALL \
  lib/COPYING

# This script is in the public domain.
files_without_copyright += lib/mkinstalldirs

# This script has an MIT-style license
files_without_copyright += lib/install-sh

# The UPDATE_COPYRIGHT_YEAR environment variable is honored by the
# 'lib/update-copyright' script.
.PHONY: update-copyright
update-copyright:
	$(AM_V_GEN)set -e; \
	if test -n "$$UPDATE_COPYRIGHT_YEAR"; then \
	   current_year=$$UPDATE_COPYRIGHT_YEAR; \
	else \
	  current_year=`date +%Y` && test -n "$$current_year" \
	    || { echo "$@: cannot get current year" >&2; exit 1; }; \
	fi; \
	sed -i "/^RELEASE_YEAR=/s/=.*$$/=$$current_year/" \
	  bootstrap configure.ac; \
	excluded_re=`( \
	  for url in $(FETCHFILES); do echo "$$url"; done \
	    | sed -e 's!^.*/!!' -e 's!^.*=!!' -e 's!^!lib/!' \
	  && for f in $(files_without_copyright); do echo $$f; done \
	) | sed -e '$$!s,$$,|,' | tr -d '\012\015'`; \
	$(GIT) ls-files \
	  | grep -Ev '(^|/)README$$' \
	  | grep -Ev '^PLANS(/|$$)' \
	  | grep -Ev "^($$excluded_re)$$" \
	  | $(update_copyright_env) xargs $(srcdir)/lib/$@

# -------------------------------------------------------------- #
#  Run the testsuite with the least supported autoconf version.  #
# -------------------------------------------------------------- #

gnu-ftp = https://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 \
	  && $(srcdir)/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" stands 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
