summaryrefslogtreecommitdiffstats
path: root/scripts/config/expr.h
diff options
context:
space:
mode:
Diffstat (limited to 'scripts/config/expr.h')
-rw-r--r--scripts/config/expr.h110
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)
{