[PATCH] env: Allow string CONFIG options in the text environment

Rasmus Villemoes rasmus.villemoes at prevas.dk
Mon Nov 7 11:12:48 CET 2022


On 04/11/2022 20.08, Simon Glass wrote:
> Hi Holger,
> 
> On Fri, 4 Nov 2022 at 08:20, Holger Brunck
> <holger.brunck at hitachienergy.com> wrote:
>>
>> Hi Simon,
>> I got no time to try it yet but I have a general comment.
>>
>>>
>>> Sometimes it is useful to include a CONFIG option that contains a string.
>>> This is hard to do in general, since in many cases it is useful to have the quotes
>>> around the string so that, for example:
>>>
>>
>> wouldn't it be cleaner to always convert a Kconfig option which is defined as a string
>> to a string without the double quotes? If someone needs them he could explicitly
>> add them with
>>
>> bootcmd=run "CONFIG_BOARD_CMD"
>>
>> Because  in my case I have some options I use them to build together the
>> kernel command line I pass to the kernel.  Ok I could store them before in an
>> own variable and them use them with ${variable} in the command line. But
>> I think it would be cleaner to always convert a string defined in Kconfig in a
>> string without the quotes. What do you think?
> 
> Yes I would prefer that to. I'm not sure how to implement it though.
> Any thoughts?

I agree that special-casing the RHS containing a single qouted string is
a bad idea, it's really hard to understand and explain what the rules are.

Unfortunately, I don't think we can just create a separate version of
the config.h header where the quotes are removed and then as Holger
suggests rely on including the double quotes when needed, because then
the C preprocessor would see "CONFIG_BOARD_CMD" as a string literal,
inside which macro expansion is not done.

What we really want is to separate the two uses of the config values:
"control" and "data". One use is on conditional lines

#if IS_ENABLED(CONFIG_FOO)

and another is the case of substituting values into RHS values.

It is really convenient to use the C preprocessor for the former. But
for the latter, it's kind of overkill, and we could probably just as
well implement a simple perl script (or python or whatnot) that would do
what we want, including stripping of double quotes from string items
before substitution. But adding that as a pre-pre-processor step (only
doing substitution on lines not beginning with a #) would break down if
anybody uses #include directives, and it's also an annoying extra step
and extra script to maintain.

tl;dr: no, I don't have any good ideas.

Rasmus




More information about the U-Boot mailing list