Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 3 Jul 2023 15:14:57 GMT
From:      =?utf-8?Q?Dag-Erling=20Sm=C3=B8rgrav?= <des@FreeBSD.org>
To:        src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-branches@FreeBSD.org
Subject:   git: 2c1f52c11f17 - stable/13 - m4: Support long options.
Message-ID:  <202307031514.363FEv6P017891@gitrepo.freebsd.org>

next in thread | raw e-mail | index | archive | help
The branch stable/13 has been updated by des:

URL: https://cgit.FreeBSD.org/src/commit/?id=2c1f52c11f175c8da3e6c59e967d9807dfbc28b7

commit 2c1f52c11f175c8da3e6c59e967d9807dfbc28b7
Author:     Dag-Erling Smørgrav <des@FreeBSD.org>
AuthorDate: 2023-06-21 20:58:40 +0000
Commit:     Dag-Erling Smørgrav <des@FreeBSD.org>
CommitDate: 2023-07-03 15:13:11 +0000

    m4: Support long options.
    
    The option names are identical to those of the equivalent options in GNU m4, except of course for --gnu which does not exist in GNU m4.
    
    While here, make the argument to -d / --debug optional, with the same default behavior as in GNU m4, and document it properly.
    
    Sponsored by:   Klara, Inc.
    Reviewed by:    kevans, imp
    Differential Revision:  https://reviews.freebsd.org/D40694
    
    (cherry picked from commit 47b32f8f93b46ce2c7fe3973c331a40096b529da)
    
    m4: Add -G option which reverses -g.
    
    This matches GNU m4's -G / --traditional option, and although BSD m4 in non-GNU mode is not exactly identical to GNU mode in traditional mode, it's close enough.
    
    Sponsored by:   Klara, Inc.
    Reviewed by:    kevans, imp
    Differential Revision:  https://reviews.freebsd.org/D40697
    
    (cherry picked from commit 6c9ed64c94f192eda8c8b5e9e2b92ff93da36de2)
    
    m4: Miscellaneous man page fixes.
    
    Sponsored by:   Klara, Inc.
    Reviewed by:    imp
    Differential Revision:  https://reviews.freebsd.org/D40701
    
    (cherry picked from commit db4c5b8a05bbd54a00dad145a91902d71c1f92a1)
    
    Fix spelling of "behavior" to be consistent with the rest of the file
    
    (cherry picked from commit 764464af49688e74fd6d803df0404ca4726dd460)
---
 usr.bin/m4/m4.1   | 70 +++++++++++++++++++++++++++++++++++++------------------
 usr.bin/m4/main.c | 24 +++++++++++++++++--
 2 files changed, 69 insertions(+), 25 deletions(-)

diff --git a/usr.bin/m4/m4.1 b/usr.bin/m4/m4.1
index 83f124dd3dfc..ffc60af22d30 100644
--- a/usr.bin/m4/m4.1
+++ b/usr.bin/m4/m4.1
@@ -33,7 +33,7 @@
 .\"
 .\" $FreeBSD$
 .\"
-.Dd April 8, 2021
+.Dd June 21, 2023
 .Dt M4 1
 .Os
 .Sh NAME
@@ -41,13 +41,13 @@
 .Nd macro language processor
 .Sh SYNOPSIS
 .Nm
-.Op Fl EgPs
+.Op Fl EGgPs
 .Oo
 .Sm off
 .Fl D Ar name Op No = Ar value
 .Sm on
 .Oc
-.Op Fl d Ar flags
+.Op Fl d Oo Oo +- Oc Ns Ar flags Oc
 .Op Fl I Ar dirname
 .Op Fl o Ar filename
 .Op Fl t Ar macro
@@ -98,15 +98,14 @@ recognized as special when not followed by an open parenthesis.
 .Pp
 The options are as follows:
 .Bl -tag -width Ds
-.It Fl D Ns Ar name Ns Op = Ns Ar value
+.It Fl D Ns Ar name Ns Oo = Ns Ar value Oc , Fl -define Ns = Ns Ar name Ns Oo = Ns Ar value Oc
 Define the symbol
 .Ar name
 to have some value (or
 .Dv NULL ) .
-.It Fl d Ar "flags"
-Set trace flags.
-.Ar flags
-may hold the following:
+.It Fl d Oo Oo +|- Oc Ns Ar flags Oc , Fl -debug Ns = Ns Oo Oo +|- Oc Ns Ar flags Oc
+Set or unset trace flags.
+The trace flags are as follows:
 .Bl -tag -width Ds
 .It Ar a
 print macro arguments.
@@ -128,9 +127,21 @@ number macro expansions.
 turn on all options.
 .El
 .Pp
+If
+.Qq +
+or
+.Qq -
+is used, the specified flags are added to or removed from the set of
+active trace flags, respectively; otherwise, the specified flags
+replace the set of active trace flags.
+.Pp
+Specifying this option without an argument is equivalent to specifying
+it with the argument
+.Qq aeq .
+.Pp
 By default, trace is set to
 .Qq eq .
-.It Fl E
+.It Fl E , Fl -fatal-warnings
 Set warnings to be fatal.
 When a single
 .Fl E
@@ -144,38 +155,51 @@ flags are specified, execution will halt upon issuing the
 first warning and
 .Nm
 will exit with a non-zero exit status.
-This behaviour matches GNU-m4 1.4.9 and later.
-.It Fl g
-Activate GNU-m4 compatibility mode.
-In this mode, translit handles simple character
-ranges (e.g., a-z), regular expressions mimic emacs behavior,
-multiple m4wrap calls are handled as a stack,
+This behavior matches GNU m4 1.4.9 and later.
+.It Fl G , Fl -traditional
+Disable GNU compatibility mode (see
+.Fl g
+below).
+.It Fl g , Fl -gnu
+Enable GNU compatibility mode.
+In this mode,
+.Ic translit
+handles simple character ranges (e.g.,
+.Sq a-z ) ,
+regular expressions mimic Emacs behavior,
+multiple
+.Ic m4wrap
+calls are handled as a stack,
 the number of diversions is unlimited,
 empty names for macro definitions are allowed,
-and eval understands
+.Ic undivert
+can be used to include files,
+and
+.Ic eval
+understands
 .Sq 0rbase:value
 numbers.
-.It Fl I Ar "dirname"
+.It Fl I Ar dirname , Fl -include Ns = Ns Ar dirname
 Add directory
 .Ar dirname
 to the include path.
-.It Fl o Ar filename
+.It Fl o Ar filename , Fl -error-output Ns = Ns Ar filename
 Send trace output to
 .Ar filename .
-.It Fl P
+.It Fl P , Fl -prefix-builtins
 Prefix all built-in macros with
 .Sq m4_ .
 For example, instead of writing
 .Ic define ,
 use
 .Ic m4_define .
-.It Fl s
+.It Fl s , Fl -synclines
 Output line synchronization directives, suitable for
 .Xr cpp 1 .
-.It Fl t Ar macro
+.It Fl t Ar macro , Fl -trace Ns = Ns Ar macro
 Turn tracing on for
 .Ar macro .
-.It Fl "U" Ns Ar "name"
+.It Fl U Ns Ar name , Fl -undefine Ns = Ns Ar name
 Undefine the symbol
 .Ar name .
 .El
@@ -474,7 +498,7 @@ utility is compliant with the
 specification.
 .Pp
 The flags
-.Op Fl dEgIPot
+.Op Fl dEGgIPot
 and the macros
 .Ic builtin ,
 .Ic esyscmd ,
diff --git a/usr.bin/m4/main.c b/usr.bin/m4/main.c
index 292dc5eb3f76..f776ca8594e4 100644
--- a/usr.bin/m4/main.c
+++ b/usr.bin/m4/main.c
@@ -47,6 +47,7 @@ __FBSDID("$FreeBSD$");
 #include <signal.h>
 #include <err.h>
 #include <errno.h>
+#include <getopt.h>
 #include <unistd.h>
 #include <stdio.h>
 #include <ctype.h>
@@ -60,6 +61,22 @@ __FBSDID("$FreeBSD$");
 #include "extern.h"
 #include "pathnames.h"
 
+static const char *shortopts = "+D:d::EGgI:o:Pst:U:";
+static const struct option longopts[] = {
+	{ "define",		required_argument,	NULL,	'D' },
+	{ "debug",		optional_argument,	NULL,	'd' },
+	{ "fatal-warnings",	no_argument,		NULL,	'E' },
+	{ "traditional",	no_argument,		NULL,	'G' },
+	{ "gnu",		no_argument,		NULL,	'g' },
+	{ "include",		required_argument,	NULL,	'I' },
+	{ "error-output",	required_argument,	NULL,	'o' },
+	{ "prefix-builtins",	no_argument,		NULL,	'P' },
+	{ "synclines",		no_argument,		NULL,	's' },
+	{ "trace",		required_argument,	NULL,	't' },
+	{ "undefine",		required_argument,	NULL,	'U' },
+	{ NULL, 0, NULL, 0 },
+};
+
 stae *mstack;			/* stack of m4 machine         */
 char *sstack;			/* shadow stack, for string space extension */
 static size_t STACKMAX;		/* current maximum size of stack */
@@ -188,7 +205,7 @@ main(int argc, char *argv[])
 	outfile = NULL;
 	resizedivs(MAXOUT);
 
-	while ((c = getopt(argc, argv, "gst:d:D:EU:o:I:P")) != -1)
+	while ((c = getopt_long(argc, argv, shortopts, longopts, NULL)) != -1)
 		switch(c) {
 
 		case 'D':               /* define something..*/
@@ -214,11 +231,14 @@ main(int argc, char *argv[])
 		case 'U':               /* undefine...       */
 			macro_popdef(optarg);
 			break;
+		case 'G':
+			mimic_gnu = 0;
+			break;
 		case 'g':
 			mimic_gnu = 1;
 			break;
 		case 'd':
-			set_trace_flags(optarg);
+			set_trace_flags(optarg ? optarg : "aeq");
 			break;
 		case 's':
 			synch_lines = 1;



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?202307031514.363FEv6P017891>