Author: imp
Date: Tue Feb  4 18:28:58 2014
New Revision: 261493
URL: http://svnweb.freebsd.org/changeset/base/261493

Log:
  Implement the '!' operator for files* files. It means 'include this
  only if the specified option is NOT specified.' Bump version because
  old config won't be able to cope with files* files that have this
  construct in them.

Modified:
  head/usr.sbin/config/configvers.h
  head/usr.sbin/config/mkmakefile.c

Modified: head/usr.sbin/config/configvers.h
==============================================================================
--- head/usr.sbin/config/configvers.h   Tue Feb  4 18:24:25 2014        
(r261492)
+++ head/usr.sbin/config/configvers.h   Tue Feb  4 18:28:58 2014        
(r261493)
@@ -49,5 +49,5 @@
  *
  * $FreeBSD$
  */
-#define        CONFIGVERS      600012
+#define        CONFIGVERS      600013
 #define        MAJOR_VERS(x)   ((x) / 100000)

Modified: head/usr.sbin/config/mkmakefile.c
==============================================================================
--- head/usr.sbin/config/mkmakefile.c   Tue Feb  4 18:24:25 2014        
(r261492)
+++ head/usr.sbin/config/mkmakefile.c   Tue Feb  4 18:28:58 2014        
(r261493)
@@ -308,7 +308,7 @@ read_file(char *fname)
        struct opt *op;
        char *wd, *this, *compilewith, *depends, *clean, *warning;
        const char *objprefix;
-       int compile, match, nreqs, std, filetype,
+       int compile, match, nreqs, std, filetype, not,
            imp_rule, no_obj, before_depend, nowerror;
 
        fp = fopen(fname, "r");
@@ -366,6 +366,7 @@ next:
        no_obj = 0;
        before_depend = 0;
        nowerror = 0;
+       not = 0;
        filetype = NORMAL;
        objprefix = "";
        if (eq(wd, "standard"))
@@ -376,13 +377,21 @@ next:
        for (wd = get_word(fp); wd; wd = get_word(fp)) {
                if (wd == (char *)EOF)
                        return;
+               if (eq(wd, "!")) {
+                       not = 1;
+                       continue;
+               }
                if (eq(wd, "|")) {
                        if (nreqs == 0)
                                errout("%s: syntax error describing %s\n",
                                       fname, this);
-                       compile += match;
+                       if (not)
+                               compile += !match;
+                       else
+                               compile += match;
                        match = 1;
                        nreqs = 0;
+                       not = 0;
                        continue;
                }
                if (eq(wd, "no-obj")) {
@@ -471,9 +480,13 @@ next:
                        if (op->op_value == 0 && opteq(op->op_name, wd))
                                goto nextparam;
                match = 0;
-nextparam:;
+nextparam:
+               not = 0;
        }
-       compile += match;
+       if (not)
+               compile += !match;
+       else
+               compile += match;
        if (compile && tp == NULL) {
                if (std == 0 && nreqs == 0)
                        errout("%s: what is %s optional on?\n",
_______________________________________________
svn-src-all@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to