[U-Boot-Users] [PATCH 1/2] Import config.h values into include/config.mk
Grant Likely
grant.likely at secretlab.ca
Fri Sep 7 00:32:38 CEST 2007
On 9/6/07, Wolfgang Denk <wd at denx.de> wrote:
> In message <20070905140015.29345.70726.stgit at trillian.cg.shawcable.net> you wrote:
> >
> > Use cpp and sed to postprocess config.h and import the defined values
> > into include/config.mk. This is to support conditional compile of modules
>
> Just a few comments....
>
> > +#
> > +# Sed script to parse CPP macros and generate output usable by make
>
> This will NOT work!
It WILL (but perhaps I should change the comment)! :-) See below.
>
> > +
> > +# Only process values prefixed with #define CONFIG_ or CFG_
> > +/^#define \(CONFIG_\|CFG_\)[A-Za-z0-9_]\+/ {
>
> Optional white space between ^ and # and between # and define.
> White space after define may be any sequence of space and TAB chars.
cpp scrubs this for me (see below)
>
> > + # Strip the #define prefix
> > + s/#define *//;
>
> Ditto.
cpp again (and again, see below)
>
> > + # Change to form CONFIG_*=VALUE
> > + s/ \+/=/;
>
> One or more spaces or tabs...
cpp... (are you detecting a pattern yet?) :-)
>
> > + # Drop trailing spaces
> > + s/ *$//;
>
> or tabs...
cpp...
>
> > + # drop quoted string values
> > + s/="\(.*\)"$/=\1/;
>
> What about embedded escaped " chars?
Okay, I do need to comment on this one. The only (sane) possibility
for embedded " chars is within a string. All embedded double quotes
inside a string will *already* be escaped. (if not, the compile will
break anyway)
>
> > + # Concatenate string values
> > + s/" *"//g;
> > + # Wrap unknown with quotes
>
> Ditto.
This should be safe also.
>
> > + s/=\(.*\?[^0-9].*\)$/=\"\1\"/;
> > + # Change empty properties and '1' properties to "y"
> > + s/=$/=y/;
> > + s/=1$/=y/;
> > + # print the line
>
> What about #defines between #if 0 / #endif pairs? Or
cpp...
>
> /*
> #define CONFIG_FOO
> */
>
> etc.
cpp...
>
>
> Parsing C preprocessor code is not that simple, I guess...
Indeed! I'm not even attempting this. Instead, I run common.h
through '$(CROSS_COMPILE}cpp -dM' and parse the output of that. By
letting cpp do the heavy lifting, all I need to parse is what 'cpp
-dM' produces with is scrubbed for formatting.
--
Grant Likely, B.Sc., P.Eng.
Secret Lab Technologies Ltd.
grant.likely at secretlab.ca
(403) 399-0195
More information about the U-Boot
mailing list