aboutsummaryrefslogtreecommitdiffstats
path: root/scripts/config/expr.h
diff options
context:
space:
mode:
authorJo-Philipp Wich <jo@mein.io>2020-04-12 00:09:52 +0200
committerJo-Philipp Wich <jo@mein.io>2020-04-12 00:10:47 +0200
commit7b1d809a8d8620032553845cf4a8819a19508687 (patch)
treee9c221f4cee621bbbfa2d02ac2870b0d3caaa4a4 /scripts/config/expr.h
parent6c16d64b2a0bb063a89225dcaabd50c00bce7aa2 (diff)
downloadupstream-7b1d809a8d8620032553845cf4a8819a19508687.tar.gz
upstream-7b1d809a8d8620032553845cf4a8819a19508687.tar.bz2
upstream-7b1d809a8d8620032553845cf4a8819a19508687.zip
Revert "build: scripts/config - update to kconfig-v5.6"
This reverts commit dcf3e63a35d05e7e5103819c0f17195bfafe9baa. The kconfig update requires further testing and refinement until it can remain in tree. Main problems are: - Recursive deps are now fatal instead of a warning - Previously legal syntax now leads to hard failures - It fails all package builds since multiple days The updated kconfig implementation needs to cope with the current status quo in the various package feeds before we can reconsider it for master. It is not desirable that single broken packages can hard-fail the entire build pipeline. Signed-off-by: Jo-Philipp Wich <jo@mein.io>
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)
{