Hi Roman. I have added a few comments to expr.h with the intent of making it a bit easier to hack on the kconfig backend. Can I request you to review the comments and add the few missing bits. I deleted one unused flag (SYMBOL_PRINTED) - if you have future plans with it let me now and I will re-add it. Thanks, Sam diff --git a/scripts/kconfig/expr.h b/scripts/kconfig/expr.h index a195986..c2153a1 100644 --- a/scripts/kconfig/expr.h +++ b/scripts/kconfig/expr.h @@ -63,9 +63,13 @@ enum symbol_type { S_UNKNOWN, S_BOOLEAN, S_TRISTATE, S_INT, S_HEX, S_STRING, S_OTHER }; +/* enum values are used as index to symbol.def[] */ enum { S_DEF_USER, /* main user value */ - S_DEF_AUTO, + S_DEF_AUTO, /* values read from auto.conf */ + S_DEF_DEF3, /* Reserved for UI usage */ + S_DEF_DEF4, /* Reserved for UI usage */ + S_DEF_COUNT }; struct symbol { @@ -73,7 +77,7 @@ struct symbol { char *name; enum symbol_type type; struct symbol_value curr; - struct symbol_value def[4]; + struct symbol_value def[S_DEF_COUNT]; tristate visible; int flags; struct property *prop; @@ -82,42 +86,66 @@ struct symbol { #define for_all_symbols(i, sym) for (i = 0; i < 257; i++) for (sym = symbol_hash[i]; sym; sym = sym->next) if (sym->type != S_OTHER) -#define SYMBOL_CONST 0x0001 -#define SYMBOL_CHECK 0x0008 -#define SYMBOL_CHOICE 0x0010 -#define SYMBOL_CHOICEVAL 0x0020 -#define SYMBOL_PRINTED 0x0040 -#define SYMBOL_VALID 0x0080 -#define SYMBOL_OPTIONAL 0x0100 -#define SYMBOL_WRITE 0x0200 -#define SYMBOL_CHANGED 0x0400 -#define SYMBOL_AUTO 0x1000 -#define SYMBOL_CHECKED 0x2000 -#define SYMBOL_WARNED 0x8000 -#define SYMBOL_DEF 0x10000 -#define SYMBOL_DEF_USER 0x10000 -#define SYMBOL_DEF_AUTO 0x20000 -#define SYMBOL_DEF3 0x40000 -#define SYMBOL_DEF4 0x80000 +/* symbol.flags bits */ +#define SYMBOL_CONST 0x0001 /* symbol is const */ +#define SYMBOL_SPARE_2 0x0002 +#define SYMBOL_SPARE_4 0x0004 +#define SYMBOL_CHECK 0x0008 /* used during dependency checking */ +#define SYMBOL_CHOICE 0x0010 /* symbol represent start of a choice block (null name) */ +#define SYMBOL_CHOICEVAL 0x0020 /* symbol is used as a value in a choice block */ +#define SYMBOL_SPARE_40 0x0040 +#define SYMBOL_VALID 0x0080 /* set when symbol.curr is calculated (and valid) */ +#define SYMBOL_OPTIONAL 0x0100 /* a choice marked optional can have all values equal 'n' + * Also used for menus ? */ +#define SYMBOL_WRITE 0x0200 /* ? */ +#define SYMBOL_CHANGED 0x0400 /* ? */ +#define SYMBOL_AUTO 0x1000 /* value has been assing by kconfig (from environment variable or modules) */ +#define SYMBOL_CHECKED 0x2000 /* used during dependency checking */ +#define SYMBOL_WARNED 0x8000 /* set when a warning has been issued for this symbol */ +#define SYMBOL_DEF 0x10000 /* First bit of SYMBOL_DEF used to support << */ +#define SYMBOL_DEF_USER 0x10000 /* Data in symbol.def[S_DEF_USER] are valid */ +#define SYMBOL_DEF_AUTO 0x20000 /* Data in symbol.def[S_DEF_AUTO] are valid */ +#define SYMBOL_DEF3 0x40000 /* Data in symbol.def[S_DEF_DEF3] are valid */ +#define SYMBOL_DEF4 0x80000 /* Data in symbol.def[S_DEF_DEF4] are valid */ #define SYMBOL_MAXLENGTH 256 #define SYMBOL_HASHSIZE 257 #define SYMBOL_HASHMASK 0xff +/* A property represent the config options that can be associated + * with a config "symbol". + * Sample: + * config FOO + * default y + * prompt "foo prompt" + * select BAR + * config BAZ + * int "BAZ Value" + * range 1..255 + */ enum prop_type { - P_UNKNOWN, P_PROMPT, P_COMMENT, P_MENU, P_DEFAULT, P_CHOICE, P_SELECT, P_RANGE + P_UNKNOWN, + P_PROMPT, /* prompt "foo prompt" or "BAZ Value" */ + P_COMMENT, /* A text associated with a comment (the prompt of the comment) */ + P_MENU, /* The prompt associated with a menuconfig option */ + P_DEFAULT, /* default y */ + P_CHOICE, /* ? */ + P_SELECT, /* select BAR */ + P_RANGE /* range 7..100 (for a symbol) */ }; struct property { - struct property *next; - struct symbol *sym; - enum prop_type type; - const char *text; + struct property *next; /* next property in chained list - null if last */ + struct symbol *sym; /* the symbol for which the properti is associated */ + enum prop_type type; /* type of property */ + const char *text; /* the prompt value - P_PROMPT, P_MENU, P_COMMENT */ struct expr_value visible; - struct expr *expr; - struct menu *menu; - struct file *file; - int lineno; + struct expr *expr; /* the optional conditional part of the property */ + struct menu *menu; /* the menu the property are associated with + * valid for: P_SELECT, P_RANGE, P_CHOICE, + * P_PROMPT, P_DEFAULT, P_MENU, P_COMMENT */ + struct file *file; /* In what file was this property defined */ + int lineno; /* At what lineno was this property defined */ }; #define for_all_properties(sym, st, tok) \ diff --git a/scripts/kconfig/gconf.c b/scripts/kconfig/gconf.c index 262908c..df910cb 100644 --- a/scripts/kconfig/gconf.c +++ b/scripts/kconfig/gconf.c @@ -119,8 +119,6 @@ const char *dbg_print_flags(int val) strcat(buf, "choice/"); if (val & SYMBOL_CHOICEVAL) strcat(buf, "choiceval/"); - if (val & SYMBOL_PRINTED) - strcat(buf, "printed/"); if (val & SYMBOL_VALID) strcat(buf, "valid/"); if (val & SYMBOL_OPTIONAL) - To unsubscribe from this list: send the line "unsubscribe linux-kbuild" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html