diff options
Diffstat (limited to 'scripts/config/expr.h')
-rw-r--r-- | scripts/config/expr.h | 110 |
1 files changed, 8 insertions, 102 deletions
diff --git a/scripts/config/expr.h b/scripts/config/expr.h index bbd516bdf5..d21bbe3b31 100644 --- a/scripts/config/expr.h +++ b/scripts/config/expr.h @@ -1,6 +1,6 @@ -/* SPDX-License-Identifier: GPL-2.0 */ /* * Copyright (C) 2002 Roman Zippel <zippel@linux-m68k.org> + * Released under the terms of the GNU GPL v2.0. */ #ifndef EXPR_H @@ -62,7 +62,7 @@ struct symbol_value { }; enum symbol_type { - S_UNKNOWN, S_BOOLEAN, S_TRISTATE, S_INT, S_HEX, S_STRING + S_UNKNOWN, S_BOOLEAN, S_TRISTATE, S_INT, S_HEX, S_STRING, S_OTHER }; /* enum values are used as index to symbol.def[] */ @@ -74,64 +74,20 @@ enum { S_DEF_COUNT }; -/* - * Represents a configuration symbol. - * - * Choices are represented as a special kind of symbol and have the - * SYMBOL_CHOICE bit set in 'flags'. - */ struct symbol { - /* The next symbol in the same bucket in the symbol hash table */ struct symbol *next; - - /* The name of the symbol, e.g. "FOO" for 'config FOO' */ char *name; - - /* S_BOOLEAN, S_TRISTATE, ... */ enum symbol_type type; - - /* - * The calculated value of the symbol. The SYMBOL_VALID bit is set in - * 'flags' when this is up to date. Note that this value might differ - * from the user value set in e.g. a .config file, due to visibility. - */ struct symbol_value curr; - - /* - * Values for the symbol provided from outside. def[S_DEF_USER] holds - * the .config value. - */ struct symbol_value def[S_DEF_COUNT]; - - /* - * An upper bound on the tristate value the user can set for the symbol - * if it is a boolean or tristate. Calculated from prompt dependencies, - * which also inherit dependencies from enclosing menus, choices, and - * ifs. If 'n', the user value will be ignored. - * - * Symbols lacking prompts always have visibility 'n'. - */ tristate visible; - - /* SYMBOL_* flags */ int flags; - - /* List of properties. See prop_type. */ struct property *prop; - - /* Dependencies from enclosing menus, choices, and ifs */ struct expr_value dir_dep; - - /* Reverse dependencies through being selected by other symbols */ struct expr_value rev_dep; - - /* - * "Weak" reverse dependencies through being implied by other symbols - */ - struct expr_value implied; }; -#define for_all_symbols(i, sym) for (i = 0; i < SYMBOL_HASHSIZE; i++) for (sym = symbol_hash[i]; sym; sym = sym->next) +#define for_all_symbols(i, sym) for (i = 0; i < SYMBOL_HASHSIZE; i++) for (sym = symbol_hash[i]; sym; sym = sym->next) if (sym->type != S_OTHER) #define SYMBOL_CONST 0x0001 /* symbol is const */ #define SYMBOL_CHECK 0x0008 /* used during dependency checking */ @@ -141,8 +97,7 @@ struct symbol { #define SYMBOL_OPTIONAL 0x0100 /* choice is optional - values can be 'n' */ #define SYMBOL_WRITE 0x0200 /* write symbol to file (KCONFIG_CONFIG) */ #define SYMBOL_CHANGED 0x0400 /* ? */ -#define SYMBOL_WRITTEN 0x0800 /* track info to avoid double-write to .config */ -#define SYMBOL_NO_WRITE 0x1000 /* Symbol for internal use only; it will not be written */ +#define SYMBOL_AUTO 0x1000 /* value from environment variable */ #define SYMBOL_CHECKED 0x2000 /* used during dependency checking */ #define SYMBOL_WARNED 0x8000 /* warning has been issued */ @@ -172,26 +127,24 @@ struct symbol { * config BAZ * int "BAZ Value" * range 1..255 - * - * Please, also check parser.y:print_symbol() when modifying the - * list of property types! */ enum prop_type { P_UNKNOWN, P_PROMPT, /* prompt "foo prompt" or "BAZ Value" */ P_COMMENT, /* text associated with a comment */ - P_MENU, /* prompt associated with a menu or menuconfig symbol */ + P_MENU, /* prompt associated with a menuconfig option */ P_DEFAULT, /* default y */ P_CHOICE, /* choice value */ P_SELECT, /* select BAR */ - P_IMPLY, /* imply BAR */ P_RANGE, /* range 7..100 (for a symbol) */ + P_ENV, /* value from environment variable */ P_SYMBOL, /* where a symbol is defined */ P_RESET, /* reset to defaults condition */ }; struct property { struct property *next; /* next property - null if last */ + struct symbol *sym; /* the symbol for which the property 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; @@ -212,67 +165,22 @@ struct property { for (st = sym->prop; st; st = st->next) \ if (st->text) -/* - * Represents a node in the menu tree, as seen in e.g. menuconfig (though used - * for all front ends). Each symbol, menu, etc. defined in the Kconfig files - * gets a node. A symbol defined in multiple locations gets one node at each - * location. - */ struct menu { - /* The next menu node at the same level */ struct menu *next; - - /* The parent menu node, corresponding to e.g. a menu or choice */ struct menu *parent; - - /* The first child menu node, for e.g. menus and choices */ struct menu *list; - - /* - * The symbol associated with the menu node. Choices are implemented as - * a special kind of symbol. NULL for menus, comments, and ifs. - */ struct symbol *sym; - - /* - * The prompt associated with the node. This holds the prompt for a - * symbol as well as the text for a menu or comment, along with the - * type (P_PROMPT, P_MENU, etc.) - */ struct property *prompt; - - /* - * 'visible if' dependencies. If more than one is given, they will be - * ANDed together. - */ struct expr *visibility; - - /* - * Ordinary dependencies from e.g. 'depends on' and 'if', ANDed - * together - */ struct expr *dep; - - /* MENU_* flags */ unsigned int flags; - - /* Any help text associated with the node */ char *help; - - /* The location where the menu node appears in the Kconfig files */ struct file *file; int lineno; - - /* For use by front ends that need to store auxiliary data */ void *data; }; -/* - * Set on a menu node when the corresponding symbol changes state in some way. - * Can be checked by front ends. - */ #define MENU_CHANGED 0x0001 - #define MENU_ROOT 0x0002 struct jump_key { @@ -301,7 +209,6 @@ struct expr *expr_alloc_or(struct expr *e1, struct expr *e2); struct expr *expr_copy(const struct expr *org); void expr_free(struct expr *e); void expr_eliminate_eq(struct expr **ep1, struct expr **ep2); -int expr_eq(struct expr *e1, struct expr *e2); tristate expr_calc_value(struct expr *e); struct expr *expr_trans_bool(struct expr *e); struct expr *expr_eliminate_dups(struct expr *e); @@ -309,12 +216,11 @@ struct expr *expr_transform(struct expr *e); int expr_contains_symbol(struct expr *dep, struct symbol *sym); bool expr_depends_symbol(struct expr *dep, struct symbol *sym); struct expr *expr_trans_compare(struct expr *e, enum expr_type type, struct symbol *sym); +struct expr *expr_simplify_unmet_dep(struct expr *e1, struct expr *e2); void expr_fprint(struct expr *e, FILE *out); struct gstr; /* forward */ void expr_gstr_print(struct expr *e, struct gstr *gs); -void expr_gstr_print_revdep(struct expr *e, struct gstr *gs, - tristate pr_type, const char *title); static inline int expr_is_yes(struct expr *e) { |