summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEric Blake <ebb9@byu.net>2008-02-23 15:07:49 -0700
committerEric Blake <ebb9@byu.net>2008-02-25 06:15:07 -0700
commit2261f08799ef4cc16a868bc3492356c1edf99ca9 (patch)
treefdf8f98e91a4ea53f1345f496607d7f9a7c9009e
parent9d400bc11d96c313d041e73b8f7b9a2d069d1ae5 (diff)
downloadm4-1.4.10b.tar.gz
Beta Release Version 1.4.10b.v1.4.10b
* configure.ac (AC_INIT): Bump version. (AM_INIT_AUTOMAKE): Increase requirement, and add dist-lzma. * NEWS: Bump version. * HACKING: Update for git release procedures. * README: Update to mention this is a beta release on the stable branch. * bootstrap: Mention new automake dependency. * Makefile.cfg: New file. * GNUmakefile: Use it. * Makefile.maint (gzip_rsyncable, GZIP_ENV, GIT, VC, VC-tag) (VERSION_REGEXP, this-vc-tag, my_distdir, null_AM_MAKEFLAGS) (TMPDIR, gnulib-version): New macros, borrowed from coreutils. (makefile-check, news-date-check, changelog-check, m4-check) (vc-diff-check, maintainer-distcheck, vc-dist, my-distcheck) (announcement, alpha, beta, major): New rules, borrowed from coreutils. (TEXI2HTML, cvs-release, update-timestamps, cvs-news, cvs-commit) (cvs-dist): Delete. * Makefile.am (EXTRA_DIST): Distribute new file. * m4/gnulib-cache.m4: Import announce-gen module. Signed-off-by: Eric Blake <ebb9@byu.net>
-rw-r--r--ChangeLog28
-rw-r--r--GNUmakefile4
-rw-r--r--HACKING203
-rw-r--r--Makefile.am6
-rw-r--r--Makefile.cfg38
-rw-r--r--Makefile.maint195
-rw-r--r--NEWS722
-rw-r--r--README2
-rwxr-xr-xbootstrap4
-rw-r--r--configure.ac8
-rw-r--r--m4/gnulib-cache.m44
11 files changed, 649 insertions, 565 deletions
diff --git a/ChangeLog b/ChangeLog
index f867f1fe..46905c5e 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,27 @@
+2008-02-25 Eric Blake <ebb9@byu.net>
+
+ Beta Release Version 1.4.10b.
+ * configure.ac (AC_INIT): Bump version.
+ (AM_INIT_AUTOMAKE): Increase requirement, and add dist-lzma.
+ * NEWS: Bump version.
+ * HACKING: Update for git release procedures.
+ * README: Update to mention this is a beta release on the stable
+ branch.
+ * bootstrap: Mention new automake dependency.
+ * Makefile.cfg: New file.
+ * GNUmakefile: Use it.
+ * Makefile.maint (gzip_rsyncable, GZIP_ENV, GIT, VC, VC-tag)
+ (VERSION_REGEXP, this-vc-tag, my_distdir, null_AM_MAKEFLAGS)
+ (TMPDIR, gnulib-version): New macros, borrowed from coreutils.
+ (makefile-check, news-date-check, changelog-check, m4-check)
+ (vc-diff-check, maintainer-distcheck, vc-dist, my-distcheck)
+ (announcement, alpha, beta, major): New rules, borrowed from
+ coreutils.
+ (TEXI2HTML, cvs-release, update-timestamps, cvs-news, cvs-commit)
+ (cvs-dist): Delete.
+ * Makefile.am (EXTRA_DIST): Distribute new file.
+ * m4/gnulib-cache.m4: Import announce-gen module.
+
2008-02-23 Eric Blake <ebb9@byu.net>
Use size_t consistently for string length truncation.
@@ -1002,7 +1026,7 @@
2007-07-09 Eric Blake <ebb9@byu.net>
- Release 1.4.10:
+ Release Version 1.4.10.
* doc/Makefile.am (m4_TEXINFOS): Distribute gpl-3.0.texi.
* Makefile.am (EXTRA_DIST): Distribute gnulib diffs.
* configure.ac (AC_INIT): Bump version number.
@@ -1080,7 +1104,7 @@
* configure.ac (AC_INIT): Bump version number.
* NEWS: Start changes since 1.4.9b, and fix typo.
- Beta Release 1.4.9b:
+ Beta Release Version 1.4.9b.
* configure.ac (AC_INIT): Bump version number.
* NEWS: Describe changes since 1.4.9.
diff --git a/GNUmakefile b/GNUmakefile
index bcdcc6cc..800330e1 100644
--- a/GNUmakefile
+++ b/GNUmakefile
@@ -4,7 +4,8 @@
# It is necessary if you want to build targets usually of interest
# only to the maintainer.
-# Copyright (C) 2001, 2003, 2006, 2007 Free Software Foundation, Inc.
+# Copyright (C) 2001, 2003, 2006, 2007, 2008 Free Software Foundation,
+# Inc.
#
# This file is part of GNU M4.
#
@@ -41,6 +42,7 @@ ifeq ($(have-Makefile),yes)
export TAR_OPTIONS = --owner=0 --group=0 --numeric-owner
include Makefile
+include $(srcdir)/Makefile.cfg
include $(srcdir)/Makefile.maint
else
diff --git a/HACKING b/HACKING
index 987d2c31..3d230445 100644
--- a/HACKING
+++ b/HACKING
@@ -41,10 +41,11 @@ and is not part of a release distribution.
* The master M4 repository is stored in git.
* Before you can build from git, you need to bootstrap. This requires:
- - A pre-installed version of GNU M4 built from a package
+ - A pre-installed version of GNU M4 1.4 or later, built from a package
- Autoconf 2.60 or later
- - Automake 1.9.6 or later
+ - Automake 1.10.1 or later
- Help2man 1.29 or later
+ - LZMA Utils 4.32 or later (from <http://tukaani.org/lzma/>)
- Texinfo 4.8 or later
- Any prerequisites of the above (such as perl, tex)
- A git checkout of gnulib. A read-only copy of gnulib can be
@@ -198,7 +199,7 @@ yyyy-mm-dd Name of Author <email@address> (tiny change)
See http://www.gnu.org/software/libtool/contribute.html for details of
the numbering scheme (m4 uses the same scheme as libtool).
-* Update NEWS, ChangeLog.
+* Update NEWS, configure.ac, README, ChangeLog.
* Run ./bootstrap.
@@ -211,18 +212,16 @@ yyyy-mm-dd Name of Author <email@address> (tiny change)
be up-to-date with m4 --help output, but `make dist' intentionally
does not depend on running a built binary.
-* Run `make distcheck'. If there are any problems, fix them and start
- again.
+* Run `make maintainer-distcheck'. If there are any problems, fix them
+ and start again.
-* Run ./commit from the source tree.
+* Run `git commit' from the source tree if there are any changes from
+ the previous steps.
-* TODO - adjust this step to account for git:
- Run `make cvs-dist', which will build a release tarball (with `make
- distcheck') and tag the tree with release-$(VERSION).
-
-* Run `make deltas' (pass LASTRELEASE=maj.min[.mic[alpha]] if needed) to
- create both diff and xdelta files between the previous release tarball
- and the new.
+* Run `make <target> PREV_VERSION=maj.min[.mic[alpha]]', with target set
+ to `major', `alpha', or `beta' as appropriate. This will run various
+ additional checks, tag the tree with release-$(VERSION), and create
+ diff and xdelta files from the previous version.
* Run './gnupload --to [dest].gnu.org:m4 [files]' to create
detached gpg signature and clear signed directive files, and upload
@@ -233,187 +232,25 @@ yyyy-mm-dd Name of Author <email@address> (tiny change)
* Send announcement to m4-discuss@gnu.org, m4-announce@gnu.org, and
autotools-announce@gnu.org. If not an alpha send to info-gnu@gnu.org
- as well. Use the templates below as a starting point. Contact a list
- administrator for m4-announce in advance to ensure your post will
- make it through (the list is normally set to silently discard all
- posts, even from subscribers).
+ as well. Use /tmp/announce-m4-<version>, created during the above
+ make run, as a starting point. Contact a list administrator for
+ m4-announce in advance to ensure your post will make it through (the
+ list is normally set to silently discard all posts, even from
+ subscribers).
* Update version number in configure.ac to next alpha number.
See http://www.gnu.org/software/libtool/contribute.html for details of
the numbering scheme.
-* Update NEWS, ChangeLog.
+* Update NEWS, configure.ac, ChangeLog.
-* Run ./commit.
+* Run `git commit' and `git push <version>' to push the release tag.
* For non-alpha releases, update the webpages. Replace manual.html with
the new one (generate with `make web-manual').
-
-7. Alpha release note template
-==============================
-
-To: m4-announce@gnu.org, m4-discuss@gnu.org, autotools-announce@gnu.org
-Subject: GNU M4 @VERSION@ released (alpha release).
-
-The GNU M4 Team is pleased to announce alpha release @VERSION@ of GNU
-M4.
-
-GNU `m4' is an implementation of the traditional Unix macro processor.
-It is mostly SVR4 compatible, although it has some extensions (for
-example, handling more than 9 positional parameters to macros). `m4'
-also has built-in functions for including files, running shell commands,
-doing arithmetic, etc. Autoconf needs GNU `m4' for generating
-`configure' scripts, but not for running them.
-
-Here are the compressed sources:
-
- ftp://alpha.gnu.org/gnu/m4/m4-@VERSION@.tar.gz [@SIZE@]
- ftp://alpha.gnu.org/gnu/m4/m4-@VERSION@.tar.bz2 [@SIZE@]
-
-Here are the xdeltas and diffs against m4-@PREV_RELEASE_VERSION_ON_THIS_BRANCH@:
-
- ftp://alpha.gnu.org/gnu/m4/m4-@PREV_RELEASE_VERSION_ON_THIS_BRANCH@-@VERSION@.diff.gz [@SIZE@]
- ftp://alpha.gnu.org/gnu/m4/m4-@PREV_RELEASE_VERSION_ON_THIS_BRANCH@-@VERSION@.xdelta [@SIZE@]
-
-Here are the gpg detached signatures:
-
- ftp://alpha.gnu.org/gnu/m4/m4-@VERSION@.tar.gz.sig
- ftp://alpha.gnu.org/gnu/m4/m4-@VERSION@.tar.bz2.sig
- ftp://alpha.gnu.org/gnu/m4/m4-@PREV_RELEASE_VERSION_ON_THIS_BRANCH@-@VERSION@.diff.gz.sig
- ftp://alpha.gnu.org/gnu/m4/m4-@PREV_RELEASE_VERSION_ON_THIS_BRANCH@-@VERSION@.xdelta.sig
-
-You should download the signature named after any tarball you download,
-and then verify its integrity with, for example:
-
- gpg --verify m4-@VERSION@.tar.gz.sig
-
-If that command fails because you don't have the required public key,
-then run this command to import it:
-
- gpg --keyserver wwwkeys.pgp.net --recv-keys @KEY@
-
-Here are the MD5 and SHA1 checksums:
-
- @MD5SUM@ m4-@VERSION@.tar.gz
- @MD5SUM@ m4-@VERSION@.tar.bz2
- @MD5SUM@ m4-@PREV_RELEASE_VERSION_ON_THIS_BRANCH@-@VERSION@.diff.gz
- @MD5SUM@ m4-@PREV_RELEASE_VERSION_ON_THIS_BRANCH@-@VERSION@.xdelta
- @SHA1SUM@ m4-@VERSION@.tar.gz
- @SHA1SUM@ m4-@VERSION@.tar.bz2
- @SHA1SUM@ m4-@PREV_RELEASE_VERSION_ON_THIS_BRANCH@-@VERSION@.diff.gz
- @SHA1SUM@ m4-@PREV_RELEASE_VERSION_ON_THIS_BRANCH@-@VERSION@.xdelta
-
-This release has @SUMMARY_OF_IMPROVEMENTS_SINCE_LAST_RELEASE_ON_THIS_BRANCH@.
-
-This release was bootstrapped with @BOOTSTRAP_TOOLS_WITH_VERSIONS@.
-
-Alternatively, you can fetch the unbootstrapped sourcecode from git by
-using the following commands:
-
- $ git clone git://git.sv.gnu.org/m4
- $ git checkout -b branch @GIT_RELEASE_TAG@
-
-You will then need to have recent versions of Automake and Autoconf
-installed, and a recent checkout of gnulib, in order to bootstrap the
-checked out sources yourself.
-
-New in @VERSION@: @RELEASE_DATE@
-
- @EXCERPT_FROM_NEWS_FILE@
-
-Please report bugs to <bug-m4@gnu.org>, along with the output of 'make
-check' and any other information that might be useful in resolving the
-issue.
-
-
-8. Full release note template
-=============================
-
-To: info-gnu@gnu.org
-To: m4-announce@gnu.org, m4-discuss@gnu.org, autotools-announce@gnu.org
-Subject: GNU M4 @VERSION@ released.
-
-The GNU M4 Team is pleased to announce the release of GNU M4 @VERSION@.
-
-GNU `m4' is an implementation of the traditional Unix macro processor.
-It is mostly SVR4 compatible, although it has some extensions (for
-example, handling more than 9 positional parameters to macros). `m4'
-also has built-in functions for including files, running shell commands,
-doing arithmetic, etc. Autoconf needs GNU `m4' for generating
-`configure' scripts, but not for running them.
-
-This release has @SUMMARY_OF_IMPROVEMENTS_SINCE_LAST_RELEASE_ON_THIS_BRANCH@.
-
-New in @VERSION@: @RELEASE_DATE@
-
- @EXCERPT_FROM_NEWS_FILE@
-
-m4-@VERSION@ is available now from ftp.gnu.org, along with diffs and
-xdeltas against m4-@PREV_RELEASE_VERSION_ON_THIS_BRANCH@ that are also
-available from ftp.gnu.org. Please use a mirror to reduce stress on the
-main gnu machine:
-
- http://www.gnu.org/order/ftp.html
-
-Here are the compressed sources:
-
- ftp://ftp.gnu.org/gnu/m4/m4-@VERSION@.tar.gz [@SIZE@]
- ftp://ftp.gnu.org/gnu/m4/m4-@VERSION@.tar.bz2 [@SIZE@]
-
-Here are the xdeltas and diffs against m4-@PREV_RELEASE_VERSION_ON_THIS_BRANCH@:
-
- ftp://ftp.gnu.org/gnu/m4/m4-@PREV_RELEASE_VERSION_ON_THIS_BRANCH@-@VERSION@.diff.gz [@SIZE@]
- ftp://ftp.gnu.org/gnu/m4/m4-@PREV_RELEASE_VERSION_ON_THIS_BRANCH@-@VERSION@.xdelta [@SIZE@]
-
-Here are the gpg detached signatures:
-
- ftp://ftp.gnu.org/gnu/m4/m4-@VERSION@.tar.gz.sig
- ftp://ftp.gnu.org/gnu/m4/m4-@VERSION@.tar.bz2.sig
- ftp://ftp.gnu.org/gnu/m4/m4-@PREV_RELEASE_VERSION_ON_THIS_BRANCH@-@VERSION@.diff.gz.sig
- ftp://ftp.gnu.org/gnu/m4/m4-@PREV_RELEASE_VERSION_ON_THIS_BRANCH@-@VERSION@.xdelta.sig
-
-You should download the signature named after any tarball you download,
-and then verify its integrity with, for example:
-
- gpg --verify m4-@VERSION@.tar.gz.sig
-
-If that command fails because you don't have the required public key,
-then run this command to import it:
-
- gpg --keyserver wwwkeys.pgp.net --recv-keys @KEY@
-
-Here are the MD5 and SHA1 checksums:
-
- @MD5SUM@ m4-@VERSION@.tar.gz
- @MD5SUM@ m4-@VERSION@.tar.bz2
- @MD5SUM@ m4-@PREV_RELEASE_VERSION_ON_THIS_BRANCH@-@VERSION@.diff.gz
- @MD5SUM@ m4-@PREV_RELEASE_VERSION_ON_THIS_BRANCH@-@VERSION@.xdelta
- @SHA1SUM@ m4-@VERSION@.tar.gz
- @SHA1SUM@ m4-@VERSION@.tar.bz2
- @SHA1SUM@ m4-@PREV_RELEASE_VERSION_ON_THIS_BRANCH@-@VERSION@.diff.gz
- @SHA1SUM@ m4-@PREV_RELEASE_VERSION_ON_THIS_BRANCH@-@VERSION@.xdelta
-
-This release was bootstrapped with @BOOTSTRAP_TOOLS_WITH_VERSIONS@.
-
-Alternatively, you can fetch the unbootstrapped sourcecode from git by
-using the following commands:
-
- $ git clone git://git.sv.gnu.org/m4
- $ git checkout -b branch @GIT_RELEASE_TAG@
-
-You will then need to have the latest release versions of Automake
-(@AUTOMAKE_VERSION@) and Autoconf (@AUTOCONF_VERSION@) installed, as
-well as a git checkout of gnulib, in order to bootstrap the checked out
-sources yourself.
-
-Please report bugs to <bug-m4@gnu.org>, along with the output of 'make
-check' and any other information that might be useful in resolving the
-issue.
-
-
--
-Copyright (C) 2004, 2005, 2006, 2007 Free Software Foundation, Inc.
+Copyright (C) 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
The canonical source of this file is maintained with the
GNU M4 package. Report bugs to bug-m4@gnu.org.
diff --git a/Makefile.am b/Makefile.am
index f679949e..4c1ff26d 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -1,7 +1,7 @@
## Makefile.am - template for generating Makefile via Automake
##
-## Copyright (C) 2000, 2001, 2003, 2004, 2005, 2006, 2007 Free Software
-## Foundation, Inc.
+## Copyright (C) 2000, 2001, 2003, 2004, 2005, 2006, 2007, 2008 Free
+## Software Foundation, Inc.
##
## This file is part of GNU M4.
##
@@ -21,7 +21,7 @@
## Written by Gary V. Vaughan <gary@gnu.org>
SUBDIRS = . examples lib src doc tests checks
-EXTRA_DIST = bootstrap c-boxes.el GNUmakefile Makefile.maint \
+EXTRA_DIST = bootstrap c-boxes.el GNUmakefile Makefile.cfg Makefile.maint \
m4/gnulib-cache.m4
DISTCLEANFILES = stamp-h
## maintainer-clean should remove as much as possible that ./bootstrap can
diff --git a/Makefile.cfg b/Makefile.cfg
new file mode 100644
index 00000000..1e4b8276
--- /dev/null
+++ b/Makefile.cfg
@@ -0,0 +1,38 @@
+# Customize Makefile.maint. -*- makefile -*-
+# Copyright (C) 2003-2008 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 3 of the License, 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 <http://www.gnu.org/licenses/>.
+
+# Use alpha.gnu.org for alpha and beta releases.
+# Use ftp.gnu.org for major releases.
+gnu_ftp_host-alpha = alpha.gnu.org
+gnu_ftp_host-beta = alpha.gnu.org
+gnu_ftp_host-major = ftp.gnu.org
+gnu_rel_host = $(gnu_ftp_host-$(RELEASE_TYPE))
+
+url_dir_list = \
+ ftp://$(gnu_rel_host)/gnu/coreutils
+
+# The GnuPG ID of the key used to sign the tarballs.
+gpg_key_ID = F4850180
+
+# Tests not to run as part of "make distcheck".
+# Exclude changelog-check here so that there's less churn in ChangeLog
+# files -- otherwise, you'd need to have the upcoming version number
+# at the top of the file for each `make distcheck' run.
+local-checks-to-skip = changelog-check
+
+# The local directory containing the checked-out copy of gnulib used in this
+# release. Used solely to get gnulib's SHA1 for the "announcement" target.
+gnulib_dir = ../gnulib
diff --git a/Makefile.maint b/Makefile.maint
index c07aee12..e47aec29 100644
--- a/Makefile.maint
+++ b/Makefile.maint
@@ -1,6 +1,6 @@
## Makefile.maint -- Makefile rules for m4 maintainers -*-Makefile-*-
##
-## Copyright (C) 2004, 2005, 2006, 2007 Free Software Foundation
+## Copyright (C) 2004, 2005, 2006, 2007, 2008 Free Software Foundation
##
## This file is part of GNU M4.
##
@@ -17,19 +17,137 @@
## You should have received a copy of the GNU General Public License
## along with this program. If not, see <http://www.gnu.org/licenses/>.
-TEXI2HTML = texi2html
+# Do not save the original name or timestamp in the .tar.gz file.
+# Use --rsyncable if available.
+gzip_rsyncable := \
+ $(shell gzip --help 2>/dev/null|grep rsyncable >/dev/null && echo --rsyncable)
+GZIP_ENV = '--no-name --best $(gzip_rsyncable)'
+
+CVS = cvs
+GIT = git
+VC = $(GIT)
+VC-tag = git-tag -s -m '$(VERSION)'
+
+VERSION_REGEXP = $(subst .,\.,$(VERSION))
+ifeq ($(VC),$(GIT))
+this-vc-tag = v$(VERSION)
+else
+tag-package = $(shell echo "$(PACKAGE)" | tr '[:lower:]' '[:upper:]')
+tag-this-version = $(subst .,_,$(VERSION))
+this-vc-tag = $(tag-package)-$(tag-this-version)
+endif
+my_distdir = $(PACKAGE)-$(VERSION)
+
+# Ensure that we use only the standard $(VAR) notation,
+# not @...@ in Makefile.am, now that we can rely on automake
+# to emit a definition for each substituted variable.
+makefile-check:
+ grep -nE '@[A-Z_0-9]+@' `find . -name Makefile.am` \
+ && { echo 'Makefile.maint: use $$(...), not @...@' 1>&2; exit 1; } || :
+
+news-date-check: NEWS version-check
+ today=`date +%Y-%m-%d`; \
+ if head NEWS | grep '^\*.* $(VERSION_REGEXP) ('$$today')' \
+ >/dev/null; then \
+ :; \
+ else \
+ echo "version or today's date is not in NEWS" 1>&2; \
+ exit 1; \
+ fi
+
+changelog-check:
+ if head ChangeLog | grep 'Version $(VERSION_REGEXP)\.$$' \
+ >/dev/null; then \
+ :; \
+ else \
+ echo "$(VERSION) not in ChangeLog" 1>&2; \
+ exit 1; \
+ fi
+
+m4-check:
+ @grep -n 'AC_DEFUN([^[]' m4/*.m4 \
+ && { echo 'Makefile.maint: quote the first arg to AC_DEFUN' 1>&2; \
+ exit 1; } || :
+
+vc-diff-check:
+ $(VC) diff > vc-diffs || :
+ if test -s vc-diffs; then \
+ cat vc-diffs; \
+ echo "Some files are locally modified:" 1>&2; \
+ exit 1; \
+ else \
+ rm vc-diffs; \
+ fi
-.PHONY: cvs-release
-cvs-release: version-check prev-tarball cvs-news cvs-commit cvs-dist deltas web-manual
- @tarname="$(PACKAGE)-$(VERSION).tar.gz"; \
- diffname="$(PACKAGE)-$(LASTRELEASE)-$(VERSION).diff.gz"; \
- xdeltaname="$(PACKAGE)-$(LASTRELEASE)-$(VERSION).xdelta"; \
- echo " *** Upload $$tarname, $$tarname.sig,";\
- echo " *** $$tarname.directive.asc, $$diffname,"; \
- echo " *** $$diffname.sig, $$diffname.directive.asc,"; \
- echo " *** $$xdeltaname, $$xdeltaname.sig and";\
- echo " *** $$xdeltaname.directive.asc to either"
- echo " *** /incoming/alpha or /incoming/ftp on ftp-upload.gnu.org."
+maintainer-distcheck:
+ $(MAKE) distcheck
+ $(MAKE) my-distcheck
+
+# Don't make a distribution if checks fail.
+# Also, make sure the NEWS file is up-to-date.
+vc-dist: $(local-check) vc-diff-check maintainer-distcheck
+ $(MAKE) dist
+
+# Use this to make sure we don't run these programs when building
+# from a virgin tgz file, below.
+null_AM_MAKEFLAGS = \
+ ACLOCAL=false \
+ AUTOCONF=false \
+ AUTOMAKE=false \
+ AUTOHEADER=false \
+ MAKEINFO=false
+
+# Use -Wformat -Werror to detect format-string/arg-list mismatches.
+# Also, check for shadowing problems with -Wshadow, and for pointer
+# arithmetic problems with -Wpointer-arith.
+# These CFLAGS are pretty strict. If you build this target, you probably
+# have to have a recent version of gcc and glibc headers.
+TMPDIR ?= /tmp
+t=$(TMPDIR)/$(PACKAGE)/test
+my-distcheck: $(local-check) check
+ -rm -rf $(t)
+ mkdir -p $(t)
+ GZIP=$(GZIP_ENV) $(AMTAR) -C $(t) -zxf $(distdir).tar.gz
+ cd $(t)/$(distdir) \
+ && ./configure \
+ && $(MAKE) CFLAGS='$(warn_cflags)' \
+ AM_MAKEFLAGS='$(null_AM_MAKEFLAGS)' \
+ && $(MAKE) dvi \
+ && $(MAKE) check \
+ && $(MAKE) distclean
+ (cd $(t) && mv $(distdir) $(distdir).old \
+ && $(AMTAR) -zxf - ) < $(distdir).tar.gz
+ diff -ur $(t)/$(distdir).old $(t)/$(distdir)
+ -rm -rf $(t)
+ @echo "========================"; \
+ echo "$(distdir).tar.gz is ready for distribution"; \
+ echo "========================"
+
+gnulib-version = $$(cd $(gnulib_dir) && git describe)
+
+announcement: NEWS ChangeLog $(rel-files)
+ @./build-aux/announce-gen \
+ --release-type=$(RELEASE_TYPE) \
+ --package=$(PACKAGE) \
+ --prev=$(PREV_VERSION) \
+ --curr=$(VERSION) \
+ --gpg-key-id=$(gpg_key_ID) \
+ --news=NEWS \
+ --bootstrap-tools=autoconf,automake,gnulib \
+ --gnulib-version=$(gnulib-version) \
+ $(addprefix --url-dir=, $(url_dir_list))
+
+.PHONY: alpha beta major
+alpha beta major: $(local-check)
+ test $@ = major \
+ && { echo $(VERSION) | grep -E '^[0-9]+(\.[0-9]+)+$$' \
+ || { echo "invalid version string: $(VERSION)" 1>&2; exit 1;};}\
+ || :
+ $(MAKE) vc-dist
+ $(MAKE) news-date-check changelog-check
+ $(MAKE) deltas
+ $(MAKE) -s announcement RELEASE_TYPE=$@ > /tmp/announce-$(my_distdir)
+ $(VC-tag) $(this-vc-tag)
.PHONY: version-check
version-check:
@@ -44,47 +162,12 @@ version-check:
.PHONY: prev-tarball
prev-tarball:
## Make sure we have the previous release tarball in the tree.
- @if test -z "$(LASTRELEASE)"; \
- then echo "LASTRELEASE is not set"; exit 1; fi
- @ofile="$(PACKAGE)-$(LASTRELEASE).tar.gz"; \
+ @if test -z "$(PREV_VERSION)"; \
+ then echo "PREV_VERSION is not set"; exit 1; fi
+ @ofile="$(PACKAGE)-$(PREV_VERSION).tar.gz"; \
if test -f $$ofile; then :; \
else echo "Cannot make deltas without $$ofile"; exit 1; fi
-# TSDEPS will be defined to TSDEPS_DIST at `make dist' time
-TSDEPS =
-TSDEPS_DIST = ChangeLog
-CVS = cvs # set it to `:' to avoid CVS operations
-
-.PHONY: timestamps update-timestamps
-timestamps: update-timestamps
-update-timestamps:
- @if (cd $(srcdir) && test -d CVS && \
- $(CVS) -n update $(TSDEPS_DIST) | grep '^M'); then \
- echo "Cannot make cvs-dist before commit"; exit 1; else :; fi
-
-
-.PHONY: cvs-news
-cvs-news:
-## Make sure the NEWS file is up-to-date:
- @if sed '1,4d;5q' $(srcdir)/NEWS | grep -e "$(VERSION)" >/dev/null; \
- then :; \
- else \
- echo "NEWS not updated; not releasing" 1>&2; \
- exit 1; \
- fi
-
-.PHONY: cvs-commit
-cvs-commit: cvs-news
- cd $(srcdir) && $(SHELL) ./commit
-
-.PHONY: cvs-dist
-cvs-dist: cvs-news timestamps
-## Build the distribution:
- $(MAKE) dist
-## Finally, if everything was successful, tag the release
- cd $(srcdir) \
- && $(CVS) -q tag `echo "release-$(VERSION)" | sed 's/\./_/g'`
-
.PHONY: new-tarball
new-tarball:
## Make sure we have the new release tarball in the tree.
@@ -114,12 +197,12 @@ delta-diff: prev-tarball new-tarball
rm -rf delta-diff
mkdir delta-diff
- ofile="../$(PACKAGE)-$(LASTRELEASE)-$(VERSION).diff.gz"; \
+ ofile="../$(PACKAGE)-$(PREV_VERSION)-$(VERSION).diff.gz"; \
cd delta-diff \
- && tar xzf "../$(PACKAGE)-$(LASTRELEASE).tar.gz" \
+ && tar xzf "../$(PACKAGE)-$(PREV_VERSION).tar.gz" \
&& tar xzf "../$(PACKAGE)-$(VERSION).tar.gz" \
&& $(DIFF) $(DIFF_OPTIONS) \
- $(PACKAGE)-$(LASTRELEASE) $(PACKAGE)-$(VERSION) \
+ $(PACKAGE)-$(PREV_VERSION) $(PACKAGE)-$(VERSION) \
| GZIP=$(GZIP_ENV) gzip -c > $$ofile
rm -rf delta-diff
@@ -132,9 +215,9 @@ delta-xdelta: prev-tarball new-tarball got-xdelta
## Generate the delta file (xdelta has weird exit statuses, so we need to
## add some shell code to keep make happy), and then generate the signatures
## for FSF ftp-upload:
- ofile="$(PACKAGE)-$(LASTRELEASE)-$(VERSION).xdelta"; \
+ ofile="$(PACKAGE)-$(PREV_VERSION)-$(VERSION).xdelta"; \
( test -z `$(XDELTA) delta $(XDELTA_OPTIONS) \
- $(PACKAGE)-$(LASTRELEASE).tar.gz $(PACKAGE)-$(VERSION).tar.gz \
+ $(PACKAGE)-$(PREV_VERSION).tar.gz $(PACKAGE)-$(VERSION).tar.gz \
$$ofile 2>&1` \
&& : )
diff --git a/NEWS b/NEWS
index 8faafcfe..284b49d1 100644
--- a/NEWS
+++ b/NEWS
@@ -2,317 +2,417 @@ GNU M4 NEWS - User visible changes.
Copyright (C) 1992, 1993, 1994, 2004, 2005, 2006, 2007, 2008 Free Software
Foundation, Inc.
-Version 1.4.11 - ?? ??? 2008, by ???? (git version 1.4.10a-*)
-
-* Security fixes for the -F option, for bugs present since -F was
- introduced in 1.3: Avoid core dump with 'm4 -F file -t undefined', and
- avoid arbitrary code execution with certain file names.
-* Fix regression introduced in 1.4.9b in the `divert' builtin when more
- than 512 kibibytes are saved in diversions on platforms like NetBSD where
- fopen(name,"a+") seeks to the end of the file.
-* The output of the `maketemp' and `mkstemp' builtins is now quoted if a
- file was created. This is a minor security fix, because it was possible
- (although rather unlikely) that an unquoted string could match an
- existing macro name, such that use of the `mkstemp' output would trigger
- inadvertent macro expansion and operate on the wrong file name.
-* Enhance the `defn' builtin to support concatenation of multiple text
- arguments, as required by POSIX. However, at this time, it is not
- possible to concatenate a builtin macro with anything else; a warning is
- now issued if this is attempted, although a future version of M4 may lift
- this restriction to match other implementations.
-* Enhance the `index' builtin to guarantee linear behavior and often
- acheive sublinear results, in spite of the surprisingly large number of
- systems with a brain-dead quadratic strstr(3).
-* Enhance the `regexp' and `patsubst' builtins to cache frequently used
- regular expressions, which speeds up typical Autoconf usage.
-* Enhance the `format' builtin to warn for more suspicious usages, such as
- missing arguments or problems parsing according to the format string.
-* Enhance the `ifelse' and `shift' builtins so that tail-recursive
- algorithms based on `$@' operate in linear, rather than quadratic, time
- and memory.
-* A number of portability improvements inherited from gnulib.
-
-Version 1.4.10 - 09 Jul 2007, by Eric Blake (CVS version 1.4.9c)
-
-* Upgrade from GPL version 2 to GPL version 3 or later.
-* A number of portability improvements inherited from gnulib.
-* Avoid undefined behavior introduced in 1.4.9b in the `format' builtin
- when handling %c. However, this area of code has never been documented,
- and currently does not match the POSIX behavior of printf(1), so it may
- have further changes in the next version.
-
-Version 1.4.9b - 29 May 2007, by Eric Blake (CVS version 1.4.9a)
-
-* Fix regression introduced in 1.4.9 in the `eval' builtin when performing
- division.
-* Fix regression introduced in 1.4.8 in the `-F' option that made it
- impossible to freeze more than 512 kibibytes of diverted text.
-* The synclines option `-s' no longer generates sync lines in the middle of
- multiline comments or quoted strings.
-* Work around a number of corner-case POSIX compliance bugs in various
- broken stdio libraries. In particular, the `syscmd' builtin behaves
- more predictably when stdin is seekable.
-* The `format' builtin now understands formats such as %a, %A, and %'hhd,
- and works around a number of platform printf bugs. Furthermore, the
- sequence format(%*.*d,-1,-1,1) no longer outputs random data. However,
- some non-compliant platforms such as mingw still have known bugs in
- strtod that may cause testsuite failures.
-* The testsuite is improved to also run gnulib portability tests for the
- features that M4 imports from gnulib.
-
-Version 1.4.9 - 23 Mar 2007, by Eric Blake (CVS version 1.4.8c)
-
-* Minor documentation and portability cleanups.
-
-Version 1.4.8b - 24 Feb 2007, by Eric Blake (CVS version 1.4.8a)
-
-* Fix a regression introduced in 1.4.8 that made m4 unable to process
- files larger than 2GiB on some platforms.
-* Fix a regression introduced in 1.4.8 that made m4 dump core when
- invoked as 'm4 -- file'.
-* The `eval' builtin now follows C precedence rules. Additionally, the
- short-circuit operators correctly short-circuit division by zero. The
- previously undocumented alias of '=' meaning '==' in eval now triggers a
- deprecation warning, so that a future version of M4 can implement a form
- of variable assignment as an extension.
-* The `include' builtin now affects exit status on failure, as required by
- POSIX. Use `sinclude' if you need a successful exit status.
-* The `-E'/`--fatal-warnings' command-line option now has two levels. When
- specified only once, warnings affect exit status, but execution
- continues, so that you can see all warnings instead of fixing them one
- at a time. To acheive 1.4.8 behavior, where the first warning
- immediately exits, specify -E twice on the command line.
-* A new `--warn-macro-sequence' command-line option allows detection of
- sequences in `define' and `pushdef' definitions that match an optional
- regular expression. The default regular expression is
- `\$\({[^}]*}\|[0-9][0-9]+\)', corresponding to the sequences that might
- not behave correctly when upgrading to the eventual M4 2.0. By default,
- M4 2.0 will follow the POSIX requirement that a macro definition
- containing `$11' must expand to the first argument concatenated with 1,
- rather than the eleventh argument; and will take advantage of the POSIX
- wording that allows implementations to treat `${11}' as the eleventh
- argument instead of literal text. Be aware that Autoconf 2.61 will not
- work with this option enabled with the default regular expression; but
- Autoconf 2.62 will be compatible with this option.
-* Improved portability to platforms such as BSD/OS and AIX.
-
-Version 1.4.8 - 20 November 2006, by Eric Blake (CVS version 1.4.7a)
-
-* The `divert' macro and `-H'/`--hashsize' command line option no longer
- cause a core dump when handed extra large values. Also, `divert' now
- uses memory proportional to the number of diversions in use, rather than
- to the maximum diversion number encountered, so that large diversion
- numbers are less likely to exhaust system memory; and is no longer
- limited by the maximum number of file descriptors.
-* The `--help' and `--version' command line options now consistently
- override all earlier options. For example, `m4 --debugfile=trace
- --help' now no longer accidentally creates an empty file `trace'.
-* The `-L'/`--nesting-limit' command line option can now be set to 0
- to remove the default limit of 1024. However, it is still possible that
- heavily nested input can cause abrupt program termination due to stack
- overflow.
-* Problems encountered when writing to standard error, such as with the
- `errprint' macro, now always cause a non-zero exit status.
-* Warnings and errors issued during macro expansion are now consistently
- reported at the line where the macro name was detected, rather than
- where the close parenthesis resides. Text wrapped by `m4wrap' now
- remembers the location that was in effect when m4wrap was invoked,
- rather than changing to line 0 and the empty string for a file. The
- macros `__line__' and `__file__' now work correctly even as the last
- token in an included file.
-* The `builtin' and `indir' macros now transparently handle builtin
- tokens generated by `defn'.
-* When diversions created by the `divert' macro collect enough text that
- M4 must use temporary files, the environment variable $TMPDIR is now
- consulted, and a better effort is made to clean up those files in the
- event of a fatal signal.
-* The `mkstemp' builtin is added with the same GNU semantics as `maketemp',
- based on the recommendation of POSIX to deprecate the POSIX semantics of
- `maketemp' as inherently insecure. In GNU mode (no -G supplied on the
- command line), `maketemp' silently retains the secure GNU semantics, but
- a future release of M4 will change this to emit a warning. In
- traditional mode (m4 -G), `maketemp' now uses the POSIX-mandated insecure
- semantics, and issues a warning that you should convert your script to
- use `mkstemp' instead. Additionally, `mkstemp' and `maketemp' are now
- well-defined even if the template argument does not end in six `X'
- characters.
-* The manual has been improved, including a new section on a composite
- macro `foreach'.
-* The `changecom' and `changequote' macros now treat an empty second
- argument the same as if it were missing, rather than using the empty
- string and making it impossible to end a comment or quote.
-* The `translit' macro now operates in linear instead of quadratic time,
- and is now eight-bit clean.
-* The `-D', `-U', `-s', and `-t' command line options now take effect
- after any files encountered earlier on the command line, rather than up
- front, as is done in traditional implementations and required by POSIX.
-
-Version 1.4.7 - 25 September 2006, by Eric Blake (CVS version 1.4.6a)
-
-* Fix regression from 1.4.5 in handling a file that ends in a macro
- expansion without arguments instead of a newline.
-* The define and pushdef macros now warn when the first argument is not
- a string, rather than silently doing nothing.
-* Standard input can now be read more than once, as in 'm4 - file -', and
- is not closed until all wrapped text is handled. This makes a
- difference when stdin is not a regular file, and also fixes bugs when
- using the syscmd or esyscmd macros from wrapped text.
-* When standard input is a seekable file, the m4exit, syscmd, and esyscmd
- macros now restore the current position to the next unread byte rather
- than discarding an arbitrary amount of buffered data.
-* SysV command-line compatibility is no longer a goal of GNU M4; the
- focus will be instead on POSIX compatibility. This release continues to
- support previous usage, but adds warnings in areas which will allow a
- future version of GNU M4 to use its own extensions without being tied to
- the SysV command line interface.
-* The no-op compatibility command line options -B, -N, -S, -T, and
- --diversions may be withdrawn or assigned new meanings in future
- releases, so they now issue a warning if used.
-* A new command line option -i replaces the compatibility -e as the
- short spelling of --interactive, for consistency with other GNU tools; a
- warning is issued if the old spelling is used, and it may be assigned new
- meaning in future releases.
-* A new command line option --debugfile replaces the options -o and
- --error-output as the preferred spelling. The old options were
- misleading in their names and inconsistent with other GNU tools; they are
- still silently accepted, but no longer documented in --help, and may be
- assigned new meanings in future releases.
-
-Version 1.4.6 - 25 August 2006, by Eric Blake (CVS version 1.4.5a)
-
-* Fix buffer overruns in regexp and patsubst macros when handed a trailing
- backslash in the replacement text, or when handling \n substitutions
- beyond the number of \(\) groups.
-* Fix memory leak in regexp, patsubst, and changeword macros.
-* The format macro now understands %F, %g, and %G.
-* When loading frozen files, m4 now exits with status 63 if version
- mismatch is detected.
-* Fix bugs that occurred when invoked with stdout or stderr closed,
- and detect write failures to stdout or to the target of the
- debugfile macro. In particular, the syscmd and esyscmd macros can
- no longer interfere with the debug stream or diversions.
-* The m4exit macro now converts values outside the range 0-255 to 1.
-* It is now an error if a command-line input file ends in the middle of a
- comment, matching the behavior of mid-string and mid-argument
- collection.
-* The dnl macro now warns if end of file is encountered instead of a
- newline.
-* The error message when end of file is encountered now uses the file and
- line where the dangling construct started, rather than `NONE:0:'.
-* The debugmode and __file__ macros, and the -s/--synclines option, now
- show what directory a file was found in when the -I/--include option or
- M4PATH variable had an effect.
-* The changequote and changecom macros now work with 8-bit characters, and
- quotes and comments that begin with `(' are properly recognized
- following a word.
-* The new macro __program__ is added, which allows the input file to issue
- an error message that resembles messages from m4. Warning and error
- messages have been reformatted to comply with GNU Coding Standards.
-* The errprint, m4wrap, and shift macros are now recognized only with
- arguments.
-* The index, substr, translit, regexp, and patsubst macros now produce
- output when given only one argument, but still warn about a missing
- second argument.
-* The patsubst macro now reliably finds zero-length matches at the end
- of a string.
-
-Version 1.4.5 - 15 July 2006, by Eric Blake (CVS version 1.4.4c)
-
-* Fix sysval on BeOS, OS/2, and other systems that store exit status
- in the low-order byte. Additionally, on Unix platforms, if syscmd was
- terminated by a signal, sysval now displays the signal number shifted
- left by eight bits, to match traditional m4 implementations.
-* The maketemp macro is no longer subject to platform limitations (such as
- 26 or 32 max files from a given template).
-* Frozen files now require that the first directive be V (version), to
- better diagnose version mismatch. Additionally, if the F directive
- (builtin function) names an unknown builtin that existed in the m4 that
- froze the file but not in the current m4 (for example, changeword), the
- warning is deferred until an attempt is made to actually use the
- builtin. This allows downgrading from beta m4-1.4o to stable m4-1.4.5
- without breaking autoconf.
-* The format and indir macros are now recognized only with arguments.
-* The eval macro no longer crashes on x86 architectures when dividing the
- minimum integer by -1.
-* On systems with ecvt and fcvt, format no longer truncates trailing
- zeroes on integers printed with %.0f. On systems without these
- functions, format is no longer subject to a buffer overflow that
- permitted arbitrary code execution.
-* On native Windows builds, the macro __windows__ is provided instead of
- __unix__. Likewise, on OS/2 builds, the macro __os2__ is provided. This
- allows input files to determine when syscmd might behave differently.
-* Fix bug in 1.4.3 patch to use \n line-endings that did not work for
- cygwin.
-* When given the empty string or 0, undivert is now documented as a no-op
- rather than closing stdout, warning about a non-existent file, or trying
- to read a directory as a file.
-* Many documentation improvements. Also, the manual is now distributed
- under FDL 1.2, rather than a stricter verbatim-only license.
-* Raise the -L (--nesting-limit) command line option limit from 250 to
- 1024.
-* The decr, incr, divert, m4exit, and substr macros treat an empty number
- as 0, issue a warning, and expand as normal; rather than issuing an error
- and expanding to the empty string.
-* The eval macro now treats an empty radix argument as 10, handles radix 1,
- and treats the width argument as number of digits excluding the sign,
- for compatibility with other m4 implementations.
-* The ifdef, divert, m4exit, substr, and translit macros now correctly
- ignore extra arguments.
-* The popdef and undefine macros now correctly accept multiple arguments.
-* Although changeword is on its last leg, if enabled, it now reverts to the
- default (faster) regexp when passed the empty string.
-* The regexp and substr macros now warn and ignore a trailing backslash in
- the replacement, and warn on \n for n larger than the number of
- sub-expressions in the regexp.
-
-Version 1.4.4b - 17 June 2006, by Eric Blake (CVS version 1.4.4a)
-
-* Fix a recursive push_string crashing bug, which affected changequote of
- three or more characters on some compilers.
-* Use automake to fix build portability issues.
-* Fix a recursive m4wrap crashing bug.
-* Fix a 1 in 2**32 hash crashing bug.
-* Tracing a macro by name is now persistent, even if the macro is
- subsequently undefined or redefined. The traceon and traceoff macros no
- longer warn about undefined symbols. This solves a crash when using
- indir on an undefined macro traced with the -t option, as well as an
- incorrect result of ifdef. Furthermore, tracing is no longer transferred
- with builtins, solving the bug of "m4 -tm4_eval" failing to give trace
- output on the input "define(`m4_eval',defn(`eval'))m4_eval(1)".
-* Fix a crash when a macro is undefined while collecting its arguments, by
- always using the definition that was in effect before argument
- collection. This behavior matches the C pre-processor, and means that
- the sequence "define(`f',`1')f(define(`f',`2'))f" is now documented to
- result in "12", rather than the previously undocumented "22".
-* Update the regex engine to fix several bugs.
-* Fix a potential crash on machines where char is signed.
-
-Version 1.4.4 - October 2005, by Gary V. Vaughan
-
-* ./configure --infodir=/usr/share/info now works correctly.
-* When any file named on the command line is missing exit with status 1.
-
-Version 1.4.3 - March 2005, by Gary V. Vaughan
-
-* DESTDIR installs now work correctly.
-* Don't segfault with uncompilable regexps to changeword().
-* Always use \n line-endings for frozen files (fixes a Windows bug).
-* Portability fix for systems lacking mkstemp(3).
-* Approximately 20% speed up in the common case of usage with autoconf.
-* Supported on QNX 6.3.
-
-Version 1.4.2 - August 2004, by Paul Eggert
-
-* No user visible changes; portability bug fixes only.
-
-Version 1.4.1 - June 2004, by Paul Eggert
-
-* maketemp now creates an empty file with the given name, instead of merely
- returning the name of a nonexistent file. This closes a security hole.
-
-Version 1.4 - October 1994, by Franc,ois Pinard
-
-(No user visible changes)
+* Noteworthy changes in Version 1.4.10b (2008-02-25) [beta]
+ Released by Eric Blake, based on git version 1.4.10a
+
+** Security fixes for the -F option, for bugs present since -F was
+ introduced in 1.3: Avoid core dump with 'm4 -F file -t undefined', and
+ avoid arbitrary code execution with certain file names.
+
+** Fix regression introduced in 1.4.9b in the `divert' builtin when more
+ than 512 kibibytes are saved in diversions on platforms like NetBSD
+ where fopen(name,"a+") seeks to the end of the file.
+
+** The output of the `maketemp' and `mkstemp' builtins is now quoted if a
+ file was created. This is a minor security fix, because it was possible
+ (although rather unlikely) that an unquoted string could match an
+ existing macro name, such that use of the `mkstemp' output would trigger
+ inadvertent macro expansion and operate on the wrong file name.
+
+** Enhance the `defn' builtin to support concatenation of multiple text
+ arguments, as required by POSIX. However, at this time, it is not
+ possible to concatenate a builtin macro with anything else; a warning is
+ now issued if this is attempted, although a future version of M4 may
+ lift this restriction to match other implementations.
+
+** Enhance the `index' builtin to guarantee linear behavior and often
+ acheive sublinear results, in spite of the surprisingly large number of
+ systems with a brain-dead quadratic strstr(3).
+
+** Enhance the `regexp' and `patsubst' builtins to cache frequently used
+ regular expressions, which speeds up typical Autoconf usage.
+
+** Enhance the `format' builtin to warn for more suspicious usages, such as
+ missing arguments or problems parsing according to the format string.
+
+** Enhance the `ifelse' and `shift' builtins so that tail-recursive
+ algorithms based on `$@' operate in linear, rather than quadratic, time
+ and memory.
+
+** A number of portability improvements inherited from gnulib.
+
+* Noteworthy changes in Version 1.4.10 (2007-07-09) [stable]
+ Released by Eric Blake, based on CVS version 1.4.9c
+
+** Upgrade from GPL version 2 to GPL version 3 or later.
+
+** A number of portability improvements inherited from gnulib.
+
+** Avoid undefined behavior introduced in 1.4.9b in the `format' builtin
+ when handling %c. However, this area of code has never been documented,
+ and currently does not match the POSIX behavior of printf(1), so it may
+ have further changes in the next version.
+
+* Noteworthy changes in Version 1.4.9b (2007-05-29) [beta]
+ Released by Eric Blake, based on CVS version 1.4.9a
+
+** Fix regression introduced in 1.4.9 in the `eval' builtin when performing
+ division.
+
+** Fix regression introduced in 1.4.8 in the `-F' option that made it
+ impossible to freeze more than 512 kibibytes of diverted text.
+
+** The synclines option `-s' no longer generates sync lines in the middle of
+ multiline comments or quoted strings.
+
+** Work around a number of corner-case POSIX compliance bugs in various
+ broken stdio libraries. In particular, the `syscmd' builtin behaves
+ more predictably when stdin is seekable.
+
+** The `format' builtin now understands formats such as %a, %A, and %'hhd,
+ and works around a number of platform printf bugs. Furthermore, the
+ sequence format(%*.*d,-1,-1,1) no longer outputs random data. However,
+ some non-compliant platforms such as mingw still have known bugs in
+ strtod that may cause testsuite failures.
+
+** The testsuite is improved to also run gnulib portability tests for the
+ features that M4 imports from gnulib.
+
+* Noteworthy changes in Version 1.4.9 (2007-03-23) [stable]
+ Released by Eric Blake, based on CVS version 1.4.8c
+
+** Minor documentation and portability cleanups.
+
+* Noteworthy changes in Version 1.4.8b (2007-02-24) [beta]
+ Released by Eric Blake, based on CVS version 1.4.8a
+
+** Fix a regression introduced in 1.4.8 that made m4 unable to process
+ files larger than 2GiB on some platforms.
+
+** Fix a regression introduced in 1.4.8 that made m4 dump core when
+ invoked as 'm4 -- file'.
+
+** The `eval' builtin now follows C precedence rules. Additionally, the
+ short-circuit operators correctly short-circuit division by zero. The
+ previously undocumented alias of '=' meaning '==' in eval now triggers a
+ deprecation warning, so that a future version of M4 can implement a form
+ of variable assignment as an extension.
+
+** The `include' builtin now affects exit status on failure, as required by
+ POSIX. Use `sinclude' if you need a successful exit status.
+
+** The `-E'/`--fatal-warnings' command-line option now has two levels. When
+ specified only once, warnings affect exit status, but execution
+ continues, so that you can see all warnings instead of fixing them one
+ at a time. To acheive 1.4.8 behavior, where the first warning
+ immediately exits, specify -E twice on the command line.
+
+** A new `--warn-macro-sequence' command-line option allows detection of
+ sequences in `define' and `pushdef' definitions that match an optional
+ regular expression. The default regular expression is
+ `\$\({[^}]*}\|[0-9][0-9]+\)', corresponding to the sequences that might
+ not behave correctly when upgrading to the eventual M4 2.0. By default,
+ M4 2.0 will follow the POSIX requirement that a macro definition
+ containing `$11' must expand to the first argument concatenated with 1,
+ rather than the eleventh argument; and will take advantage of the POSIX
+ wording that allows implementations to treat `${11}' as the eleventh
+ argument instead of literal text. Be aware that Autoconf 2.61 will not
+ work with this option enabled with the default regular expression; but
+ Autoconf 2.62 will be compatible with this option.
+
+** Improved portability to platforms such as BSD/OS and AIX.
+
+* Noteworthy changes in Version 1.4.8 (2006-11-20) [stable]
+ Released by Eric Blake, based on CVS version 1.4.7a
+
+** The `divert' macro and `-H'/`--hashsize' command line option no longer
+ cause a core dump when handed extra large values. Also, `divert' now
+ uses memory proportional to the number of diversions in use, rather than
+ to the maximum diversion number encountered, so that large diversion
+ numbers are less likely to exhaust system memory; and is no longer
+ limited by the maximum number of file descriptors.
+
+** The `--help' and `--version' command line options now consistently
+ override all earlier options. For example, `m4 --debugfile=trace
+ --help' now no longer accidentally creates an empty file `trace'.
+
+** The `-L'/`--nesting-limit' command line option can now be set to 0
+ to remove the default limit of 1024. However, it is still possible that
+ heavily nested input can cause abrupt program termination due to stack
+ overflow.
+
+** Problems encountered when writing to standard error, such as with the
+ `errprint' macro, now always cause a non-zero exit status.
+
+** Warnings and errors issued during macro expansion are now consistently
+ reported at the line where the macro name was detected, rather than
+ where the close parenthesis resides. Text wrapped by `m4wrap' now
+ remembers the location that was in effect when m4wrap was invoked,
+ rather than changing to line 0 and the empty string for a file. The
+ macros `__line__' and `__file__' now work correctly even as the last
+ token in an included file.
+
+** The `builtin' and `indir' macros now transparently handle builtin
+ tokens generated by `defn'.
+
+** When diversions created by the `divert' macro collect enough text that
+ M4 must use temporary files, the environment variable $TMPDIR is now
+ consulted, and a better effort is made to clean up those files in the
+ event of a fatal signal.
+
+** The `mkstemp' builtin is added with the same GNU semantics as `maketemp',
+ based on the recommendation of POSIX to deprecate the POSIX semantics of
+ `maketemp' as inherently insecure. In GNU mode (no -G supplied on the
+ command line), `maketemp' silently retains the secure GNU semantics, but
+ a future release of M4 will change this to emit a warning. In
+ traditional mode (m4 -G), `maketemp' now uses the POSIX-mandated
+ insecure semantics, and issues a warning that you should convert your
+ script to use `mkstemp' instead. Additionally, `mkstemp' and `maketemp'
+ are now well-defined even if the template argument does not end in six
+ `X' characters.
+
+** The manual has been improved, including a new section on a composite
+ macro `foreach'.
+
+** The `changecom' and `changequote' macros now treat an empty second
+ argument the same as if it were missing, rather than using the empty
+ string and making it impossible to end a comment or quote.
+
+** The `translit' macro now operates in linear instead of quadratic time,
+ and is now eight-bit clean.
+
+** The `-D', `-U', `-s', and `-t' command line options now take effect
+ after any files encountered earlier on the command line, rather than up
+ front, as is done in traditional implementations and required by POSIX.
+
+* Noteworthy changes in Version 1.4.7 (2006-09-25) [stable]
+ Released by Eric Blake, based on CVS version 1.4.6a
+
+** Fix regression from 1.4.5 in handling a file that ends in a macro
+ expansion without arguments instead of a newline.
+
+** The define and pushdef macros now warn when the first argument is not
+ a string, rather than silently doing nothing.
+
+** Standard input can now be read more than once, as in 'm4 - file -', and
+ is not closed until all wrapped text is handled. This makes a
+ difference when stdin is not a regular file, and also fixes bugs when
+ using the syscmd or esyscmd macros from wrapped text.
+
+** When standard input is a seekable file, the m4exit, syscmd, and esyscmd
+ macros now restore the current position to the next unread byte rather
+ than discarding an arbitrary amount of buffered data.
+
+** SysV command-line compatibility is no longer a goal of GNU M4; the
+ focus will be instead on POSIX compatibility. This release continues to
+ support previous usage, but adds warnings in areas which will allow a
+ future version of GNU M4 to use its own extensions without being tied to
+ the SysV command line interface.
+
+** The no-op compatibility command line options -B, -N, -S, -T, and
+ --diversions may be withdrawn or assigned new meanings in future
+ releases, so they now issue a warning if used.
+
+** A new command line option -i replaces the compatibility -e as the
+ short spelling of --interactive, for consistency with other GNU tools; a
+ warning is issued if the old spelling is used, and it may be assigned
+ new meaning in future releases.
+
+** A new command line option --debugfile replaces the options -o and
+ --error-output as the preferred spelling. The old options were
+ misleading in their names and inconsistent with other GNU tools; they
+ are still silently accepted, but no longer documented in --help, and may
+ be assigned new meanings in future releases.
+
+* Noteworthy changes in Version 1.4.6 (2006-08-25) [stable]
+ Released by Eric Blake, based on CVS version 1.4.5a
+
+** Fix buffer overruns in regexp and patsubst macros when handed a trailing
+ backslash in the replacement text, or when handling \n substitutions
+ beyond the number of \(\) groups.
+
+** Fix memory leak in regexp, patsubst, and changeword macros.
+
+** The format macro now understands %F, %g, and %G.
+
+** When loading frozen files, m4 now exits with status 63 if version
+ mismatch is detected.
+
+** Fix bugs that occurred when invoked with stdout or stderr closed,
+ and detect write failures to stdout or to the target of the debugfile
+ macro. In particular, the syscmd and esyscmd macros can no longer
+ interfere with the debug stream or diversions.
+
+** The m4exit macro now converts values outside the range 0-255 to 1.
+
+** It is now an error if a command-line input file ends in the middle of a
+ comment, matching the behavior of mid-string and mid-argument
+ collection.
+
+** The dnl macro now warns if end of file is encountered instead of a
+ newline.
+
+** The error message when end of file is encountered now uses the file and
+ line where the dangling construct started, rather than `NONE:0:'.
+
+** The debugmode and __file__ macros, and the -s/--synclines option, now
+ show what directory a file was found in when the -I/--include option or
+ M4PATH variable had an effect.
+
+** The changequote and changecom macros now work with 8-bit characters, and
+ quotes and comments that begin with `(' are properly recognized
+ following a word.
+
+** The new macro __program__ is added, which allows the input file to issue
+ an error message that resembles messages from m4. Warning and error
+ messages have been reformatted to comply with GNU Coding Standards.
+
+** The errprint, m4wrap, and shift macros are now recognized only with
+ arguments.
+
+** The index, substr, translit, regexp, and patsubst macros now produce
+ output when given only one argument, but still warn about a missing
+ second argument.
+
+** The patsubst macro now reliably finds zero-length matches at the end
+ of a string.
+
+* Noteworthy changes in Version 1.4.5 (2006-07-15) [stable]
+ Released by Eric Blake, based on CVS version 1.4.4c
+
+** Fix sysval on BeOS, OS/2, and other systems that store exit status
+ in the low-order byte. Additionally, on Unix platforms, if syscmd was
+ terminated by a signal, sysval now displays the signal number shifted
+ left by eight bits, to match traditional m4 implementations.
+
+** The maketemp macro is no longer subject to platform limitations (such as
+ 26 or 32 max files from a given template).
+
+** Frozen files now require that the first directive be V (version), to
+ better diagnose version mismatch. Additionally, if the F directive
+ (builtin function) names an unknown builtin that existed in the m4 that
+ froze the file but not in the current m4 (for example, changeword), the
+ warning is deferred until an attempt is made to actually use the
+ builtin. This allows downgrading from beta m4-1.4o to stable m4-1.4.5
+ without breaking autoconf.
+
+** The format and indir macros are now recognized only with arguments.
+
+** The eval macro no longer crashes on x86 architectures when dividing the
+ minimum integer by -1.
+
+** On systems with ecvt and fcvt, format no longer truncates trailing
+ zeroes on integers printed with %.0f. On systems without these
+ functions, format is no longer subject to a buffer overflow that
+ permitted arbitrary code execution.
+
+** On native Windows builds, the macro __windows__ is provided instead of
+ __unix__. Likewise, on OS/2 builds, the macro __os2__ is provided.
+ This allows input files to determine when syscmd might behave
+ differently.
+
+** Fix bug in 1.4.3 patch to use \n line-endings that did not work for
+ cygwin.
+
+** When given the empty string or 0, undivert is now documented as a no-op
+ rather than closing stdout, warning about a non-existent file, or trying
+ to read a directory as a file.
+
+** Many documentation improvements. Also, the manual is now distributed
+ under FDL 1.2, rather than a stricter verbatim-only license.
+
+** Raise the -L (--nesting-limit) command line option limit from 250 to
+ 1024.
+
+** The decr, incr, divert, m4exit, and substr macros treat an empty number
+ as 0, issue a warning, and expand as normal; rather than issuing an
+ error and expanding to the empty string.
+
+** The eval macro now treats an empty radix argument as 10, handles radix 1,
+ and treats the width argument as number of digits excluding the sign,
+ for compatibility with other m4 implementations.
+
+** The ifdef, divert, m4exit, substr, and translit macros now correctly
+ ignore extra arguments.
+
+** The popdef and undefine macros now correctly accept multiple arguments.
+
+** Although changeword is on its last leg, if enabled, it now reverts to the
+ default (faster) regexp when passed the empty string.
+
+** The regexp and substr macros now warn and ignore a trailing backslash in
+ the replacement, and warn on \n for n larger than the number of
+ sub-expressions in the regexp.
+
+* Noteworthy changes in Version 1.4.4b (2006-06-17) [beta]
+ Released by Eric Blake, based on CVS version 1.4.4a
+
+** Fix a recursive push_string crashing bug, which affected changequote of
+ three or more characters on some compilers.
+
+** Use automake to fix build portability issues.
+
+** Fix a recursive m4wrap crashing bug.
+
+** Fix a 1 in 2**32 hash crashing bug.
+
+** Tracing a macro by name is now persistent, even if the macro is
+ subsequently undefined or redefined. The traceon and traceoff macros no
+ longer warn about undefined symbols. This solves a crash when using
+ indir on an undefined macro traced with the -t option, as well as an
+ incorrect result of ifdef. Furthermore, tracing is no longer
+ transferred with builtins, solving the bug of "m4 -tm4_eval" failing to
+ give trace output on the input
+ "define(`m4_eval',defn(`eval'))m4_eval(1)".
+
+** Fix a crash when a macro is undefined while collecting its arguments, by
+ always using the definition that was in effect before argument
+ collection. This behavior matches the C pre-processor, and means that
+ the sequence "define(`f',`1')f(define(`f',`2'))f" is now documented to
+ result in "12", rather than the previously undocumented "22".
+
+** Update the regex engine to fix several bugs.
+
+** Fix a potential crash on machines where char is signed.
+
+* Noteworthy changes in Version 1.4.4 (Oct 2005) [stable]
+ Released by Gary V. Vaughan
+
+** ./configure --infodir=/usr/share/info now works correctly.
+
+** When any file named on the command line is missing exit with status 1.
+
+* Noteworthy changes in Version 1.4.3 (Mar 2005) [stable]
+ Released by Gary V. Vaughan
+
+** DESTDIR installs now work correctly.
+
+** Don't segfault with uncompilable regexps to changeword().
+
+** Always use \n line-endings for frozen files (fixes a Windows bug).
+
+** Portability fix for systems lacking mkstemp(3).
+
+** Approximately 20% speed up in the common case of usage with autoconf.
+
+** Supported on QNX 6.3.
+
+* Noteworthy changes in Version 1.4.2 (Aug 2004) [stable]
+ Released by Paul Eggert
+
+** No user visible changes; portability bug fixes only.
+
+* Noteworthy changes in Version 1.4.1 (Jun 2004) [stable]
+ Released by Paul Eggert
+
+** maketemp now creates an empty file with the given name, instead of merely
+ returning the name of a nonexistent file. This closes a security hole.
+
+* Noteworthy changes in Version 1.4 (Oct 1994) [stable]
+ Released by Franc,ois Pinard
+
+** (No user visible changes)
+
Version 1.3 - September 1994, by Franc,ois Pinard
diff --git a/README b/README
index 92a5e540..548ffb9d 100644
--- a/README
+++ b/README
@@ -6,7 +6,7 @@ running shell commands, doing arithmetic, etc. Autoconf needs GNU
`m4' for generating `configure' scripts, but not for running them.
GNU `m4' was originally written by Rene' Seindal, from Denmark.
-This release is considered stable.
+This is a beta release on the stable branch.
If GNU `m4' is meant to serve GNU `autoconf', beware that `m4'
should be fully installed *prior to* configuring `autoconf' itself.
diff --git a/bootstrap b/bootstrap
index dec9499f..6a4fb3d1 100755
--- a/bootstrap
+++ b/bootstrap
@@ -1,6 +1,6 @@
#! /bin/sh
-# bootstrap (GNU M4) version 2008-02-11
+# bootstrap (GNU M4) version 2008-02-23
# Written by Gary V. Vaughan <gary@gnu.org>
# Copyright (C) 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
@@ -32,7 +32,7 @@
# This script bootstraps a git or CVS checkout of GNU M4 by correctly
# calling out to parts of the GNU Build Platform. Currently this
-# requires GNU Autoconf 2.60, GNU Automake 1.9.6, and bleeding edge
+# requires GNU Autoconf 2.60, GNU Automake 1.10.1, and bleeding edge
# git or CVS snapshots of GNU Gnulib.
# Report bugs to <bug-m4@gnu.org>
diff --git a/configure.ac b/configure.ac
index 630c40b5..90518a2e 100644
--- a/configure.ac
+++ b/configure.ac
@@ -1,6 +1,6 @@
# Configure template for GNU M4. -*-Autoconf-*-
-# Copyright (C) 1991, 1993, 1994, 2004, 2005, 2006, 2007 Free Software
-# Foundation, Inc.
+# Copyright (C) 1991, 1993, 1994, 2004, 2005, 2006, 2007, 2008 Free
+# Software Foundation, Inc.
#
# This file is part of GNU M4.
#
@@ -18,10 +18,10 @@
# along with this program. If not, see <http://www.gnu.org/licenses/>.
AC_PREREQ([2.60])
-AC_INIT([GNU M4], [1.4.10a], [bug-m4@gnu.org])
+AC_INIT([GNU M4], [1.4.10b], [bug-m4@gnu.org])
AC_CONFIG_AUX_DIR([build-aux])
-AM_INIT_AUTOMAKE([1.9.6 dist-bzip2 gnu])
+AM_INIT_AUTOMAKE([1.10.1 dist-bzip2 dist-lzma gnu])
m4_pattern_forbid([^M4_[A-Z]])
diff --git a/m4/gnulib-cache.m4 b/m4/gnulib-cache.m4
index be1c1217..d41f158a 100644
--- a/m4/gnulib-cache.m4
+++ b/m4/gnulib-cache.m4
@@ -15,11 +15,11 @@
# Specification in the form of a command-line invocation:
-# gnulib-tool --import --dir=. --local-dir=local --lib=libm4 --source-base=lib --m4-base=m4 --doc-base=doc --aux-dir=build-aux --with-tests --no-libtool --macro-prefix=M4 assert avltree-oset binary-io clean-temp cloexec close-stream closein config-h error fdl fflush flexmember fopen-safer free fseeko gendocs getopt gnupload gpl-3.0 intprops memmem mkstemp obstack quote regex stdbool stdint stdlib-safer strtod strtol unlocked-io vasnprintf-posix verror version-etc version-etc-fsf xalloc xprintf xvasprintf-posix
+# gnulib-tool --import --dir=. --local-dir=local --lib=libm4 --source-base=lib --m4-base=m4 --doc-base=doc --aux-dir=build-aux --with-tests --no-libtool --macro-prefix=M4 announce-gen assert avltree-oset binary-io clean-temp cloexec close-stream closein config-h error fdl fflush flexmember fopen-safer free fseeko gendocs getopt gnupload gpl-3.0 intprops memmem mkstemp obstack quote regex stdbool stdint stdlib-safer strtod strtol unlocked-io vasnprintf-posix verror version-etc version-etc-fsf xalloc xprintf xvasprintf-posix
# Specification in the form of a few gnulib-tool.m4 macro invocations:
gl_LOCAL_DIR([local])
-gl_MODULES([assert avltree-oset binary-io clean-temp cloexec close-stream closein config-h error fdl fflush flexmember fopen-safer free fseeko gendocs getopt gnupload gpl-3.0 intprops memmem mkstemp obstack quote regex stdbool stdint stdlib-safer strtod strtol unlocked-io vasnprintf-posix verror version-etc version-etc-fsf xalloc xprintf xvasprintf-posix])
+gl_MODULES([announce-gen assert avltree-oset binary-io clean-temp cloexec close-stream closein config-h error fdl fflush flexmember fopen-safer free fseeko gendocs getopt gnupload gpl-3.0 intprops memmem mkstemp obstack quote regex stdbool stdint stdlib-safer strtod strtol unlocked-io vasnprintf-posix verror version-etc version-etc-fsf xalloc xprintf xvasprintf-posix])
gl_AVOID([])
gl_SOURCE_BASE([lib])
gl_M4_BASE([m4])