X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=maintainer%2Fmaint.mk;h=d180b09b7d83872f9e30b9bded0351121c9fcdd5;hb=a9926a4cef6defb457218042bbed8784e5c47330;hp=1ea10a2f2d6945870df09594f9ab397bed8aad68;hpb=f637fc39a65cac7eb7050359e6c352a235f64528;p=platform%2Fupstream%2Fautomake.git diff --git a/maintainer/maint.mk b/maintainer/maint.mk index 1ea10a2..d180b09 100644 --- a/maintainer/maint.mk +++ b/maintainer/maint.mk @@ -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. # # --------------------------------------------------------- # @@ -104,10 +107,16 @@ GIT = git 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. @@ -128,14 +137,28 @@ determine_release_type = \ 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 @@ -143,7 +166,7 @@ determine_release_type = \ 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; \ @@ -259,6 +282,7 @@ compare-autodiffs: autodiffs PACKAGE_MAILINGLIST = automake@gnu.org +announcement: DEVEL_SNAPSHOT = yes announcement: NEWS $(AM_V_GEN): \ && rm -f $@ $@-t \ @@ -290,7 +314,11 @@ announcement: NEWS && X \ && X "-*-*-*-" \ && X \ - && sed -n -e '/^~~~/q' -e p $(srcdir)/NEWS >> $@-t \ + && $(AWK) '\ + ($$0 ~ /^New in .*:/) { wait_for_end=1; } \ + (/^~~~/ && wait_for_end) { print; exit(0) } \ + { print } \ + ' <$(srcdir)/NEWS >> $@-t \ && mv -f $@-t $@ .PHONY: announcement CLEANFILES += announcement @@ -299,14 +327,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. @@ -384,7 +412,7 @@ web-manual: 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 @@ -472,3 +500,162 @@ update-copyright: | grep -Ev '^PLANS(/|$$)' \ | 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. +# 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