summaryrefslogtreecommitdiffstats
path: root/util/kconfig/patches/0007-kconfig-Allow-KCONFIG_STRICT-outside-of-confdata.c.patch
blob: 8677be493693d3a416fbc7515dfff5d89a2a5c99 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
From af6c23be63d14860c8c1f0d9fcbc020f7c11d84d Mon Sep 17 00:00:00 2001
From: Stefan Reinauer <reinauer@chromium.org>
Date: Thu, 20 Aug 2015 11:19:34 -0700
Subject: [PATCH] kconfig: Allow KCONFIG_STRICT outside of confdata.c

To catch dependency errors in symbol.c (such as the ones
fixed by I51b4ee326f082c6a656a813ee5772e9c34f5c343) we need
to check for global kconfig warnings before saving config
files.

This patch will produce errors for wrong dependencies and
add catching of errors to conf, nconf and mconf. Sorry,
gconf users, you will have to wait.

Signed-off-by: Stefan Reinauer <stefan.reinauer@coreboot.org>
---
 util/kconfig/conf.c     | 10 ++++++++++
 util/kconfig/confdata.c |  6 +-----
 util/kconfig/lkc.h      |  3 +++
 util/kconfig/mconf.c    | 10 ++++++++++
 util/kconfig/nconf.c    | 13 +++++++++++++
 util/kconfig/qconf.cc   |  2 ++
 util/kconfig/symbol.c   |  1 +
 7 files changed, 40 insertions(+), 5 deletions(-)

Index: kconfig/conf.c
===================================================================
--- kconfig.orig/conf.c
+++ kconfig/conf.c
@@ -16,6 +16,8 @@
 
 #include "lkc.h"
 
+int kconfig_warnings = 0;
+
 static void conf(struct menu *menu);
 static void check_conf(struct menu *menu);
 
@@ -720,6 +722,7 @@ int main(int ac, char **av)
 	const char *progname = av[0];
 	int opt;
 	const char *name, *defconfig_file = NULL /* gcc uninit */;
+	char *env;
 	int no_conf_write = 0;
 
 	tty_stdio = isatty(0) && isatty(1);
@@ -827,6 +830,13 @@ int main(int ac, char **av)
 		break;
 	}
 
+	env = getenv("KCONFIG_STRICT");
+	if (env && *env && kconfig_warnings) {
+		fprintf(stderr, "\n*** ERROR: %d warnings encountered, and "
+			"warnings are errors.\n\n", kconfig_warnings);
+		exit(1);
+	}
+
 	if (sync_kconfig) {
 		name = getenv("KCONFIG_NOSILENTUPDATE");
 		if (name && *name) {
Index: kconfig/confdata.c
===================================================================
--- kconfig.orig/confdata.c
+++ kconfig/confdata.c
@@ -537,11 +537,7 @@ load:
 	free(line);
 	fclose(in);
 
-	name = getenv("KCONFIG_STRICT");
-	if (name && *name && conf_warnings) {
-		fprintf(stderr, "\nERROR: %d warnings encountered, and warnings are errors.\n\n", conf_warnings);
-		return 1;
-	}
+	kconfig_warnings += conf_warnings;
 
 	return 0;
 }
Index: kconfig/lkc.h
===================================================================
--- kconfig.orig/lkc.h
+++ kconfig/lkc.h
@@ -39,6 +39,9 @@ void zconf_nextfile(const char *name);
 int zconf_lineno(void);
 const char *zconf_curname(void);
 
+/* conf.c */
+extern int kconfig_warnings;
+
 /* confdata.c */
 const char *conf_get_configname(void);
 void set_all_choice_values(struct symbol *csym);
Index: kconfig/mconf.c
===================================================================
--- kconfig.orig/mconf.c
+++ kconfig/mconf.c
@@ -24,6 +24,8 @@
 
 #define JUMP_NB			9
 
+int kconfig_warnings = 0;
+
 static const char mconf_readme[] =
 "Overview\n"
 "--------\n"
@@ -943,6 +945,7 @@ static void conf_message_callback(const
 static int handle_exit(void)
 {
 	int res;
+	char *env;
 
 	save_and_exit = 1;
 	reset_subtitle();
@@ -957,6 +960,13 @@ static int handle_exit(void)
 
 	end_dialog(saved_x, saved_y);
 
+	env = getenv("KCONFIG_STRICT");
+	if (env && *env && kconfig_warnings) {
+		fprintf(stderr, "\n*** ERROR: %d warnings encountered, and "
+			"warnings are errors.\n\n", kconfig_warnings);
+		res = 2;
+	}
+
 	switch (res) {
 	case 0:
 		if (conf_write(filename)) {
Index: kconfig/nconf.c
===================================================================
--- kconfig.orig/nconf.c
+++ kconfig/nconf.c
@@ -15,6 +15,8 @@
 #include "nconf.h"
 #include <ctype.h>
 
+int kconfig_warnings = 0;
+
 static const char nconf_global_help[] =
 "Help windows\n"
 "------------\n"
@@ -645,6 +647,8 @@ static void set_config_filename(const ch
 static int do_exit(void)
 {
 	int res;
+	char *env;
+
 	if (!conf_get_changed()) {
 		global_exit = 1;
 		return 0;
@@ -660,6 +664,15 @@ static int do_exit(void)
 		return -1;
 	}
 
+	env = getenv("KCONFIG_STRICT");
+	if (env && *env && kconfig_warnings) {
+		btn_dialog(main_window,
+			"\nWarnings encountered, and warnings are errors.\n\n",
+			1,
+			"<OK>");
+		res = 2;
+	}
+
 	/* if we got here, the user really wants to exit */
 	switch (res) {
 	case 0:
Index: kconfig/qconf.cc
===================================================================
--- kconfig.orig/qconf.cc
+++ kconfig/qconf.cc
@@ -26,6 +26,8 @@
 #include "images.h"
 
 
+int kconfig_warnings = 0;
+
 static QApplication *configApp;
 static ConfigSettings *configSettings;
 
Index: kconfig/symbol.c
===================================================================
--- kconfig.orig/symbol.c
+++ kconfig/symbol.c
@@ -319,6 +319,7 @@ static void sym_warn_unmet_dep(struct sy
 			       "  Selected by [m]:\n");
 
 	fputs(str_get(&gs), stderr);
+	kconfig_warnings++;
 }
 
 void sym_calc_value(struct symbol *sym)