summaryrefslogtreecommitdiffstats
path: root/scripts/ptx-modifications/0001-conf-add-an-option-to-output-the-dependency-informat.patch
blob: 2508b93f932ccc48e23e33da009d50c88c687d69 (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
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;
 }