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