Add -P option which causes builtin macros to be prefixed with "m4_". This
authorPeter Avalos <pavalos@dragonflybsd.org>
Mon, 1 Jan 2007 00:41:58 +0000 (00:41 +0000)
committerPeter Avalos <pavalos@dragonflybsd.org>
Mon, 1 Jan 2007 00:41:58 +0000 (00:41 +0000)
was mostly taken from NetBSD.

Reviewed-by: dillon, joerg
usr.bin/m4/m4.1
usr.bin/m4/main.c

index 6cc7f90..7c270ec 100644 (file)
@@ -1,6 +1,6 @@
 .\"    @(#) $OpenBSD: m4.1,v 1.24 2002/04/18 18:57:23 espie Exp $
 .\" $FreeBSD: src/usr.bin/m4/m4.1,v 1.27 2005/01/17 07:44:22 ru Exp $
-.\" $DragonFly: src/usr.bin/m4/m4.1,v 1.3 2006/12/27 21:29:02 pavalos Exp $
+.\" $DragonFly: src/usr.bin/m4/m4.1,v 1.4 2007/01/01 00:41:58 pavalos Exp $
 .\"
 .Dd July 3, 2004
 .Dt M4 1
@@ -12,7 +12,7 @@
 .Nm
 .Op Fl d Ar flags
 .Op Fl t Ar name
-.Op Fl gs
+.Op Fl Pgs
 .Op Fl D Ar name Ns Op = Ns Ar value
 .Op Fl U Ar name
 .Op Fl I Ar dirname
@@ -69,6 +69,19 @@ to have some value (or
 .It Fl U Ar name
 Undefine the symbol
 .Ar name .
+.It Fl P
+Prefixes all
+.Nm
+builtin macros with the string
+.Li m4_ .
+This changes the macro names
+.Li dnl
+to
+.Li m4_dnl ,
+.Li index
+to
+.Li m4_index ,
+and so forth.
 .It Fl I Ar dirname
 Add directory
 .Ar dirname
index 6689264..409a6de 100644 (file)
@@ -40,7 +40,7 @@
  * @(#)main.c  8.1 (Berkeley) 6/6/93
  * $OpenBSD: main.c,v 1.53 2002/04/26 16:15:16 espie Exp $
  * $FreeBSD: src/usr.bin/m4/main.c,v 1.26 2004/08/16 14:18:22 tjr Exp $
- * $DragonFly: src/usr.bin/m4/main.c,v 1.3 2006/12/27 21:29:02 pavalos Exp $
+ * $DragonFly: src/usr.bin/m4/main.c,v 1.4 2007/01/01 00:41:58 pavalos Exp $
  */
 
 /*
@@ -82,6 +82,7 @@ int ilevel = 0;               /* input file stack pointer    */
 int oindex = 0;                /* diversion index..           */
 char null[] = "";              /* as it says.. just a null..  */
 const char *m4wraps = "";       /* m4wrap string default..     */
+int m4prefix = 0;              /* prefix keywords with m4_    */
 char lquote[MAXCCHARS+1] = {LQUOTE};   /* left quote character  (`)   */
 char rquote[MAXCCHARS+1] = {RQUOTE};   /* right quote character (')   */
 char scommt[MAXCCHARS+1] = {SCOMMT};   /* start character for comment */
@@ -168,6 +169,7 @@ main(int argc, char *argv[])
        int c;
        int n;
        int rval;
+       const char *optstr = "D:I:PU:gd:o:st:";
        char *p;
 
        setlocale(LC_ALL, "");
@@ -177,6 +179,14 @@ main(int argc, char *argv[])
        if (signal(SIGINT, SIG_IGN) != SIG_IGN)
                signal(SIGINT, onintr);
 
+       /*
+        * We need to know if -P is there before checking -D and -U.
+        */
+       while ((c = getopt(argc, argv, optstr)) != -1)
+               if (c == 'P')
+                       m4prefix = 1;
+       optind = optreset = 1;
+
        initkwds();
        initspaces();
        STACKMAX = INITSTACKMAX;
@@ -188,7 +198,7 @@ main(int argc, char *argv[])
        outfile = NULL;
        resizedivs(MAXOUT);
 
-       while ((c = getopt(argc, argv, "gst:d:D:U:o:I:")) != -1)
+       while ((c = getopt(argc, argv, optstr)) != -1)
                switch(c) {
                case 'D':               /* define something..*/
                        for (p = optarg; *p; p++)
@@ -203,6 +213,8 @@ main(int argc, char *argv[])
                case 'I':
                        addtoincludepath(optarg);
                        break;
+               case 'P':
+                       break;
                case 'U':               /* undefine...       */
                        remhash(optarg, TOP);
                        break;
@@ -563,9 +575,16 @@ initkwds(void)
        size_t i;
        unsigned int h;
        ndptr p;
+       char *k;
 
        for (i = 0; i < MAXKEYS; i++) {
-               h = hash(keywrds[i].knam);
+               k = (char *)keywrds[i].knam;
+               if (m4prefix) {
+                       if (asprintf(&k, "m4_%s", k) == -1)
+                               err(1, "asprintf");
+                       keywrds[i].knam = k;
+               }
+               h = hash(k);
                p = (ndptr) xalloc(sizeof(struct ndblock));
                p->nxtptr = hashtab[h % HASHSIZE];
                hashtab[h % HASHSIZE] = p;