Date: Mon, 23 Feb 2009 14:16:58 GMT From: Kuan-Chung Chiu <buganini@gmail.com> To: freebsd-gnats-submit@FreeBSD.org Subject: conf/132008: [PATCH] to allow using section/nosection in KERNCONF Message-ID: <200902231416.n1NEGwDD056049@www.freebsd.org> Resent-Message-ID: <200902231420.n1NEK5jL007505@freefall.freebsd.org>
next in thread | raw e-mail | index | archive | help
>Number: 132008
>Category: conf
>Synopsis: [PATCH] to allow using section/nosection in KERNCONF
>Confidential: no
>Severity: non-critical
>Priority: low
>Responsible: freebsd-bugs
>State: open
>Quarter:
>Keywords:
>Date-Required:
>Class: change-request
>Submitter-Id: current-users
>Arrival-Date: Mon Feb 23 14:20:05 UTC 2009
>Closed-Date:
>Last-Modified:
>Originator: Kuan-Chung Chiu
>Release: 8.0-CURRENT
>Organization:
N/A
>Environment:
FreeBSD Zeta.twbbs.org 8.0-CURRENT FreeBSD 8.0-CURRENT #10: Fri Feb 20 20:42:28 CST 2009 root@Zeta.twbbs.org:/usr/obj/usr/src/sys/ZETA i386
>Description:
With this patch we can use section/nosection on KERNCONF to manipulate whole section instead of using many nooption/nodevice.
Modify GENERIC as follow:
# Debugging for use in -current
#DEBUG
..
# USB core support
section USB2
..
# FireWire support
section FireWire
..
And the customized kernconf:
include GENERIC
ident ZETA
nosection DEBUG
nosection USB2
nosection FireWire
this way we can customize KERNCONF more clean and easy.
>How-To-Repeat:
>Fix:
Patch attached with submission follows:
diff -ruN config.orig/config.h config/config.h
--- config.orig/config.h 2008-11-23 05:12:47.000000000 +0800
+++ config/config.h 2009-02-21 02:09:00.000000000 +0800
@@ -81,6 +81,7 @@
struct device {
int d_done; /* processed */
char *d_name; /* name of device (e.g. rk11) */
+ char *section;
#define UNKNOWN -2 /* -2 means not set yet */
STAILQ_ENTRY(device) d_next; /* Next one in list */
};
@@ -106,6 +107,7 @@
*/
struct cputype {
char *cpu_name;
+ char *section;
SLIST_ENTRY(cputype) cpu_next;
};
@@ -119,6 +121,7 @@
struct opt {
char *op_name;
char *op_value;
+ char *section;
int op_ownfile; /* true = own file, false = makefile */
SLIST_ENTRY(opt) op_next;
SLIST_ENTRY(opt) op_append;
diff -ruN config.orig/config.y config/config.y
--- config.orig/config.y 2008-11-23 05:12:47.000000000 +0800
+++ config/config.y 2009-02-21 02:09:00.000000000 +0800
@@ -22,6 +22,8 @@
%token NOOPTION
%token MAKEOPTIONS
%token NOMAKEOPTION
+%token SECTION
+%token NOSECTION
%token SEMICOLON
%token INCLUDE
%token FILES
@@ -29,6 +31,7 @@
%token <str> ID
%token <val> NUMBER
+%type <str> Sec_name
%type <str> Save_id
%type <str> Opt_value
%type <str> Dev
@@ -91,6 +94,8 @@
struct files_name_head fntab;
char errbuf[80];
int maxusers;
+char section_init[]="main";
+char *section=section_init;
#define ns(s) strdup(s)
int include(const char *, int);
@@ -126,6 +131,8 @@
;
Spec:
+ Section_spec SEMICOLON
+ |
Device_spec SEMICOLON
|
Config_spec SEMICOLON
@@ -147,6 +154,41 @@
error SEMICOLON
;
+Section_spec:
+ SECTION Sec_name { section = $2; } |
+ NOSECTION Sec_name {
+ struct cputype *cp, *cp2;
+ SLIST_FOREACH_SAFE(cp, &cputype, cpu_next, cp2) {
+ if (eq(cp->section, $2)){
+ SLIST_REMOVE(&cputype, cp, cputype, cpu_next);
+ free(cp);
+ }
+ }
+ struct opt *op, *op2;
+ SLIST_FOREACH_SAFE(op, &opt, op_next, op2){
+ if(eq(op->section, $2)){
+ SLIST_REMOVE(&opt, op, opt, op_next);
+ free(op->op_name);
+ free(op);
+ }
+ }
+ SLIST_FOREACH_SAFE(op, &mkopt, op_next, op2){
+ if(eq(op->section, $2)){
+ SLIST_REMOVE(&mkopt, op, opt, op_next);
+ free(op->op_name);
+ free(op);
+ }
+ }
+ struct device *dp, *dp2;
+ STAILQ_FOREACH_SAFE(dp, &dtab, d_next, dp2){
+ if (eq(dp->section, $2)){
+ STAILQ_REMOVE(&dtab, dp, device, d_next);
+ free(dp->d_name);
+ free(dp);
+ }
+ }
+ }
+
Config_spec:
ARCH Save_id {
if (machinename != NULL && !eq($2, machinename))
@@ -167,6 +209,7 @@
struct cputype *cp =
(struct cputype *)calloc(1, sizeof (struct cputype));
cp->cpu_name = $2;
+ cp->section=section;
SLIST_INSERT_HEAD(&cputype, cp, cpu_next);
} |
NOCPU Save_id {
@@ -249,6 +292,10 @@
ID { $$ = $1; }
;
+Sec_name:
+ ID { $$ = $1; }
+ ;
+
Mkopt_list:
Mkopt_list COMMA Mkoption
|
@@ -365,6 +412,7 @@
np = (struct device *) calloc(1, sizeof *np);
np->d_name = name;
+ np->section = section;
STAILQ_INSERT_TAIL(&dtab, np, d_next);
}
@@ -425,6 +473,7 @@
op->op_name = name;
op->op_ownfile = 0;
op->op_value = value;
+ op->section = section;
if (op2 != NULL) {
while (SLIST_NEXT(op2, op_append) != NULL)
op2 = SLIST_NEXT(op2, op_append);
diff -ruN config.orig/lang.l config/lang.l
--- config.orig/lang.l 2008-11-23 05:12:47.000000000 +0800
+++ config/lang.l 2009-02-21 02:09:00.000000000 +0800
@@ -81,6 +81,8 @@
{ "options", OPTIONS },
{ "nooption", NOOPTION },
{ "nooptions", NOOPTION },
+ { "section", SECTION },
+ { "nosection", NOSECTION },
{ "include", INCLUDE },
{ "files", FILES },
{ 0, 0 },
>Release-Note:
>Audit-Trail:
>Unformatted:
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200902231416.n1NEGwDD056049>
