Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

kconfig: WERROR unmet symbol dependency

When KCONFIG_WERROR env variable is set treat unmet direct
symbol dependency as a terminal condition (error).

Suggested-by: Stefan Reinauer <reinauer@google.com>
Signed-off-by: Sergey Senozhatsky <senozhatsky@chromium.org>
Signed-off-by: Masahiro Yamada <masahiroy@kernel.org>

authored by

Sergey Senozhatsky and committed by
Masahiro Yamada
15d3f766 5a602de9

+25 -5
+6
scripts/kconfig/conf.c
··· 827 827 break; 828 828 } 829 829 830 + if (conf_errors()) 831 + exit(1); 832 + 830 833 if (sync_kconfig) { 831 834 name = getenv("KCONFIG_NOSILENTUPDATE"); 832 835 if (name && *name) { ··· 892 889 default: 893 890 break; 894 891 } 892 + 893 + if (sym_dep_errors()) 894 + exit(1); 895 895 896 896 if (input_mode == savedefconfig) { 897 897 if (conf_write_defconfig(defconfig_file)) {
+8 -5
scripts/kconfig/confdata.c
··· 155 155 static const char *conf_filename; 156 156 static int conf_lineno, conf_warnings; 157 157 158 + bool conf_errors(void) 159 + { 160 + if (conf_warnings) 161 + return getenv("KCONFIG_WERROR"); 162 + return false; 163 + } 164 + 158 165 static void conf_warning(const char *fmt, ...) 159 166 { 160 167 va_list ap; ··· 372 365 char *p, *val; 373 366 struct symbol *sym; 374 367 int i, def_flags; 375 - const char *warn_unknown, *werror, *sym_name; 368 + const char *warn_unknown, *sym_name; 376 369 377 370 warn_unknown = getenv("KCONFIG_WARN_UNKNOWN_SYMBOLS"); 378 - werror = getenv("KCONFIG_WERROR"); 379 371 if (name) { 380 372 in = zconf_fopen(name); 381 373 } else { ··· 530 524 } 531 525 free(line); 532 526 fclose(in); 533 - 534 - if (conf_warnings && werror) 535 - exit(1); 536 527 537 528 return 0; 538 529 }
+2
scripts/kconfig/lkc_proto.h
··· 15 15 bool conf_get_changed(void); 16 16 void conf_set_changed_callback(void (*fn)(void)); 17 17 void conf_set_message_callback(void (*fn)(const char *s)); 18 + bool conf_errors(void); 18 19 19 20 /* symbol.c */ 20 21 extern struct symbol * symbol_hash[SYMBOL_HASHSIZE]; ··· 26 25 struct symbol ** sym_re_search(const char *pattern); 27 26 const char * sym_type_name(enum symbol_type type); 28 27 void sym_calc_value(struct symbol *sym); 28 + bool sym_dep_errors(void); 29 29 enum symbol_type sym_get_type(struct symbol *sym); 30 30 bool sym_tristate_within_range(struct symbol *sym,tristate tri); 31 31 bool sym_set_tristate_value(struct symbol *sym,tristate tri);
+9
scripts/kconfig/symbol.c
··· 31 31 32 32 struct symbol *modules_sym; 33 33 static tristate modules_val; 34 + static int sym_warnings; 34 35 35 36 enum symbol_type sym_get_type(struct symbol *sym) 36 37 { ··· 312 311 " Selected by [m]:\n"); 313 312 314 313 fputs(str_get(&gs), stderr); 314 + sym_warnings++; 315 + } 316 + 317 + bool sym_dep_errors(void) 318 + { 319 + if (sym_warnings) 320 + return getenv("KCONFIG_WERROR"); 321 + return false; 315 322 } 316 323 317 324 void sym_calc_value(struct symbol *sym)