Module Name: src Committed By: uebayasi Date: Fri Oct 31 07:38:36 UTC 2014
Modified Files: src/sys/conf: files std src/tests/usr.bin/config: t_config.sh src/tests/usr.bin/config/support/conf: files src/usr.bin/config: config.5 defs.h gram.y main.c scan.l sem.c sem.h Log Message: config(1), config(5): Introduce "select" o Introduce a new selection directive "select" to select an attribute (as a module) and its dependencies. o Support "no select" too. o Stop abusing "options" to select an attribute. o Bump config(1) version. To generate a diff of this commit: cvs rdiff -u -r1.1120 -r1.1121 src/sys/conf/files cvs rdiff -u -r1.19 -r1.20 src/sys/conf/std cvs rdiff -u -r1.3 -r1.4 src/tests/usr.bin/config/t_config.sh cvs rdiff -u -r1.1 -r1.2 src/tests/usr.bin/config/support/conf/files cvs rdiff -u -r1.24 -r1.25 src/usr.bin/config/config.5 cvs rdiff -u -r1.59 -r1.60 src/usr.bin/config/defs.h cvs rdiff -u -r1.44 -r1.45 src/usr.bin/config/gram.y cvs rdiff -u -r1.70 -r1.71 src/usr.bin/config/main.c cvs rdiff -u -r1.20 -r1.21 src/usr.bin/config/scan.l cvs rdiff -u -r1.65 -r1.66 src/usr.bin/config/sem.c cvs rdiff -u -r1.16 -r1.17 src/usr.bin/config/sem.h Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/sys/conf/files diff -u src/sys/conf/files:1.1120 src/sys/conf/files:1.1121 --- src/sys/conf/files:1.1120 Sun Oct 12 04:30:42 2014 +++ src/sys/conf/files Fri Oct 31 07:38:36 2014 @@ -1,7 +1,7 @@ -# $NetBSD: files,v 1.1120 2014/10/12 04:30:42 uebayasi Exp $ +# $NetBSD: files,v 1.1121 2014/10/31 07:38:36 uebayasi Exp $ # @(#)files.newconf 7.5 (Berkeley) 5/10/93 -version 20141010 +version 20141030 # # device classes Index: src/sys/conf/std diff -u src/sys/conf/std:1.19 src/sys/conf/std:1.20 --- src/sys/conf/std:1.19 Fri Oct 10 12:46:32 2014 +++ src/sys/conf/std Fri Oct 31 07:38:36 2014 @@ -1,4 +1,4 @@ -# $NetBSD: std,v 1.19 2014/10/10 12:46:32 uebayasi Exp $ +# $NetBSD: std,v 1.20 2014/10/31 07:38:36 uebayasi Exp $ # # standard MI 'options' # @@ -9,7 +9,9 @@ # Always include "kern" attribute (module). Other attributes don't need to # depend on "kern". # -options KERN +select kern + +select net # XXX Clean up dependency # the following options are on-by-default to keep # kernel config file compatibility. @@ -22,8 +24,6 @@ options COREDUMP # allow processes to co options AIO # POSIX asynchronous I/O options MQUEUE # POSIX message queues -options NET # XXX Clean up dependency - # # Security model. # Index: src/tests/usr.bin/config/t_config.sh diff -u src/tests/usr.bin/config/t_config.sh:1.3 src/tests/usr.bin/config/t_config.sh:1.4 --- src/tests/usr.bin/config/t_config.sh:1.3 Fri Oct 31 04:54:17 2014 +++ src/tests/usr.bin/config/t_config.sh Fri Oct 31 07:38:36 2014 @@ -1,4 +1,4 @@ -# $NetBSD: t_config.sh,v 1.3 2014/10/31 04:54:17 uebayasi Exp $ +# $NetBSD: t_config.sh,v 1.4 2014/10/31 07:38:36 uebayasi Exp $ # # Copyright (c) 2008, 2010 The NetBSD Foundation, Inc. # All rights reserved. @@ -62,6 +62,22 @@ run_and_check_fail() config -s "${supportdir}" -b "compile/${name}" "${config}" } +test_output() +{ + local name="${1}"; shift + local res=1 + + run_and_check_prep "${name}" + + config -s "${supportdir}" -b compile/"${name}" "${config}" >/dev/null && + cd compile/"${name}" && + check_${name} && + cd $OLDPWD && + res=0 + + atf_check test $res -eq 0 +} + # Defines a test case for config(1). test_case() { @@ -108,7 +124,50 @@ no options UNDEFINED test_case no_undefined_opt pass \ "Checks that config allows a negation for an undefined options" +# Attribute selection +test_case select pass "Attribute selection" +select_config_str=' +include "../d_min" +select c +' +check_select() +{ + local f=Makefile + + grep -q '^a\.o:' $f && + grep -q '^b\.o:' $f && + grep -q '^c\.o:' $f && + : +} +select_body() { + test_output select +} + +# Attribute negation +test_case no_select pass "Attribute negation" +no_select_config_str=' +include "../d_min" +select c +no select a +' +check_no_select() +{ + local f=Makefile + + : >tmp + grep -q '^a\.o:' $f >>tmp + grep -q '^b\.o:' $f >>tmp + grep -q '^c\.o:' $f >>tmp + + [ ! -s tmp ] && + : +} +no_select_body() { + test_output no_select +} + # Check minimal kernel config(1) output +test_case min pass "Minimal config" check_min_files() { test -e Makefile && @@ -122,7 +181,6 @@ check_min_files() test -h regress && : } - check_min_makefile() { local f=Makefile @@ -136,26 +194,14 @@ check_min_makefile() [ ! -s tmp.template ] && : } - -test_min() +check_min() { - local res=1 - - run_and_check_prep min - - config -s "${supportdir}" -b compile/min "${config}" >/dev/null && - cd compile/min && check_min_files && check_min_makefile && - cd $OLDPWD && - res=0 - - atf_check test $res -eq 0 + : } - -test_case min pass "Minimal config" min_body() { - test_min + test_output min } atf_init_test_cases() @@ -169,5 +215,7 @@ atf_init_test_cases() atf_add_test_case deffs_redef atf_add_test_case undefined_opt atf_add_test_case no_undefined_opt + atf_add_test_case select + atf_add_test_case no_select atf_add_test_case min } Index: src/tests/usr.bin/config/support/conf/files diff -u src/tests/usr.bin/config/support/conf/files:1.1 src/tests/usr.bin/config/support/conf/files:1.2 --- src/tests/usr.bin/config/support/conf/files:1.1 Sat Mar 17 16:33:12 2012 +++ src/tests/usr.bin/config/support/conf/files Fri Oct 31 07:38:36 2014 @@ -24,3 +24,12 @@ device loopbaby attach loopbaby at loopchild defpseudo pseudodev: hook + +define a +file a.c a + +define b: a +file b.c b + +define c: b +file c.c c Index: src/usr.bin/config/config.5 diff -u src/usr.bin/config/config.5:1.24 src/usr.bin/config/config.5:1.25 --- src/usr.bin/config/config.5:1.24 Thu May 29 08:13:17 2014 +++ src/usr.bin/config/config.5 Fri Oct 31 07:38:36 2014 @@ -1,4 +1,4 @@ -.\" $NetBSD: config.5,v 1.24 2014/05/29 08:13:17 wiz Exp $ +.\" $NetBSD: config.5,v 1.25 2014/10/31 07:38:36 uebayasi 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 May 29, 2014 +.Dd October 30, 2014 .Dt CONFIG 5 .Os .Sh NAME @@ -620,8 +620,10 @@ Un-selects the option If option .Ar name has not been previously selected, the statement produces an error. -.It Oo Ic no Oc Ic file-system Ar name Op , Ar name Op , Ar ... -Adds or removes support for all the listed file-systems. +.It Ic file-system Ar name Op , Ar name Op , Ar ... +Adds support for all the listed file-systems. +.It Ic no file-system Ar name Op , Ar name Op , Ar ... +Removes support for all the listed file-systems. .It Ic config Ar name Ic root on Ar device Oo Ic type Ar fs Oc Op Ic dumps on \ Ar device Adds @@ -696,6 +698,10 @@ again. .It Ic no makeoptions Ar name Op , Ar name Op , Ar ... Removes one or more definitions from the generated .Pa Makefile . +.It Ic select Ar name +Adds the specified attribute and its dependencies. +.It Ic no select Ar name +Removes the specified attribute and all the attributes which depend on it. .El .Sh FILES The files are relative to the kernel source top directory (e.g., Index: src/usr.bin/config/defs.h diff -u src/usr.bin/config/defs.h:1.59 src/usr.bin/config/defs.h:1.60 --- src/usr.bin/config/defs.h:1.59 Wed Oct 29 17:14:50 2014 +++ src/usr.bin/config/defs.h Fri Oct 31 07:38:36 2014 @@ -1,4 +1,4 @@ -/* $NetBSD: defs.h,v 1.59 2014/10/29 17:14:50 christos Exp $ */ +/* $NetBSD: defs.h,v 1.60 2014/10/31 07:38:36 uebayasi 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 20141010 +#define CONFIG_VERSION 20141030 #define CONFIG_MINVERSION 0 /* Index: src/usr.bin/config/gram.y diff -u src/usr.bin/config/gram.y:1.44 src/usr.bin/config/gram.y:1.45 --- src/usr.bin/config/gram.y:1.44 Wed Oct 29 17:14:50 2014 +++ src/usr.bin/config/gram.y Fri Oct 31 07:38:36 2014 @@ -1,5 +1,5 @@ %{ -/* $NetBSD: gram.y,v 1.44 2014/10/29 17:14:50 christos Exp $ */ +/* $NetBSD: gram.y,v 1.45 2014/10/31 07:38:36 uebayasi Exp $ */ /* * Copyright (c) 1992, 1993 @@ -42,7 +42,7 @@ */ #include <sys/cdefs.h> -__RCSID("$NetBSD: gram.y,v 1.44 2014/10/29 17:14:50 christos Exp $"); +__RCSID("$NetBSD: gram.y,v 1.45 2014/10/31 07:38:36 uebayasi Exp $"); #include <sys/types.h> #include <sys/param.h> @@ -181,7 +181,7 @@ static struct loclist *namelocvals(const %token XOBJECT OBSOLETE ON OPTIONS %token PACKAGE PLUSEQ PREFIX PSEUDO_DEVICE PSEUDO_ROOT %token ROOT -%token SINGLE SOURCE +%token SELECT SINGLE SOURCE %token TYPE %token VECTOR VERSION %token WITH @@ -705,6 +705,8 @@ selections: /* One config item. */ selection: definition + | select_attr + | select_no_attr | select_no_filesystems | select_filesystems | select_no_makeoptions @@ -725,6 +727,14 @@ selection: | select_device_instance ; +select_attr: + SELECT WORD { addattr($2); } +; + +select_no_attr: + NO SELECT WORD { delattr($3); } +; + select_no_filesystems: NO FILE_SYSTEM no_fs_list ; Index: src/usr.bin/config/main.c diff -u src/usr.bin/config/main.c:1.70 src/usr.bin/config/main.c:1.71 --- src/usr.bin/config/main.c:1.70 Wed Oct 29 17:14:50 2014 +++ src/usr.bin/config/main.c Fri Oct 31 07:38:36 2014 @@ -1,4 +1,4 @@ -/* $NetBSD: main.c,v 1.70 2014/10/29 17:14:50 christos Exp $ */ +/* $NetBSD: main.c,v 1.71 2014/10/31 07:38:36 uebayasi Exp $ */ /* * Copyright (c) 1992, 1993 @@ -45,7 +45,7 @@ #endif #include <sys/cdefs.h> -__RCSID("$NetBSD: main.c,v 1.70 2014/10/29 17:14:50 christos Exp $"); +__RCSID("$NetBSD: main.c,v 1.71 2014/10/31 07:38:36 uebayasi Exp $"); #ifndef MAKE_BOOTSTRAP #include <sys/cdefs.h> @@ -992,13 +992,6 @@ addoption(const char *name, const char * n = strtolower(name); (void)ht_insert(selecttab, n, (void *)__UNCONST(n)); CFGDBG(3, "option selected `%s'", n); - - /* - * Select attribute if one exists. - */ - struct attr *a; - if ((a = ht_lookup(attrtab, n)) != NULL) - selectattr(a); } void Index: src/usr.bin/config/scan.l diff -u src/usr.bin/config/scan.l:1.20 src/usr.bin/config/scan.l:1.21 --- src/usr.bin/config/scan.l:1.20 Wed Oct 29 19:10:18 2014 +++ src/usr.bin/config/scan.l Fri Oct 31 07:38:36 2014 @@ -1,5 +1,5 @@ %{ -/* $NetBSD: scan.l,v 1.20 2014/10/29 19:10:18 christos Exp $ */ +/* $NetBSD: scan.l,v 1.21 2014/10/31 07:38:36 uebayasi Exp $ */ /* * Copyright (c) 1992, 1993 @@ -42,7 +42,7 @@ */ #include <sys/cdefs.h> -__RCSID("$NetBSD: scan.l,v 1.20 2014/10/29 19:10:18 christos Exp $"); +__RCSID("$NetBSD: scan.l,v 1.21 2014/10/31 07:38:36 uebayasi Exp $"); #include <sys/param.h> #include <errno.h> @@ -167,6 +167,7 @@ prefix return PREFIX; pseudo-device return PSEUDO_DEVICE; pseudo-root return PSEUDO_ROOT; root return ROOT; +select return SELECT; single return SINGLE; source return SOURCE; type return TYPE; Index: src/usr.bin/config/sem.c diff -u src/usr.bin/config/sem.c:1.65 src/usr.bin/config/sem.c:1.66 --- src/usr.bin/config/sem.c:1.65 Wed Oct 29 17:14:50 2014 +++ src/usr.bin/config/sem.c Fri Oct 31 07:38:36 2014 @@ -1,4 +1,4 @@ -/* $NetBSD: sem.c,v 1.65 2014/10/29 17:14:50 christos Exp $ */ +/* $NetBSD: sem.c,v 1.66 2014/10/31 07:38:36 uebayasi Exp $ */ /* * Copyright (c) 1992, 1993 @@ -45,7 +45,7 @@ #endif #include <sys/cdefs.h> -__RCSID("$NetBSD: sem.c,v 1.65 2014/10/29 17:14:50 christos Exp $"); +__RCSID("$NetBSD: sem.c,v 1.66 2014/10/31 07:38:36 uebayasi Exp $"); #include <sys/param.h> #include <ctype.h> @@ -1305,6 +1305,7 @@ remove_devi(struct devi *i) struct devi *f, *j, **ppi; struct deva *iba; + CFGDBG(5, "removing devi `%s'", i->i_name); f = ht_lookup(devitab, i->i_name); if (f == NULL) panic("remove_devi(): instance %s disappeared from devitab", @@ -1948,11 +1949,30 @@ split(const char *name, size_t nlen, cha } void +addattr(const char *name) +{ + struct attr *a; + + a = refattr(name); + selectattr(a); +} + +void +delattr(const char *name) +{ + struct attr *a; + + a = refattr(name); + deselectattr(a); +} + +void selectattr(struct attr *a) { struct attrlist *al; struct attr *dep; + CFGDBG(5, "selecting attr `%s'", a->a_name); for (al = a->a_deps; al != NULL; al = al->al_next) { dep = al->al_this; selectattr(dep); @@ -1962,6 +1982,26 @@ selectattr(struct attr *a) } static int +deselectattrcb2(const char *name1, const char *name2, void *v, void *arg) +{ + const char *name = arg; + + if (strcmp(name, name2) == 0) + delattr(name1); + return 0; +} + +void +deselectattr(struct attr *a) +{ + + CFGDBG(5, "deselecting attr `%s'", a->a_name); + ht_enumerate2(attrdeptab, deselectattrcb2, __UNCONST(a->a_name)); + (void)ht_remove(selecttab, a->a_name); + CFGDBG(3, "attr deselected `%s'", a->a_name); +} + +static int dumpattrdepcb2(const char *name1, const char *name2, void *v, void *arg) { Index: src/usr.bin/config/sem.h diff -u src/usr.bin/config/sem.h:1.16 src/usr.bin/config/sem.h:1.17 --- src/usr.bin/config/sem.h:1.16 Wed Oct 29 17:14:50 2014 +++ src/usr.bin/config/sem.h Fri Oct 31 07:38:36 2014 @@ -1,4 +1,4 @@ -/* $NetBSD: sem.h,v 1.16 2014/10/29 17:14:50 christos Exp $ */ +/* $NetBSD: sem.h,v 1.17 2014/10/31 07:38:36 uebayasi Exp $ */ /* * Copyright (c) 1992, 1993 @@ -60,7 +60,10 @@ struct attr *getattr(const char *); struct attr *refattr(const char *); int getrefattr(const char *, struct attr **); void expandattr(struct attr *, void (*)(struct attr *)); +void addattr(const char *); +void delattr(const char *); void selectattr(struct attr *); +void deselectattr(struct attr *); void dependattrs(void); void setmajor(struct devbase *, int); void addconf(struct config *);