Date: Wed, 8 Oct 2003 10:12:12 -0400 (EDT) From: "Adam C. Migus" <adam@migus.org> To: "Bruce Evans" <bde@zeta.org.au> Cc: arch@freebsd.org Subject: Re: sys/conf/DEFAULT[S] Message-ID: <51310.204.254.155.35.1065622332.squirrel@mail.migus.org> In-Reply-To: <20031008212302.T4729@gamplex.bde.org> References: <XFMail.20030924170342.jhb@FreeBSD.org> <20030925092319.H5418@gamplex.bde.org><49939.204.254.155.35.1064593320.squirrel@mail.migus.org> <20030927080420.N18558@gamplex.bde.org> <49955.192.168.4.2.1065074430.squirrel@mail.migus.org> <20031008212302.T4729@gamplex.bde.org>
next in thread | previous in thread | raw e-mail | index | archive | help
Bruce Evans said:
> On Thu, 2 Oct 2003, Adam C. Migus wrote:
>
>> > On Fri, 26 Sep 2003, Adam C. Migus wrote:
>>
>> This patch works for me, please let me know if there's any
>> problems
>> with it or you'd like a PR.
>
> % ====
> //depot/user/amigus/freebsd-amigus/src/usr.sbin/config/config.y#1 -
> /src/p4/user/amigus/perforce.freebsd.org/freebsd-amigus/usr.sbin/config/config.y
> ====
> % @@ -118,6 +118,8 @@
> % |
> % Config_spec SEMICOLON
> % |
> % + Include
> % + |
> % SEMICOLON
> % |
> % error SEMICOLON
> % @@ -164,9 +166,7 @@
> % = {
> % hints = $2;
> % hintmode = 1;
> % - } |
> % - INCLUDE ID
> % - = { include($2, 0); };
> % + };
> %
> % System_spec:
> % CONFIG System_id System_parameter_list
> % @@ -265,6 +265,11 @@
> % rmdev($2);
> % } ;
> %
> % +Include:
> % + INCLUDE ID
> % + = { include($2, 0); };
> % +
> % +
> % %%
> %
> % void
>
> I found 1 problem with this: it doesn't require SEMICOLON after
> "INCLUDE ID", so parsing resumes after "ID" when the input stream
> is switched back to the includer. You can say things like
>
> include FOO device foo
>
> and then the "device foo" directive actually works. This can be
> considered a feature, but the following is not:
>
> include GENERIC.local
>
> at the end of GENERIC should be a syntax error, but it actually
> matches ID = GENERIC and includes GENERIC recursively, which gives
> a confusing error message. There would be a syntax error on
> switching
> back but config aborts before then. (Filenames other than single
> identifiers must be quoted to avoid problems like this. This is not
> very obvious since config was changed to not require quotes in most
> contexts.)
>
> Stefan's version requires SEMICOLON:
>
> % Index: src/usr.sbin/config/config.y
> %
> ===================================================================
> % RCS file: /usr/home/ncvs/src/usr.sbin/config/config.y,v
> % retrieving revision 1.61
> % diff -u -r1.61 config.y
> % --- src/usr.sbin/config/config.y 6 Jul 2003 02:00:52 -0000 1.61
> % +++ src/usr.sbin/config/config.y 27 Sep 2003 10:39:13 -0000
> % @@ -118,6 +118,9 @@
> % |
> % Config_spec SEMICOLON
> % |
> % + INCLUDE ID SEMICOLON
> % + = { include($2, 0); };
> % + |
> % SEMICOLON
> % |
> % error SEMICOLON
> % @@ -164,9 +167,7 @@
> % = {
> % hints = $2;
> % hintmode = 1;
> % - } |
> % - INCLUDE ID
> % - = { include($2, 0); };
> % + }
> %
> % System_spec:
> % CONFIG System_id System_parameter_list
>
> I lost your examples showing that this doesn't quite work. What is
> the
> problem with it?
>
> Another old bug is that using "include" defeats the point of the
> INCLUDE_CONFIG_FILE option (since included files aren't expanded).
>
> Bruce
>
Bruce,
I was half aware of this issue but viewed the bug/feature as a
'necessary evil' given the complications in dealing with it. Your
point about defeating the INCLUDE_CONFIG_FILE option, which I admit
I like but no longer use, furthers this point -- the 'include'
option is messy, period.
WRT Stefan's solution, simply nest two includes on the first line,
like so:
head -1 KERNEL
include SUB1
head -1 SUB1
include SUB2
This will cause config to fail in the same manner it did before,
with his patch.
If you'd like, I can work on a more elegant solution that addresses
the bugs you've outlined as well as (possibly, maybe) making
INCLUDE_CONFIG_FILE useful again, with 'include.'
Based on what I am reading I think people like 'include,' it's been
there for a while and I don't think it's going away, so, if I'm
correct fixing it right is the way to go.
Let me know if you guys are interested, if so I'll happily make
fixing /usr/sbin/config a side project. Otherwise I guess you'd be
left with pick the broken you like best, document it and leave it
that way or pull the include option entirely.
--
Adam - (http://people.migus.org/~amigus/)
Migus Dot Org - (http://www.migus.org/)
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?51310.204.254.155.35.1065622332.squirrel>
