# Avoid CDPATH issues.
unexport CDPATH
+# Program to use to fetch files from the Net.
+WGET = wget
+
# --------------------------------------------------------- #
# Automatic generation of the ChangeLog from git history. #
# --------------------------------------------------------- #
EXTRA_DIST += lib/gnupload
-base_version_rx = ^[1-9][0-9]*\.[0-9][0-9]*
-stable_major_version_rx = $(base_version_rx)$$
-stable_minor_version_rx = $(base_version_rx)\.[0-9][0-9]*$$
-beta_version_rx = $(base_version_rx)(\.[0-9][0-9]*)?[bdfhjlnprtvxz]$$
+# First component of a version number (mandatory).
+rx-0 = ^[1-9][0-9]*
+# Later components of a version number (optional).
+rx-1 = \.[0-9][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-1)$$
+beta_version_rx = $(rx-0)($(rx-1)){1,2}[bdfhjlnprtvxz]$$
+alpha_version_rx = $(rx-0)($(rx-1)){1,2}[acegikmoqsuwy]$$
match_version = echo "$(VERSION)" | $(EGREP) >/dev/null
# Check that we don't have uncommitted or unstaged changes.
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 '$(VERSION)' for a release" >&2; \
+ echo "$@: invalid version number '$(VERSION)'" >&2; \
exit 1; \
fi
print-release-type:
@$(determine_release_type); \
echo "$$release_type $(VERSION);" \
- "it will be announced as a $$announcement_type"
+ "it will be announced as a \"$$announcement_type\""
git-tag-release: maintainer-check
@set -e -u; \
PACKAGE_MAILINGLIST = automake@gnu.org
+announcement: DEVEL_SNAPSHOT = yes
announcement: NEWS
$(AM_V_GEN): \
&& rm -f $@ $@-t \
&& X "-*-*-*-" \
&& X \
&& $(AWK) '\
- ($$0 == "New in $(VERSION):") { wait_for_end=1; } \
- (/^~~~/ && wait_for_end) { exit(0) } \
+ ($$0 ~ /^New in .*:/) { wait_for_end=1; } \
+ (/^~~~/ && wait_for_end) { print; exit(0) } \
{ print } \
' <$(srcdir)/NEWS >> $@-t \
&& mv -f $@-t $@
# 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
web-manual-update:
$(AM_V_at)$(determine_release_type); \
case $$release_type in \
- [Mm]ajor\ release|[Mm]inor\ release);; \
+ [Mm]ajor\ release|[Mm]inor\ release|[Mm]icro\ release);; \
*) echo "Cannot upload manuals from a \"$$release_type\"" >&2; \
exit 1;; \
esac
| 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 \
+ && $(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.