Author: thompsa
Date: Mon Jan 12 02:45:00 2009
New Revision: 187075
URL: http://svn.freebsd.org/changeset/base/187075

Log:
  MFC r185186
  
   Allow multiple makeoption lines to be used with the += operator, this permits
   the following syntax in the kernel config.
  
    makeoptions MODULES_OVERRIDE=foo
    makeoptions MODULES_OVERRIDE+=bar
    makeoptions MODULES_OVERRIDE+=baz
  
   Bump config minor version to 600007.

Modified:
  stable/7/usr.sbin/config/   (props changed)
  stable/7/usr.sbin/config/config.5
  stable/7/usr.sbin/config/config.h
  stable/7/usr.sbin/config/config.y
  stable/7/usr.sbin/config/configvers.h
  stable/7/usr.sbin/config/lang.l
  stable/7/usr.sbin/config/mkmakefile.c

Modified: stable/7/usr.sbin/config/config.5
==============================================================================
--- stable/7/usr.sbin/config/config.5   Mon Jan 12 02:44:23 2009        
(r187074)
+++ stable/7/usr.sbin/config/config.5   Mon Jan 12 02:45:00 2009        
(r187075)
@@ -231,6 +231,7 @@ specifications.
 Each option specification has the form
 .Pp
 .D1 Ar MakeVariableName Ns Op = Ns Ar Value
+.D1 Ar MakeVariableName Ns += Ns Ar Value
 .Pp
 and results in the appropriate
 .Xr make 1
@@ -243,7 +244,8 @@ is assumed to be the empty string.
 .Pp
 Example:
 .Bd -literal -offset indent -compact
-makeoptions MYMAKEOPTION="foobar"
+makeoptions MYMAKEOPTION="foo"
+makeoptions MYMAKEOPTION+="bar"
 makeoptions MYNULLMAKEOPTION
 .Ed
 .\" -------- MAXUSERS --------

Modified: stable/7/usr.sbin/config/config.h
==============================================================================
--- stable/7/usr.sbin/config/config.h   Mon Jan 12 02:44:23 2009        
(r187074)
+++ stable/7/usr.sbin/config/config.h   Mon Jan 12 02:45:00 2009        
(r187075)
@@ -121,6 +121,7 @@ struct opt {
        char    *op_value;
        int     op_ownfile;     /* true = own file, false = makefile */
        SLIST_ENTRY(opt) op_next;
+       SLIST_ENTRY(opt) op_append;
 };
 
 SLIST_HEAD(opt_head, opt) opt, mkopt, rmopts;

Modified: stable/7/usr.sbin/config/config.y
==============================================================================
--- stable/7/usr.sbin/config/config.y   Mon Jan 12 02:44:23 2009        
(r187074)
+++ stable/7/usr.sbin/config/config.y   Mon Jan 12 02:45:00 2009        
(r187075)
@@ -13,6 +13,7 @@
 %token NODEVICE
 %token ENV
 %token EQUALS
+%token PLUSEQUALS
 %token HINTS
 %token IDENT
 %token MAXUSERS
@@ -219,7 +220,7 @@ System_spec:
 
 System_id:
        Save_id
-             = { newopt(&mkopt, ns("KERNEL"), $1); };
+             = { newopt(&mkopt, ns("KERNEL"), $1, 0); };
 
 System_parameter_list:
          System_parameter_list ID
@@ -235,14 +236,14 @@ Opt_list:
 Option:
        Save_id
              = {
-               newopt(&opt, $1, NULL);
+               newopt(&opt, $1, NULL, 0);
                if (strchr($1, '=') != NULL)
                        errx(1, "%s:%d: The `=' in options should not be "
                            "quoted", yyfile, yyline);
              } |
        Save_id EQUALS Opt_value
              = {
-               newopt(&opt, $1, $3);
+               newopt(&opt, $1, $3, 0);
              } ;
 
 Opt_value:
@@ -269,9 +270,11 @@ Mkopt_list:
 
 Mkoption:
        Save_id
-             = { newopt(&mkopt, $1, ns("")); } |
+             = { newopt(&mkopt, $1, ns(""), 0); } |
        Save_id EQUALS Opt_value
-             = { newopt(&mkopt, $1, $3); } ;
+             = { newopt(&mkopt, $1, $3, 0); } |
+       Save_id PLUSEQUALS Opt_value
+             = { newopt(&mkopt, $1, $3, 1); } ;
 
 Dev:
        ID
@@ -299,7 +302,7 @@ NoDev_list:
 Device:
        Dev
              = {
-               newopt(&opt, devopt($1), ns("1"));
+               newopt(&opt, devopt($1), ns("1"), 0);
                /* and the device part */
                newdev($1);
                }
@@ -419,9 +422,9 @@ findopt(struct opt_head *list, char *nam
  * Add an option to the list of options.
  */
 static void
-newopt(struct opt_head *list, char *name, char *value)
+newopt(struct opt_head *list, char *name, char *value, int append)
 {
-       struct opt *op;
+       struct opt *op, *op2;
 
        /*
         * Ignore inclusions listed explicitly for configuration files.
@@ -431,7 +434,8 @@ newopt(struct opt_head *list, char *name
                return;
        }
 
-       if (findopt(list, name)) {
+       op2 = findopt(list, name);
+       if (op2 != NULL && !append) {
                printf("WARNING: duplicate option `%s' encountered.\n", name);
                return;
        }
@@ -440,7 +444,12 @@ newopt(struct opt_head *list, char *name
        op->op_name = name;
        op->op_ownfile = 0;
        op->op_value = value;
-       SLIST_INSERT_HEAD(list, op, op_next);
+       if (op2 != NULL) {
+               while (SLIST_NEXT(op2, op_append) != NULL)
+                       op2 = SLIST_NEXT(op2, op_append);
+               SLIST_NEXT(op2, op_append) = op;
+       } else
+               SLIST_INSERT_HEAD(list, op, op_next);
 }
 
 /*

Modified: stable/7/usr.sbin/config/configvers.h
==============================================================================
--- stable/7/usr.sbin/config/configvers.h       Mon Jan 12 02:44:23 2009        
(r187074)
+++ stable/7/usr.sbin/config/configvers.h       Mon Jan 12 02:45:00 2009        
(r187075)
@@ -49,5 +49,5 @@
  *
  * $FreeBSD$
  */
-#define        CONFIGVERS      600006
+#define        CONFIGVERS      600007
 #define        MAJOR_VERS(x)   ((x) / 100000)

Modified: stable/7/usr.sbin/config/lang.l
==============================================================================
--- stable/7/usr.sbin/config/lang.l     Mon Jan 12 02:44:23 2009        
(r187074)
+++ stable/7/usr.sbin/config/lang.l     Mon Jan 12 02:45:00 2009        
(r187075)
@@ -156,6 +156,7 @@ PATH        [./][-/.%^A-Za-z_0-9]+
 ";"            {       return SEMICOLON;               }
 ","            {       return COMMA;                   }
 "="            {       BEGIN TOEOL; return EQUALS;     }
+"+="           {       BEGIN TOEOL; return PLUSEQUALS; }
 <<EOF>>                {
                        int tok;
 

Modified: stable/7/usr.sbin/config/mkmakefile.c
==============================================================================
--- stable/7/usr.sbin/config/mkmakefile.c       Mon Jan 12 02:44:23 2009        
(r187074)
+++ stable/7/usr.sbin/config/mkmakefile.c       Mon Jan 12 02:45:00 2009        
(r187075)
@@ -110,7 +110,7 @@ makefile(void)
 {
        FILE *ifp, *ofp;
        char line[BUFSIZ];
-       struct opt *op;
+       struct opt *op, *t;
        int versreq;
 
        read_files();
@@ -127,8 +127,12 @@ makefile(void)
        if (ofp == 0)
                err(1, "%s", path("Makefile.new"));
        fprintf(ofp, "KERN_IDENT=%s\n", ident);
-       SLIST_FOREACH(op, &mkopt, op_next)
-               fprintf(ofp, "%s=%s\n", op->op_name, op->op_value);
+       SLIST_FOREACH_SAFE(op, &mkopt, op_next, t) {
+               fprintf(ofp, "%s=%s", op->op_name, op->op_value);
+               while ((op = SLIST_NEXT(op, op_append)) != NULL)
+                       fprintf(ofp, " %s", op->op_value);
+               fprintf(ofp, "\n");
+       }
        if (debugging)
                fprintf(ofp, "DEBUG=-g\n");
        if (profiling)
_______________________________________________
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