Hello,
Attached is a patch with the additional changes. It
can be applied like this:
tar xvfj m4-1.4.3.tar.bz2
cd m4-1.4.3
patch -p1 < /path/to/m4-1.4.3.patch
chmod 0755 checks/invocation_tests
Make check output will have 4 new lines at the end:
running invocation test 1: OK
running invocation test 2: OK
running invocation test 3: OK
All 3 checks successful
With the existing m4-1.4.3 without the m4.c changes you get:
running invocation test 1: FAIL
running invocation test 2: OK
running invocation test 3: OK
1 of 3 checks failed. Failed checks were:
1: Ensure m4 exits with non-zero exit code when fed a non-existent file as
input.
The info file has EXIT_STATUS documentation (use concept index, or
under preliminaries menu immediately after 'Invoking m4') and
the bug reporting address is updated (and bug is now in the concept
index).
Are these changes adequate, or do you need more?
Thank you,
JGH
On Mon, 10 Oct 2005, Paul Eggert wrote:
John Gatewood Ham <[EMAIL PROTECTED]> writes:
Attached is the patch you requested. 'make check' still works.
Do you want me to add a test for this new behavior? Do you want
the info file to contain information about EXIT STATUS like the
man page does? I can add that if you wish.
Definitely the latter. The .texi file is the primary source of documenation.
Also, 'make check' should test for it, yes.
diff -Naur m4-1.4.3.orig/COPYING m4-1.4.3/COPYING
--- m4-1.4.3.orig/COPYING 2004-08-21 17:29:00.000000000 +0700
+++ m4-1.4.3/COPYING 2005-10-11 16:26:30.000000000 +0700
@@ -2,7 +2,8 @@
Version 2, June 1991
Copyright (C) 1989, 1991 Free Software Foundation, Inc.
- 675 Mass Ave, Cambridge, MA 02139, USA
+ 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
@@ -305,7 +306,8 @@
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
- Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+
Also add information on how to contact you by electronic and paper mail.
diff -Naur m4-1.4.3.orig/ChangeLog m4-1.4.3/ChangeLog
--- m4-1.4.3.orig/ChangeLog 2005-03-31 18:50:38.000000000 +0700
+++ m4-1.4.3/ChangeLog 2005-10-11 16:26:30.000000000 +0700
@@ -1,3 +1,13 @@
+2005-10-11 John Gatewood Ham <[EMAIL PROTECTED]> (tiny changes)
+
+ * COPYING: fix FSF address
+ * README: update email address for bug reports
+ * src/m4.c: fix return code when non-existent files are processed
+ * doc/m4.texinfo: Add documentation about EXIT_STATUS
+ * checks/Makefile.in: Add invocation_tests to 'make check' system
+ * checks/invocation_tests: Add tests for EXIT_STATUS behavior so
+ 'make check' will test the changes.
+
2005-03-31 Gary V. Vaughan <[EMAIL PROTECTED]> (tiny change)
* configure.in (VERSION): Bump to 1.4.3.
diff -Naur m4-1.4.3.orig/README m4-1.4.3/README
--- m4-1.4.3.orig/README 2004-08-21 17:29:00.000000000 +0700
+++ m4-1.4.3/README 2005-10-11 16:26:30.000000000 +0700
@@ -25,7 +25,7 @@
feature which allows for changing the syntax of what is a "word" in
`m4'. This might go away, so don't count on it yet.
-Send bug reports to [EMAIL PROTECTED]'. A bug report is
-an adequate description of the problem: your input, what you expected,
-what you got, and why this is wrong. Diffs are welcome, but they only
-describe a solution, from which the problem might be uneasy to infer.
+Send bug reports to [EMAIL PROTECTED]'. A bug report is an adequate
+description of the problem: your input, what you expected, what you got,
+and why this is wrong. Diffs are welcome, but they only describe a
+solution, from which the problem might be uneasy to infer.
diff -Naur m4-1.4.3.orig/THANKS m4-1.4.3/THANKS
--- m4-1.4.3.orig/THANKS 2004-08-21 17:29:00.000000000 +0700
+++ m4-1.4.3/THANKS 2005-10-11 16:26:30.000000000 +0700
@@ -33,6 +33,7 @@
Jim Meyering [EMAIL PROTECTED]
Joel Sherrill [EMAIL PROTECTED]
John David Anglin [EMAIL PROTECTED]
+John Gatewood Ham [EMAIL PROTECTED]
Joseph E. Sacco [EMAIL PROTECTED]
Karl Berry [EMAIL PROTECTED]
Karl Vogel [EMAIL PROTECTED]
diff -Naur m4-1.4.3.orig/checks/Makefile.in m4-1.4.3/checks/Makefile.in
--- m4-1.4.3.orig/checks/Makefile.in 2005-02-10 03:48:32.000000000 +0700
+++ m4-1.4.3/checks/Makefile.in 2005-10-11 16:29:43.000000000 +0700
@@ -1,5 +1,5 @@
# Makefile for GNU m4 checks directory.
-# Copyright (C) 1992, 1993, 1994 Free Software Foundation, Inc.
+# Copyright (C) 1992, 1993, 1994, 2005 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
@@ -13,7 +13,7 @@
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
-# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
PACKAGE = @PACKAGE@
VERSION = @VERSION@
@@ -28,7 +28,7 @@
# Vern says that the first star is required around an Alpha make bug.
CHECKS = *[0-9][0-9].*
-DISTFILES = Makefile.in get-them check-them stamp-checks incl.m4 foo
+DISTFILES = Makefile.in get-them check-them stamp-checks incl.m4 foo
invocation_tests
all: stamp-checks
@@ -43,7 +43,8 @@
check: stamp-checks
PATH=`pwd`/../src:$$PATH; export PATH; \
- cd $(srcdir) && ./check-them $(CHECKS)
+ cd $(srcdir) && ./check-them $(CHECKS); \
+ cd $(srcdir) && ./invocation_tests
tags:
diff -Naur m4-1.4.3.orig/checks/invocation_tests
m4-1.4.3/checks/invocation_tests
--- m4-1.4.3.orig/checks/invocation_tests 1970-01-01 07:00:00.000000000
+0700
+++ m4-1.4.3/checks/invocation_tests 2005-10-11 16:33:57.000000000 +0700
@@ -0,0 +1,77 @@
+#!/bin/sh
+# Check GNU m4 exit status codes.
+# Copyright (C) 2005 Free Software Foundation, Inc.
+testno=0
+testcount=0
+failcount=0
+faillist=""
+
+testno=`expr ${testno} + 1`
+testcount=`expr ${testcount} + 1`
+msg="${testno}: Ensure m4 exits with non-zero exit code when fed a
non-existent file as input."
+echo -n "running invocation test ${testno}: "
+m4 nosuchfile >/dev/null 2>&1
+if [ $? -eq 0 ]
+then
+ failcount=`expr ${failcount} + 1`
+ if [ -z "${faillist}" ]
+ then
+ faillist="${msg}"
+ else
+ faillist="${faillist}\n${msg}"
+ fi
+ echo "FAIL"
+else
+ echo "OK"
+fi
+
+testno=`expr ${testno} + 1`
+testcount=`expr ${testcount} + 1`
+msg="${testno}: Ensure m4 exits with a zero exit code when fed a valid file as
input."
+echo -n "running invocation test ${testno}: "
+m4 foo >/dev/null 2>&1
+if [ $? -ne 0 ]
+then
+ failcount=`expr ${failcount} + 1`
+ if [ -z "${faillist}" ]
+ then
+ faillist="${msg}"
+ else
+ faillist="${faillist}\n${msg}"
+ fi
+ echo "FAIL"
+else
+ echo "OK"
+fi
+
+testno=`expr ${testno} + 1`
+testcount=`expr ${testcount} + 1`
+msg="${testno}: Ensure m4 exits with a zero exit code when fed a valid stream
from stdin."
+echo -n "running invocation test ${testno}: "
+cat foo | m4 - >/dev/null 2>&1
+if [ $? -ne 0 ]
+then
+ failcount=`expr ${failcount} + 1`
+ if [ -z "${faillist}" ]
+ then
+ faillist="${msg}"
+ else
+ faillist="${faillist}\n${msg}"
+ fi
+ echo "FAIL"
+else
+ echo "OK"
+fi
+
+#
+# display test results
+#
+if [ -z "${faillist}" ]
+then
+ echo "All ${testcount} checks successful"
+else
+ echo "${failcount} of ${testcount} checks failed. Failed checks were:"
+ echo -e "${faillist}"
+ exit 1
+fi
+exit 0
diff -Naur m4-1.4.3.orig/doc/m4.texinfo m4-1.4.3/doc/m4.texinfo
--- m4-1.4.3.orig/doc/m4.texinfo 2005-03-31 18:17:00.000000000 +0700
+++ m4-1.4.3/doc/m4.texinfo 2005-10-11 16:26:30.000000000 +0700
@@ -57,7 +57,7 @@
@page
@vskip 0pt plus 1filll
-Copyright @copyright{} 1989, 1990, 1991, 1992, 1993, 1994, 2004 Free Software
Foundation, Inc.
+Copyright @copyright{} 1989, 1990, 1991, 1992, 1993, 1994, 2004, 2005 Free
Software Foundation, Inc.
Permission is granted to make and distribute verbatim copies of
this manual provided the copyright notice and this permission notice
@@ -258,6 +258,7 @@
* Intro:: Introduction to @code{m4}
* History:: Historical references
* Invoking m4:: Invoking @code{m4}
+* EXIT_STATUS:: EXIT_STATUS of m4
* Bugs:: Problems and bugs
* Manual:: Using this manual
@end menu
@@ -312,7 +313,7 @@
Originally, @code{m4} was the engine for Rational FORTRAN preprocessor,
that is, the @code{ratfor} equivalent of @code{cpp}.
[EMAIL PROTECTED] Invoking m4, Bugs, History, Preliminaries
[EMAIL PROTECTED] Invoking m4, EXIT_STATUS, History, Preliminaries
@section Invoking @code{m4}
The format of the @code{m4} command is:
@@ -505,7 +506,65 @@
only be read once, so the filename @file{-} should only appear once on
the command line.
[EMAIL PROTECTED] Bugs, Manual, Invoking m4, Preliminaries
[EMAIL PROTECTED] EXIT_STATUS, Bugs, Invoking m4, Preliminaries
[EMAIL PROTECTED] EXIT_STATUS of @code{m4}
+
[EMAIL PROTECTED] EXIT_STATUS of @code{m4}
[EMAIL PROTECTED] EXIT_STATUS
+The @code{m4} program will return an exit code to the process which
+invokes it when @code{m4} exits. The default behavior for @code{m4}
+is that the following exit values shall be returned to the process
+invoking @code{m4}:
+
[EMAIL PROTECTED]
+0 Successful [EMAIL PROTECTED]
[EMAIL PROTECTED]
+>0 An error occurred
+
[EMAIL PROTECTED]
+It is possible to override this behavior by using the @code{m4exit} macro, in
+which case the exit value can be specified by the input file
+(@pxref{M4exit}).
+
[EMAIL PROTECTED]
+If a non-existent file is supplied as input, for example, the exit code should
+be non-zero. Assuming a bourne-style shell such as GNU bash, this could be
+used like this:
+
[EMAIL PROTECTED] ignore
[EMAIL PROTECTED]
+echo -n "Enter filename:"
+read FILENAME
+m4 "[EMAIL PROTECTED]@}" > "[EMAIL PROTECTED]@}.out"
+if [ $? -ne 0 ]
+then
+ echo "Unable to process \"[EMAIL PROTECTED]@}\" with m4."
+fi
[EMAIL PROTECTED] example
+
[EMAIL PROTECTED]
+If the user enters the text @code{nosuchfile} and indeed there is no
+file by the name @code{nosuchfile}, then @code{m4} will exit with an
+exit status of 1. The output of this script will look like this:
+
[EMAIL PROTECTED] ignore
[EMAIL PROTECTED]
+m4: nosuchfile: No such file or directory
+Unable to process "nosuchfile" with m4.
[EMAIL PROTECTED] example
+
[EMAIL PROTECTED]
+The first line of output is from @code{m4}, the second is from the
[EMAIL PROTECTED] statement.
+
[EMAIL PROTECTED]
+If the user user enters the text @code{goodfile.m4} and indeed there
+exists a readable, error-free m4 file by the name @code{goodfile.m4},
+then @code{m4} will exit with an exit status of 0. The @code{if} condition
+will be false as expected, and no message will be displayed.
+
[EMAIL PROTECTED] Bugs, Manual, EXIT_STATUS, Preliminaries
[EMAIL PROTECTED] bug
@section Problems and bugs
If you have problems with GNU @code{m4} or think you've found a bug,
@@ -521,11 +580,9 @@
say what you expected to occur; this will help us decide whether the
problem was really in the documentation.
-Once you've got a precise problem, send e-mail to (Internet)
[EMAIL PROTECTED]@@prep.ai.mit.edu} or (UUCP)
[EMAIL PROTECTED] Please include the
-version number of @code{m4} you are using. You can get this information
-with the command @samp{m4 --version}.
+Once you've got a precise problem, send e-mail to @file{gnu-m4@@gnu.org}.
+Please include the version number of @code{m4} you are using. You can get
+this information with the command @samp{m4 --version}.
Non-bug suggestions are always welcome as well. If you have questions
about things that are unclear in the documentation or are just obscure
diff -Naur m4-1.4.3.orig/src/m4.c m4-1.4.3/src/m4.c
--- m4-1.4.3.orig/src/m4.c 2005-02-10 03:58:38.000000000 +0700
+++ m4-1.4.3/src/m4.c 2005-10-11 16:26:30.000000000 +0700
@@ -1,6 +1,6 @@
/* GNU m4 -- A simple macro processor
- Copyright (C) 1989, 1990, 1991, 1992, 1993, 1994, 2004 Free
+ Copyright (C) 1989, 1990, 1991, 1992, 1993, 1994, 2004, 2005 Free
Software Foundation, Inc.
This program is free software; you can redistribute it and/or modify
@@ -15,7 +15,7 @@
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
- Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
*/
#include "m4.h"
@@ -263,6 +263,7 @@
macro_definition *tail;
macro_definition *new;
int optchar; /* option character */
+ int retcode = EXIT_SUCCESS;
macro_definition *defines;
FILE *fp;
@@ -484,6 +485,14 @@
if (fp == NULL)
{
error (0, errno, "%s", argv[optind]);
+ /*
+ * In order not to break existing applications that may
+ * depend on m4 continuing past non-existent files, I
+ * have decided to have m4 keep going as it always has
+ * past errors, but I make the final exit code be
+ * EXIT_FAILURE in this case.
+ */
+ retcode = EXIT_FAILURE;
continue;
}
else
@@ -506,5 +515,5 @@
undivert_all ();
}
- exit (EXIT_SUCCESS);
+ exit (retcode);
}
_______________________________________________
Bug-m4 mailing list
[email protected]
http://lists.gnu.org/mailman/listinfo/bug-m4