diff options
-rw-r--r-- | ChangeLog | 28 | ||||
-rw-r--r-- | GNUmakefile | 4 | ||||
-rw-r--r-- | HACKING | 203 | ||||
-rw-r--r-- | Makefile.am | 6 | ||||
-rw-r--r-- | Makefile.cfg | 38 | ||||
-rw-r--r-- | Makefile.maint | 195 | ||||
-rw-r--r-- | NEWS | 722 | ||||
-rw-r--r-- | README | 2 | ||||
-rwxr-xr-x | bootstrap | 4 | ||||
-rw-r--r-- | configure.ac | 8 | ||||
-rw-r--r-- | m4/gnulib-cache.m4 | 4 |
11 files changed, 649 insertions, 565 deletions
@@ -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 @@ -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` \ && : ) @@ -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 @@ -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. @@ -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]) |