aboutsummaryrefslogtreecommitdiff
path: root/scripts/parse_kconfig/parse.c
diff options
context:
space:
mode:
authorKarel Kočí <cynerd@email.cz>2015-04-30 16:22:01 +0200
committerKarel Kočí <cynerd@email.cz>2015-04-30 16:22:01 +0200
commitcd1b4f5e954f925bb7689189a5c2fd5fef52d745 (patch)
treed73567badc8e09787a69b4033291c37c8f0eb880 /scripts/parse_kconfig/parse.c
parent94a0f92e1a36d68c95781e916a94a377b7081d2f (diff)
downloadlinux-conf-perf-cd1b4f5e954f925bb7689189a5c2fd5fef52d745.tar.gz
linux-conf-perf-cd1b4f5e954f925bb7689189a5c2fd5fef52d745.tar.bz2
linux-conf-perf-cd1b4f5e954f925bb7689189a5c2fd5fef52d745.zip
parse_kconfig changes before more changes come
This is commit that breaks parse_kconfig program...
Diffstat (limited to 'scripts/parse_kconfig/parse.c')
-rw-r--r--scripts/parse_kconfig/parse.c100
1 files changed, 62 insertions, 38 deletions
diff --git a/scripts/parse_kconfig/parse.c b/scripts/parse_kconfig/parse.c
index e4e9ec5..e464159 100644
--- a/scripts/parse_kconfig/parse.c
+++ b/scripts/parse_kconfig/parse.c
@@ -4,6 +4,7 @@
#include <locale.h>
#include <stdbool.h>
#include <libintl.h>
+
#include <kconfig/lkc.h>
#include "symlist.h"
#include "output.h"
@@ -52,14 +53,13 @@ int main(int argc, char **argv) {
gsymlist = symlist_create();
- build_symlist();
- cpy_dep();
-
char *rules_file, *symbol_map_file;
asprintf(&rules_file, "%s/%s", folder, DEFAULT_RULES_FILE);
asprintf(&symbol_map_file, "%s/%s", folder, DEFAULT_SYMBOL_MAP_FILE);
- fprint_rules(gsymlist, rules_file);
- fprint_symbol_map(gsymlist, symbol_map_file);
+ output_init(rules_file, symbol_map_file);
+
+ build_symlist();
+
return 0;
}
@@ -68,23 +68,17 @@ void build_symlist() {
struct symbol *sym;
for_all_symbols(i, sym) {
if (sym->type == S_BOOLEAN || sym->type == S_TRISTATE) {
- if (sym->name != NULL) {
- symlist_add(gsymlist, sym->name);
- } else {
+ if (sym->name == NULL) {
sym->name = malloc((9 + 7) * sizeof(char));
sprintf(sym->name, "NONAMEGEN%d", noname_num++);
- symlist_add(gsymlist, sym->name);
}
+ symlist_add(gsymlist, sym->name);
}
struct property *prop;
for_all_prompts(sym, prop) {
gsymlist->array[gsymlist->pos - 1].prompt = true;
break;
}
- for_all_defaults(sym, prop) {
- gsymlist->array[gsymlist->pos - 1].def = true;
- break;
- }
}
}
@@ -92,33 +86,63 @@ void cpy_dep() {
int i;
struct symbol *sym;
struct symlist_el *el;
+ unsigned el_id;
for_all_symbols(i, sym) {
if ((sym->type == S_BOOLEAN || sym->type == S_TRISTATE)) {
- el = symlist_find(gsymlist, sym->name);
- Iprintf("working: %s(%d)\n", sym->name, el->id);
-
- if (sym->dir_dep.expr != NULL) {
- if (verbose_level > 3)
- printf_original(gsymlist, sym->dir_dep.expr);
- el->be =
- kconfig_cnfexpr(gsymlist, false, el->def, sym,
- sym->dir_dep.expr);
- Iprintf("Direct:\n");
- if (verbose_level > 2)
- cnf_printf(el->be);
- } else
- el->be = NULL;
- if (sym->rev_dep.expr != NULL) {
- if (verbose_level > 3)
- printf_original(gsymlist, sym->rev_dep.expr);
- el->re_be =
- kconfig_cnfexpr(gsymlist, true, el->def, sym,
- sym->rev_dep.expr);
- Iprintf("Revers:\n");
- if (verbose_level > 2)
- cnf_printf(el->re_be);
- } else
- el->re_be = NULL;
+ el_id = symlist_id(gsymlist, sym->name);
+ el = &(gsymlist->array[el_id - 1]);
+
+ for_all_defaults(sym, prop) {
+ gsymlist->array[gsymlist->pos - 1].def = true;
+ struct cnfexpr *def =
+ kconfig_cnfexpr(gsymlist, prop->expr);
+ if (el->def == NULL) {
+ gsymlist->array[gsymlist->pos - 1].def = def;
+ } else {
+ gsymlist->array[gsymlist->pos - 1].def =
+ cnfexpr_or(gsymlist,
+ gsymlist->array[gsymlist->pos - 1].def,
+ def);
+ }
+ }
+ if (el->def == NULL)
+ el->cnfexpr_false(gsymlist);
+ if (sym->dir_dep.expr != NULL)
+ el->dep = kconfig_cnfexpr(gsymlist, sym->dir_dep.expr);
+ else
+ el->dep = cnfexpr_true(gsymlist);
+ if (sym->rev_dep.expr != NULL)
+ el->re_be = kconfig_cnfexpr(gsymlist, sym->rev_dep.expr);
+ else
+ el->rev_dep = cnfexpr_false(gsymlist);
+
+ if (el->prompt) {
+ struct cnfexpr *pw =
+ cnfexpr_and(gsymlist,
+ cnfexpr_or(gsymlist,
+ cnfexpr_not(gsymlist,
+ cnfexpr_sym
+ (gsymlist,
+ sym->name)),
+ el->dep), cnfexpr_or(gsymlist,
+ cnfexpr_not
+ (gsymlist,
+ el->
+ rev_dep),
+ cnfexpr_sym
+ (gsymlist,
+ sym->
+ name)));
+ switch (pw->type) {
+ case CT_EXPR:
+ break;
+ case CT_TRUE:
+ break;
+ case CT_FALSE:
+ break;
+ }
+ } else {
+ }
}
}
}