Re: [PATCHv2] kconfig: add warn-unknown-symbols sanity check

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Thu, Aug 31, 2023 at 11:15 PM Sergey Senozhatsky
<senozhatsky@xxxxxxxxxxxx> wrote:
>
> Introduce KCONFIG_WARN_UNKNOWN_SYMBOLS environment variable,
> which makes Kconfig warn about unknown config symbols.
>
> This is especially useful for continuous kernel uprevs when
> some symbols can be either removed or renamed between kernel
> releases (which can go unnoticed otherwise).
>
> By default KCONFIG_WARN_UNKNOWN_SYMBOLS generates warnings,
> which are non-terminal. There is an additional environment
> variable KCONFIG_WERROR that overrides this behaviour and
> turns warnings into errors.
>
> Signed-off-by: Sergey Senozhatsky <senozhatsky@xxxxxxxxxxxx>


Applied to linux-kbuild. Thanks.




> ---
>  Documentation/kbuild/kconfig.rst |  9 +++++++++
>  scripts/kconfig/confdata.c       | 21 +++++++++++++++++++--
>  2 files changed, 28 insertions(+), 2 deletions(-)
>
> diff --git a/Documentation/kbuild/kconfig.rst b/Documentation/kbuild/kconfig.rst
> index 6530ecd99da3..c946eb44bd13 100644
> --- a/Documentation/kbuild/kconfig.rst
> +++ b/Documentation/kbuild/kconfig.rst
> @@ -56,6 +56,15 @@ KCONFIG_OVERWRITECONFIG
>  If you set KCONFIG_OVERWRITECONFIG in the environment, Kconfig will not
>  break symlinks when .config is a symlink to somewhere else.
>
> +KCONFIG_WARN_UNKNOWN_SYMBOLS
> +----------------------------
> +This environment variable makes Kconfig warn about all unrecognized
> +symbols in the config input.
> +
> +KCONFIG_WERROR
> +--------------
> +If set, Kconfig treats warnings as errors.
> +
>  `CONFIG_`
>  ---------
>  If you set `CONFIG_` in the environment, Kconfig will prefix all symbols
> diff --git a/scripts/kconfig/confdata.c b/scripts/kconfig/confdata.c
> index 992575f1e976..4a6811d77d18 100644
> --- a/scripts/kconfig/confdata.c
> +++ b/scripts/kconfig/confdata.c
> @@ -349,7 +349,11 @@ int conf_read_simple(const char *name, int def)
>         char *p, *p2;
>         struct symbol *sym;
>         int i, def_flags;
> +       const char *warn_unknown;
> +       const char *werror;
>
> +       warn_unknown = getenv("KCONFIG_WARN_UNKNOWN_SYMBOLS");
> +       werror = getenv("KCONFIG_WERROR");
>         if (name) {
>                 in = zconf_fopen(name);
>         } else {
> @@ -437,6 +441,10 @@ int conf_read_simple(const char *name, int def)
>                         if (def == S_DEF_USER) {
>                                 sym = sym_find(line + 2 + strlen(CONFIG_));
>                                 if (!sym) {
> +                                       if (warn_unknown)
> +                                               conf_warning("unknown symbol: %s",
> +                                                            line + 2 + strlen(CONFIG_));
> +
>                                         conf_set_changed(true);
>                                         continue;
>                                 }
> @@ -471,7 +479,7 @@ int conf_read_simple(const char *name, int def)
>
>                         sym = sym_find(line + strlen(CONFIG_));
>                         if (!sym) {
> -                               if (def == S_DEF_AUTO)
> +                               if (def == S_DEF_AUTO) {
>                                         /*
>                                          * Reading from include/config/auto.conf
>                                          * If CONFIG_FOO previously existed in
> @@ -479,8 +487,13 @@ int conf_read_simple(const char *name, int def)
>                                          * include/config/FOO must be touched.
>                                          */
>                                         conf_touch_dep(line + strlen(CONFIG_));
> -                               else
> +                               } else {
> +                                       if (warn_unknown)
> +                                               conf_warning("unknown symbol: %s",
> +                                                            line + strlen(CONFIG_));
> +
>                                         conf_set_changed(true);
> +                               }
>                                 continue;
>                         }
>
> @@ -519,6 +532,10 @@ int conf_read_simple(const char *name, int def)
>         }
>         free(line);
>         fclose(in);
> +
> +       if (conf_warnings && werror)
> +               exit(1);
> +
>         return 0;
>  }
>
> --
> 2.42.0.rc2.253.gd59a3bf2b4-goog
>


-- 
Best Regards
Masahiro Yamada




[Index of Archives]     [Kernel Newbies]     [Security]     [Netfilter]     [Bugtraq]     [Linux FS]     [Yosemite Forum]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Samba]     [Video 4 Linux]     [Device Mapper]     [Linux Resources]

  Powered by Linux