diff mbox series

[2/2] kconfig: Make comments look different than menus in .config

Message ID 20211213100043.45645-3-arielmarcovitch@gmail.com (mailing list archive)
State New, archived
Headers show
Series kconfig: Improve comment blocks in the .config file | expand

Commit Message

Ariel Marcovitch Dec. 13, 2021, 10 a.m. UTC
Currently, the same code that handles menus in the write to .config
handles comments as well. That's why comments look exactly like menus in
the .config except for the 'end of menu' comments that appear only for
menus. This makes sense because sometimes comments are used as sort of
submenus. However for the other cases, it looks kinda weird because one
might attempt to look for the 'end of menu' for comments as well and be
very confused.

Make comments look different than menus. For the following:
```kconfig
menu "Stuff"

config FOO
	def_bool y

comment "Some comment"

config BAR
	def_bool n

endmenu
```

The .config will look like this:
```
 #
 # Stuff
 #
 CONFIG_FOO=y

 ### Some comment
 # CONFIG_BAR is not defined
 # end of Stuff

```

Signed-off-by: Ariel Marcovitch <arielmarcovitch@gmail.com>
---
 scripts/kconfig/confdata.c | 14 ++++++++++----
 1 file changed, 10 insertions(+), 4 deletions(-)

Comments

Masahiro Yamada Jan. 18, 2022, 6:25 p.m. UTC | #1
On Mon, Dec 13, 2021 at 7:01 PM Ariel Marcovitch
<arielmarcovitch@gmail.com> wrote:
>
> Currently, the same code that handles menus in the write to .config
> handles comments as well. That's why comments look exactly like menus in
> the .config except for the 'end of menu' comments that appear only for
> menus. This makes sense because sometimes comments are used as sort of
> submenus. However for the other cases, it looks kinda weird because one
> might attempt to look for the 'end of menu' for comments as well and be
> very confused.
>
> Make comments look different than menus. For the following:
> ```kconfig
> menu "Stuff"
>
> config FOO
>         def_bool y
>
> comment "Some comment"
>
> config BAR
>         def_bool n
>
> endmenu
> ```
>
> The .config will look like this:
> ```
>  #
>  # Stuff
>  #
>  CONFIG_FOO=y
>
>  ### Some comment
>  # CONFIG_BAR is not defined
>  # end of Stuff
>
> ```
>
> Signed-off-by: Ariel Marcovitch <arielmarcovitch@gmail.com>
> ---
>  scripts/kconfig/confdata.c | 14 ++++++++++----
>  1 file changed, 10 insertions(+), 4 deletions(-)
>
> diff --git a/scripts/kconfig/confdata.c b/scripts/kconfig/confdata.c
> index 9f2c22f46ee0..d3ec1ad67d92 100644
> --- a/scripts/kconfig/confdata.c
> +++ b/scripts/kconfig/confdata.c
> @@ -880,10 +880,16 @@ int conf_write(const char *name)
>
>                         if (type == P_MENU || type == P_COMMENT) {
>                                 str = menu_get_prompt(menu);
> -                               fprintf(out, "\n"
> -                                       "#\n"
> -                                       "# %s\n"
> -                                       "#\n", str);
> +
> +                               if (type == P_MENU)
> +                                       fprintf(out, "\n"
> +                                               "#\n"
> +                                               "# %s\n"
> +                                               "#\n", str);
> +                               else
> +                                       fprintf(out, "\n"
> +                                               "### %s\n", str);
> +
>                                 need_newline = false;
>                         }
>                 }
> --
> 2.25.1
>


Since "# CONFIG... is not set" looks like a comment,
I am not sure if this improves the visibility.

I will not pick up this until I find out what a really good format is.
Ariel Marcovitch Feb. 18, 2022, 6:55 p.m. UTC | #2
On 18/01/2022 20:25, Masahiro Yamada wrote:
> On Mon, Dec 13, 2021 at 7:01 PM Ariel Marcovitch
> <arielmarcovitch@gmail.com> wrote:
>> Currently, the same code that handles menus in the write to .config
>> handles comments as well. That's why comments look exactly like menus in
>> the .config except for the 'end of menu' comments that appear only for
>> menus. This makes sense because sometimes comments are used as sort of
>> submenus. However for the other cases, it looks kinda weird because one
>> might attempt to look for the 'end of menu' for comments as well and be
>> very confused.
>>
>> Make comments look different than menus. For the following:
>> ```kconfig
>> menu "Stuff"
>>
>> config FOO
>>          def_bool y
>>
>> comment "Some comment"
>>
>> config BAR
>>          def_bool n
>>
>> endmenu
>> ```
>>
>> The .config will look like this:
>> ```
>>   #
>>   # Stuff
>>   #
>>   CONFIG_FOO=y
>>
>>   ### Some comment
>>   # CONFIG_BAR is not defined
>>   # end of Stuff
>>
>> ```
>>
>> Signed-off-by: Ariel Marcovitch <arielmarcovitch@gmail.com>
>> ---
>>   scripts/kconfig/confdata.c | 14 ++++++++++----
>>   1 file changed, 10 insertions(+), 4 deletions(-)
>>
>> diff --git a/scripts/kconfig/confdata.c b/scripts/kconfig/confdata.c
>> index 9f2c22f46ee0..d3ec1ad67d92 100644
>> --- a/scripts/kconfig/confdata.c
>> +++ b/scripts/kconfig/confdata.c
>> @@ -880,10 +880,16 @@ int conf_write(const char *name)
>>
>>                          if (type == P_MENU || type == P_COMMENT) {
>>                                  str = menu_get_prompt(menu);
>> -                               fprintf(out, "\n"
>> -                                       "#\n"
>> -                                       "# %s\n"
>> -                                       "#\n", str);
>> +
>> +                               if (type == P_MENU)
>> +                                       fprintf(out, "\n"
>> +                                               "#\n"
>> +                                               "# %s\n"
>> +                                               "#\n", str);
>> +                               else
>> +                                       fprintf(out, "\n"
>> +                                               "### %s\n", str);
>> +
>>                                  need_newline = false;
>>                          }
>>                  }
>> --
>> 2.25.1
>>
>
> Since "# CONFIG... is not set" looks like a comment,
> I am not sure if this improves the visibility.

I agree that adding another '#' signs to the real comments doesn't solve 
the real
problem here, being that kconfig uses comments to save actual information

I guess this is for being able to check for a config in shell script 
with [[ -n $CONFIG_FOO ]]?

Although if that's the case, leaving the config empty has the same 
effect, no? And then
we can add a comment to the end of the definition stating that the 
config is unset.
Something like this:

CONFIG_FOO=y
CONFIG_BAR= # is not set

It may break scripts doing something like this:

: ${CONFIG_FOO=?Config FOO must be defined}

But they can be changed to use ':?' instead (which checks for non-zero 
length string
rather than whether the variable is defined or not)

Actually, now that I think of it, it might even be an improvement for 
scripts to be able to tell whether a config isn't defined or whether it 
has an 'n' value

Anyway, I'm absolutely fine with delaying this patch until we find a 
solution

>
> I will not pick up this until I find out what a really good format is.
Thanks!
Masahiro Yamada Feb. 20, 2022, 4:17 a.m. UTC | #3
On Sat, Feb 19, 2022 at 3:55 AM Ariel Marcovitch
<arielmarcovitch@gmail.com> wrote:
>
> On 18/01/2022 20:25, Masahiro Yamada wrote:
> > On Mon, Dec 13, 2021 at 7:01 PM Ariel Marcovitch
> > <arielmarcovitch@gmail.com> wrote:
> >> Currently, the same code that handles menus in the write to .config
> >> handles comments as well. That's why comments look exactly like menus in
> >> the .config except for the 'end of menu' comments that appear only for
> >> menus. This makes sense because sometimes comments are used as sort of
> >> submenus. However for the other cases, it looks kinda weird because one
> >> might attempt to look for the 'end of menu' for comments as well and be
> >> very confused.
> >>
> >> Make comments look different than menus. For the following:
> >> ```kconfig
> >> menu "Stuff"
> >>
> >> config FOO
> >>          def_bool y
> >>
> >> comment "Some comment"
> >>
> >> config BAR
> >>          def_bool n
> >>
> >> endmenu
> >> ```
> >>
> >> The .config will look like this:
> >> ```
> >>   #
> >>   # Stuff
> >>   #
> >>   CONFIG_FOO=y
> >>
> >>   ### Some comment
> >>   # CONFIG_BAR is not defined
> >>   # end of Stuff
> >>
> >> ```
> >>
> >> Signed-off-by: Ariel Marcovitch <arielmarcovitch@gmail.com>
> >> ---
> >>   scripts/kconfig/confdata.c | 14 ++++++++++----
> >>   1 file changed, 10 insertions(+), 4 deletions(-)
> >>
> >> diff --git a/scripts/kconfig/confdata.c b/scripts/kconfig/confdata.c
> >> index 9f2c22f46ee0..d3ec1ad67d92 100644
> >> --- a/scripts/kconfig/confdata.c
> >> +++ b/scripts/kconfig/confdata.c
> >> @@ -880,10 +880,16 @@ int conf_write(const char *name)
> >>
> >>                          if (type == P_MENU || type == P_COMMENT) {
> >>                                  str = menu_get_prompt(menu);
> >> -                               fprintf(out, "\n"
> >> -                                       "#\n"
> >> -                                       "# %s\n"
> >> -                                       "#\n", str);
> >> +
> >> +                               if (type == P_MENU)
> >> +                                       fprintf(out, "\n"
> >> +                                               "#\n"
> >> +                                               "# %s\n"
> >> +                                               "#\n", str);
> >> +                               else
> >> +                                       fprintf(out, "\n"
> >> +                                               "### %s\n", str);
> >> +
> >>                                  need_newline = false;
> >>                          }
> >>                  }
> >> --
> >> 2.25.1
> >>
> >
> > Since "# CONFIG... is not set" looks like a comment,
> > I am not sure if this improves the visibility.
>
> I agree that adding another '#' signs to the real comments doesn't solve
> the real
> problem here, being that kconfig uses comments to save actual information
>
> I guess this is for being able to check for a config in shell script
> with [[ -n $CONFIG_FOO ]]?

Maybe.
Also   "ifdef CONFIG_FOO" in Makefile.

In the old days, the .config was directly included.

These days, the .config is used for the purpose of
saving the configuration, and include/config/auto.conf



>
> Although if that's the case, leaving the config empty has the same
> effect, no? And then
> we can add a comment to the end of the definition stating that the
> config is unset.
> Something like this:
>
> CONFIG_FOO=y
> CONFIG_BAR= # is not set

The most natural expression is:

    CONFIG_BAR=n
diff mbox series

Patch

diff --git a/scripts/kconfig/confdata.c b/scripts/kconfig/confdata.c
index 9f2c22f46ee0..d3ec1ad67d92 100644
--- a/scripts/kconfig/confdata.c
+++ b/scripts/kconfig/confdata.c
@@ -880,10 +880,16 @@  int conf_write(const char *name)
 
 			if (type == P_MENU || type == P_COMMENT) {
 				str = menu_get_prompt(menu);
-				fprintf(out, "\n"
-					"#\n"
-					"# %s\n"
-					"#\n", str);
+
+				if (type == P_MENU)
+					fprintf(out, "\n"
+						"#\n"
+						"# %s\n"
+						"#\n", str);
+				else
+					fprintf(out, "\n"
+						"### %s\n", str);
+
 				need_newline = false;
 			}
 		}