git: 6c9ed64c94f1 - main - m4: Add -G option which reverses -g.
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Wed, 21 Jun 2023 21:00:47 UTC
The branch main has been updated by des:
URL: https://cgit.FreeBSD.org/src/commit/?id=6c9ed64c94f192eda8c8b5e9e2b92ff93da36de2
commit 6c9ed64c94f192eda8c8b5e9e2b92ff93da36de2
Author: Dag-Erling Smørgrav <des@FreeBSD.org>
AuthorDate: 2023-06-21 20:58:45 +0000
Commit: Dag-Erling Smørgrav <des@FreeBSD.org>
CommitDate: 2023-06-21 20:59:03 +0000
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
---
usr.bin/m4/m4.1 | 10 +++++++---
usr.bin/m4/main.c | 6 +++++-
2 files changed, 12 insertions(+), 4 deletions(-)
diff --git a/usr.bin/m4/m4.1 b/usr.bin/m4/m4.1
index 838348cb78af..e234cf201213 100644
--- a/usr.bin/m4/m4.1
+++ b/usr.bin/m4/m4.1
@@ -41,7 +41,7 @@
.Nd macro language processor
.Sh SYNOPSIS
.Nm
-.Op Fl EgPs
+.Op Fl EGgPs
.Oo
.Sm off
.Fl D Ar name Op No = Ar value
@@ -156,8 +156,12 @@ 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 , Fl -traditional
+Disable GNU compatibility mode (see
+.Fl g
+below).
.It Fl g , Fl -gnu
-Activate GNU-m4 compatibility mode.
+Enable GNU 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,
@@ -485,7 +489,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 b3cfb5b03304..f776ca8594e4 100644
--- a/usr.bin/m4/main.c
+++ b/usr.bin/m4/main.c
@@ -61,11 +61,12 @@ __FBSDID("$FreeBSD$");
#include "extern.h"
#include "pathnames.h"
-static const char *shortopts = "+D:d::EgI:o:Pst:U:";
+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' },
@@ -230,6 +231,9 @@ main(int argc, char *argv[])
case 'U': /* undefine... */
macro_popdef(optarg);
break;
+ case 'G':
+ mimic_gnu = 0;
+ break;
case 'g':
mimic_gnu = 1;
break;