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
|
From: Michael Olbrich <m.olbrich@pengutronix.de>
Date: Mon, 1 Nov 2010 19:49:21 +0100
Subject: [PATCH] conf: add an option to output the dependency information
Signed-off-by: Michael Olbrich <m.olbrich@pengutronix.de>
---
scripts/kconfig/conf.c | 41 +++++++++++++++++++++++++++++++++++++++++
1 file changed, 41 insertions(+)
diff --git a/scripts/kconfig/conf.c b/scripts/kconfig/conf.c
index 866369f10ff8..46c6e1bb5910 100644
--- a/scripts/kconfig/conf.c
+++ b/scripts/kconfig/conf.c
@@ -35,6 +35,7 @@ enum input_mode {
savedefconfig,
listnewconfig,
olddefconfig,
+ writedepend,
} input_mode = oldaskconfig;
static int indent = 1;
@@ -447,6 +448,36 @@ static void check_conf(struct menu *menu)
check_conf(child);
}
+static void create_dep_output()
+{
+ int i;
+ bool hit;
+ struct symbol *sym;
+ struct property *prop;
+
+ for_all_symbols(i, sym) {
+ if ((sym_get_tristate_value(sym) == no) || !sym->name)
+ continue;
+
+ hit = 0;
+ for (prop = sym->prop; prop; prop = prop->next) {
+ if (prop->type == P_SELECT && expr_calc_value(prop->visible.expr)) {
+ hit=1;
+ break;
+ }
+ }
+ if (!hit)
+ continue;
+ printf("DEP:%s", sym->name);
+ for (prop = sym->prop; prop; prop = prop->next) {
+ if (prop->type == P_SELECT && expr_calc_value(prop->visible.expr)) {
+ printf(":%s", prop->expr->left.sym->name);
+ }
+ }
+ printf("\n");
+ }
+}
+
static struct option long_opts[] = {
{"oldaskconfig", no_argument, NULL, oldaskconfig},
{"oldconfig", no_argument, NULL, oldconfig},
@@ -466,6 +497,7 @@ static struct option long_opts[] = {
* value but not 'n') with the counter-intuitive name.
*/
{"oldnoconfig", no_argument, NULL, olddefconfig},
+ {"writedepend", no_argument, NULL, writedepend},
{NULL, 0, NULL, 0}
};
@@ -495,6 +527,7 @@ int main(int ac, char **av)
int opt;
const char *name, *defconfig_file = NULL /* gcc uninit */;
struct stat tmpstat;
+ int dep_output = 0;
setlocale(LC_ALL, "");
bindtextdomain(PACKAGE, LOCALEDIR);
@@ -507,6 +540,10 @@ int main(int ac, char **av)
conf_set_message_callback(NULL);
continue;
}
+ if (opt == writedepend) {
+ dep_output = 1;
+ continue;
+ }
input_mode = (enum input_mode)opt;
switch (opt) {
case silentoldconfig:
@@ -710,6 +747,10 @@ int main(int ac, char **av)
exit(1);
}
}
+
+ if (dep_output)
+ create_dep_output();
+
return 0;
}
|