Module Name:    src
Committed By:   tls
Date:           Sun Aug 10 06:57:59 UTC 2014

Modified Files:
        src/usr.bin/config [tls-earlyentropy]: config.1 config.5 defs.h files.c
            gram.y main.c sem.c

Log Message:
Rebase.


To generate a diff of this commit:
cvs rdiff -u -r1.13 -r1.13.8.1 src/usr.bin/config/config.1
cvs rdiff -u -r1.22 -r1.22.2.1 src/usr.bin/config/config.5
cvs rdiff -u -r1.44 -r1.44.8.1 src/usr.bin/config/defs.h
cvs rdiff -u -r1.11 -r1.11.8.1 src/usr.bin/config/files.c
cvs rdiff -u -r1.38 -r1.38.2.1 src/usr.bin/config/gram.y
cvs rdiff -u -r1.51 -r1.51.2.1 src/usr.bin/config/main.c
cvs rdiff -u -r1.42 -r1.42.2.1 src/usr.bin/config/sem.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/usr.bin/config/config.1
diff -u src/usr.bin/config/config.1:1.13 src/usr.bin/config/config.1:1.13.8.1
--- src/usr.bin/config/config.1:1.13	Thu Aug 30 12:42:41 2012
+++ src/usr.bin/config/config.1	Sun Aug 10 06:57:59 2014
@@ -1,4 +1,4 @@
-.\"	$NetBSD: config.1,v 1.13 2012/08/30 12:42:41 wiz Exp $
+.\"	$NetBSD: config.1,v 1.13.8.1 2014/08/10 06:57:59 tls Exp $
 .\"
 .\" Copyright (c) 1980, 1991, 1993
 .\"	The Regents of the University of California.  All rights reserved.
@@ -29,7 +29,7 @@
 .\"
 .\"     from: @(#)config.8	8.2 (Berkeley) 4/19/94
 .\"
-.Dd August 30, 2012
+.Dd May 5, 2014
 .Dt CONFIG 1
 .Os
 .Sh NAME
@@ -39,7 +39,9 @@
 .Nm
 .Op Fl Ppv
 .Op Fl b Ar builddir
+.Op Fl D Ar var=value
 .Op Fl s Ar srcdir
+.Op Fl U Ar value
 .Op Ar config-file
 .Nm
 .Fl x
@@ -109,6 +111,11 @@ Use
 .Ar builddir
 as the kernel build directory, instead of computing and creating one
 automatically.
+.It Fl D Ar var=value
+Define a makeoptions variable to the given value.
+This is equivalent to appending a
+.Li makeoptions var=value
+line to the config file.
 .It Fl L
 Generate a lint configuration.
 See section
@@ -131,6 +138,12 @@ is used to prepare a kernel build direct
 when it is used in combination with the
 .Fl L
 flag.
+.It Fl U Ar var
+Undefine the makeoption
+.Ar var .
+This is equivalent to appending the line
+.Li no makeoptions var
+to the config file.
 .It Fl v
 Increase verbosity by enabling some more warnings.
 .It Fl x

Index: src/usr.bin/config/config.5
diff -u src/usr.bin/config/config.5:1.22 src/usr.bin/config/config.5:1.22.2.1
--- src/usr.bin/config/config.5:1.22	Thu Feb 13 22:36:28 2014
+++ src/usr.bin/config/config.5	Sun Aug 10 06:57:59 2014
@@ -1,4 +1,4 @@
-.\" $NetBSD: config.5,v 1.22 2014/02/13 22:36:28 wiz Exp $
+.\" $NetBSD: config.5,v 1.22.2.1 2014/08/10 06:57:59 tls Exp $
 .\"
 .\"  Copyright (c) 2006, 2007 The NetBSD Foundation.
 .\"  All rights reserved.
@@ -24,7 +24,7 @@
 .\"  ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 .\"  POSSIBILITY OF SUCH DAMAGE.
 .\"
-.Dd March 3, 2010
+.Dd May 29, 2014
 .Dt CONFIG 5
 .Os
 .Sh NAME
@@ -587,6 +587,8 @@ prefix
 Defines the indentification string of the kernel.
 This statement is optional, and the name of the main configuration file will be
 used as a default value.
+.It Ic no ident
+Deletes any pre-existing indentification string of the kernel.
 .It Ic maxusers Ar number
 Despite its name, this statement does not limit the maximum number of users on
 the system.

Index: src/usr.bin/config/defs.h
diff -u src/usr.bin/config/defs.h:1.44 src/usr.bin/config/defs.h:1.44.8.1
--- src/usr.bin/config/defs.h:1.44	Fri Jun  8 08:56:45 2012
+++ src/usr.bin/config/defs.h	Sun Aug 10 06:57:59 2014
@@ -1,4 +1,4 @@
-/*	$NetBSD: defs.h,v 1.44 2012/06/08 08:56:45 martin Exp $	*/
+/*	$NetBSD: defs.h,v 1.44.8.1 2014/08/10 06:57:59 tls Exp $	*/
 
 /*
  * Copyright (c) 1992, 1993
@@ -107,7 +107,7 @@ extern const char *progname;
  * The next two lines define the current version of the config(1) binary,
  * and the minimum version of the configuration files it supports.
  */
-#define CONFIG_VERSION		20100430
+#define CONFIG_VERSION		20140502
 #define CONFIG_MINVERSION	0
 
 /*

Index: src/usr.bin/config/files.c
diff -u src/usr.bin/config/files.c:1.11 src/usr.bin/config/files.c:1.11.8.1
--- src/usr.bin/config/files.c:1.11	Sun Mar 11 08:21:53 2012
+++ src/usr.bin/config/files.c	Sun Aug 10 06:57:59 2014
@@ -1,4 +1,4 @@
-/*	$NetBSD: files.c,v 1.11 2012/03/11 08:21:53 dholland Exp $	*/
+/*	$NetBSD: files.c,v 1.11.8.1 2014/08/10 06:57:59 tls Exp $	*/
 
 /*
  * Copyright (c) 1992, 1993
@@ -160,7 +160,9 @@ addfile(const char *path, struct condexp
 	TAILQ_INSERT_TAIL(&allfiles, fi, fi_next);
 	return;
  bad:
-	condexpr_destroy(optx);
+	if (optx != NULL) {
+		condexpr_destroy(optx);
+	}
 }
 
 void

Index: src/usr.bin/config/gram.y
diff -u src/usr.bin/config/gram.y:1.38 src/usr.bin/config/gram.y:1.38.2.1
--- src/usr.bin/config/gram.y:1.38	Sun Aug 11 10:37:08 2013
+++ src/usr.bin/config/gram.y	Sun Aug 10 06:57:59 2014
@@ -1,5 +1,5 @@
 %{
-/*	$NetBSD: gram.y,v 1.38 2013/08/11 10:37:08 pooka Exp $	*/
+/*	$NetBSD: gram.y,v 1.38.2.1 2014/08/10 06:57:59 tls Exp $	*/
 
 /*
  * Copyright (c) 1992, 1993
@@ -627,6 +627,7 @@ config_item:
 	| OPTIONS opt_list
 	| MAXUSERS NUMBER		{ setmaxusers($2.val); }
 	| IDENT stringvalue		{ setident($2); }
+	| NO IDENT			{ setident(NULL); }
 	| CONFIG conf root_spec sysparam_list
 					{ addconf(&conf); }
 	| NO CONFIG WORD		{ delconf($3); }

Index: src/usr.bin/config/main.c
diff -u src/usr.bin/config/main.c:1.51 src/usr.bin/config/main.c:1.51.2.1
--- src/usr.bin/config/main.c:1.51	Fri Nov  1 21:39:13 2013
+++ src/usr.bin/config/main.c	Sun Aug 10 06:57:59 2014
@@ -1,4 +1,4 @@
-/*	$NetBSD: main.c,v 1.51 2013/11/01 21:39:13 christos Exp $	*/
+/*	$NetBSD: main.c,v 1.51.2.1 2014/08/10 06:57:59 tls Exp $	*/
 
 /*
  * Copyright (c) 1992, 1993
@@ -86,6 +86,7 @@ COPYRIGHT("@(#) Copyright (c) 1992, 1993
 int	vflag;				/* verbose output */
 int	Pflag;				/* pack locators */
 int	Lflag;				/* lint config generation */
+int	handling_cmdlineopts;		/* currently processing -D/-U options */
 
 int	yyparse(void);
 
@@ -100,6 +101,7 @@ static struct nvlist **nextmkopt;
 static struct nvlist **nextappmkopt;
 static struct nvlist **nextcndmkopt;
 static struct nvlist **nextfsopt;
+static struct nvlist *cmdlinedefs, *cmdlineundefs;
 
 static	void	usage(void) __dead;
 static	void	dependopts(void);
@@ -119,6 +121,9 @@ static	int	mkident(void);
 static	int	devbase_has_dead_instances(const char *, void *, void *);
 static	int	devbase_has_any_instance(struct devbase *, int, int, int);
 static	int	check_dead_devi(const char *, void *, void *);
+static	void	add_makeopt(const char *);
+static	void	remove_makeopt(const char *);
+static	void	handle_cmdline_makeoptions(void);
 static	void	kill_orphans(void);
 static	void	do_kill_orphans(struct devbase *, struct attr *,
     struct devbase *, int);
@@ -155,11 +160,11 @@ main(int argc, char **argv)
 
 	pflag = 0;
 	xflag = 0;
-	while ((ch = getopt(argc, argv, "DLPgpvb:s:x")) != -1) {
+	while ((ch = getopt(argc, argv, "D:LPU:dgpvb:s:x")) != -1) {
 		switch (ch) {
 
 #ifndef MAKE_BOOTSTRAP
-		case 'D':
+		case 'd':
 			yydebug = 1;
 			break;
 #endif
@@ -179,7 +184,7 @@ main(int argc, char **argv)
 			 * do that for you, but you really should just
 			 * put them in the config file.
 			 */
-			warnx("-g is obsolete (use makeoptions DEBUG=\"-g\")");
+			warnx("-g is obsolete (use -D DEBUG=\"-g\")");
 			usage();
 			/*NOTREACHED*/
 
@@ -213,6 +218,14 @@ main(int argc, char **argv)
 			xflag = 1;
 			break;
 
+		case 'D':
+			add_makeopt(optarg);
+			break;
+
+		case 'U':
+			remove_makeopt(optarg);
+			break;
+
 		case '?':
 		default:
 			usage();
@@ -386,6 +399,11 @@ main(int argc, char **argv)
 		unlink(cname);
 
 	/*
+	 * Handle command line overrides
+	 */
+	handle_cmdline_makeoptions();
+
+	/*
 	 * Detect and properly ignore orphaned devices
 	 */
 	kill_orphans();
@@ -468,7 +486,8 @@ main(int argc, char **argv)
 static void
 usage(void)
 {
-	(void)fprintf(stderr, "Usage: %s [-Ppv] [-s srcdir] [-b builddir] "
+	(void)fprintf(stderr, "Usage: %s [-Ppv] [-b builddir] [-D var=value] "
+	    "[-s srcdir] [-U var] "
 	    "[config-file]\n\t%s -x [kernel-file]\n"
 	    "\t%s -L [-v] [-s srcdir] [config-file]\n", 
 	    getprogname(), getprogname(), getprogname());
@@ -1071,6 +1090,11 @@ undo_option(struct hashtab *ht, struct n
 	struct nvlist *nv;
 	
 	if (ht_remove(ht, name)) {
+		/*
+		 * -U command line option removals are always silent
+		 */
+		if (handling_cmdlineopts)
+			return 0;
 		cfgerror("%s `%s' is not defined", type, name);
 		return (1);
 	}
@@ -1770,3 +1794,56 @@ kill_orphans(void)
 {
 	ht_enumerate(devroottab, kill_orphans_cb, NULL);
 }
+
+static void
+add_makeopt(const char *opt)
+{
+	struct nvlist *p;
+	char *buf = estrdup(opt);
+	char *eq = strchr(buf, '=');
+
+	if (!eq)
+		errx(EXIT_FAILURE, "-D %s is not in var=value format", opt);
+
+	*eq = 0;
+	p = newnv(estrdup(buf), estrdup(eq+1), NULL, 0, NULL);
+	free(buf);
+	p->nv_next = cmdlinedefs;
+	cmdlinedefs = p;
+}
+
+static void
+remove_makeopt(const char *opt)
+{
+	struct nvlist *p;
+
+	p = newnv(estrdup(opt), NULL, NULL, 0, NULL);
+	p->nv_next = cmdlineundefs;
+	cmdlineundefs = p;
+}
+
+static void
+handle_cmdline_makeoptions(void)
+{
+	struct nvlist *p, *n;
+
+	handling_cmdlineopts = 1;
+	for (p = cmdlineundefs; p; p = n) {
+		n = p->nv_next;
+		delmkoption(intern(p->nv_name));
+		free(__UNCONST(p->nv_name));
+		nvfree(p);
+	}
+	for (p = cmdlinedefs; p; p = n) {
+		const char *name = intern(p->nv_name);
+
+		n = p->nv_next;
+		delmkoption(name);
+		addmkoption(name, intern(p->nv_str));
+		free(__UNCONST(p->nv_name));
+		free(__UNCONST(p->nv_str));
+
+		nvfree(p);
+	}
+	handling_cmdlineopts = 0;
+}

Index: src/usr.bin/config/sem.c
diff -u src/usr.bin/config/sem.c:1.42 src/usr.bin/config/sem.c:1.42.2.1
--- src/usr.bin/config/sem.c:1.42	Sun Aug 11 10:37:08 2013
+++ src/usr.bin/config/sem.c	Sun Aug 10 06:57:59 2014
@@ -1,4 +1,4 @@
-/*	$NetBSD: sem.c,v 1.42 2013/08/11 10:37:08 pooka Exp $	*/
+/*	$NetBSD: sem.c,v 1.42.2.1 2014/08/10 06:57:59 tls Exp $	*/
 
 /*
  * Copyright (c) 1992, 1993
@@ -181,7 +181,10 @@ void
 setident(const char *i)
 {
 
-	ident = intern(i);
+	if (i)
+		ident = intern(i);
+	else
+		ident = NULL;
 }
 
 /*

Reply via email to