kconfig/expr.h
author "Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
Sun Jul 13 10:32:38 2008 +0000 (2008-07-13)
changeset 645 8e58024f8e37
child 943 1cca90ce0481
permissions -rw-r--r--
Ioannis E. VENETIS <venetis@mail.capsl.udel.edu> pointed out that GMP and MPFR were not used by gcc.
Turned out that none could use GMP and MPFR as the config option changed its name, but the change was not propagated to all users.

/trunk/scripts/build/binutils.sh | 2 1 1 0 +-
/trunk/scripts/build/debug/300-gdb.sh | 2 1 1 0 +-
/trunk/scripts/build/cc_gcc.sh | 6 3 3 0 +++---
3 files changed, 5 insertions(+), 5 deletions(-)
     1 /*
     2  * Copyright (C) 2002 Roman Zippel <zippel@linux-m68k.org>
     3  * Released under the terms of the GNU GPL v2.0.
     4  */
     5 
     6 #ifndef EXPR_H
     7 #define EXPR_H
     8 
     9 #ifdef __cplusplus
    10 extern "C" {
    11 #endif
    12 
    13 #include <stdio.h>
    14 #ifndef __cplusplus
    15 #include <stdbool.h>
    16 #endif
    17 
    18 struct file {
    19 	struct file *next;
    20 	struct file *parent;
    21 	char *name;
    22 	int lineno;
    23 	int flags;
    24 };
    25 
    26 #define FILE_BUSY		0x0001
    27 #define FILE_SCANNED		0x0002
    28 #define FILE_PRINTED		0x0004
    29 
    30 typedef enum tristate {
    31 	no, mod, yes
    32 } tristate;
    33 
    34 enum expr_type {
    35 	E_NONE, E_OR, E_AND, E_NOT, E_EQUAL, E_UNEQUAL, E_CHOICE, E_SYMBOL, E_RANGE
    36 };
    37 
    38 union expr_data {
    39 	struct expr *expr;
    40 	struct symbol *sym;
    41 };
    42 
    43 struct expr {
    44 	enum expr_type type;
    45 	union expr_data left, right;
    46 };
    47 
    48 #define E_OR(dep1, dep2)	(((dep1)>(dep2))?(dep1):(dep2))
    49 #define E_AND(dep1, dep2)	(((dep1)<(dep2))?(dep1):(dep2))
    50 #define E_NOT(dep)		(2-(dep))
    51 
    52 struct expr_value {
    53 	struct expr *expr;
    54 	tristate tri;
    55 };
    56 
    57 struct symbol_value {
    58 	void *val;
    59 	tristate tri;
    60 };
    61 
    62 enum symbol_type {
    63 	S_UNKNOWN, S_BOOLEAN, S_TRISTATE, S_INT, S_HEX, S_STRING, S_OTHER
    64 };
    65 
    66 enum {
    67 	S_DEF_USER,		/* main user value */
    68 	S_DEF_AUTO,
    69 };
    70 
    71 struct symbol {
    72 	struct symbol *next;
    73 	char *name;
    74 	char *help;
    75 	enum symbol_type type;
    76 	struct symbol_value curr;
    77 	struct symbol_value def[4];
    78 	tristate visible;
    79 	int flags;
    80 	struct property *prop;
    81 	struct expr *dep, *dep2;
    82 	struct expr_value rev_dep;
    83 };
    84 
    85 #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)
    86 
    87 #define SYMBOL_CONST		0x0001
    88 #define SYMBOL_CHECK		0x0008
    89 #define SYMBOL_CHOICE		0x0010
    90 #define SYMBOL_CHOICEVAL	0x0020
    91 #define SYMBOL_PRINTED		0x0040
    92 #define SYMBOL_VALID		0x0080
    93 #define SYMBOL_OPTIONAL		0x0100
    94 #define SYMBOL_WRITE		0x0200
    95 #define SYMBOL_CHANGED		0x0400
    96 #define SYMBOL_AUTO		0x1000
    97 #define SYMBOL_CHECKED		0x2000
    98 #define SYMBOL_WARNED		0x8000
    99 #define SYMBOL_DEF		0x10000
   100 #define SYMBOL_DEF_USER		0x10000
   101 #define SYMBOL_DEF_AUTO		0x20000
   102 #define SYMBOL_DEF3		0x40000
   103 #define SYMBOL_DEF4		0x80000
   104 
   105 #define SYMBOL_MAXLENGTH	256
   106 #define SYMBOL_HASHSIZE		257
   107 #define SYMBOL_HASHMASK		0xff
   108 
   109 enum prop_type {
   110 	P_UNKNOWN, P_PROMPT, P_COMMENT, P_MENU, P_DEFAULT, P_CHOICE, P_SELECT, P_RANGE
   111 };
   112 
   113 struct property {
   114 	struct property *next;
   115 	struct symbol *sym;
   116 	enum prop_type type;
   117 	const char *text;
   118 	struct expr_value visible;
   119 	struct expr *expr;
   120 	struct menu *menu;
   121 	struct file *file;
   122 	int lineno;
   123 };
   124 
   125 #define for_all_properties(sym, st, tok) \
   126 	for (st = sym->prop; st; st = st->next) \
   127 		if (st->type == (tok))
   128 #define for_all_defaults(sym, st) for_all_properties(sym, st, P_DEFAULT)
   129 #define for_all_choices(sym, st) for_all_properties(sym, st, P_CHOICE)
   130 #define for_all_prompts(sym, st) \
   131 	for (st = sym->prop; st; st = st->next) \
   132 		if (st->text)
   133 
   134 struct menu {
   135 	struct menu *next;
   136 	struct menu *parent;
   137 	struct menu *list;
   138 	struct symbol *sym;
   139 	struct property *prompt;
   140 	struct expr *dep;
   141 	unsigned int flags;
   142 	//char *help;
   143 	struct file *file;
   144 	int lineno;
   145 	void *data;
   146 };
   147 
   148 #define MENU_CHANGED		0x0001
   149 #define MENU_ROOT		0x0002
   150 
   151 #ifndef SWIG
   152 
   153 extern struct file *file_list;
   154 extern struct file *current_file;
   155 struct file *lookup_file(const char *name);
   156 
   157 extern struct symbol symbol_yes, symbol_no, symbol_mod;
   158 extern struct symbol *modules_sym;
   159 extern struct symbol *sym_defconfig_list;
   160 extern int cdebug;
   161 struct expr *expr_alloc_symbol(struct symbol *sym);
   162 struct expr *expr_alloc_one(enum expr_type type, struct expr *ce);
   163 struct expr *expr_alloc_two(enum expr_type type, struct expr *e1, struct expr *e2);
   164 struct expr *expr_alloc_comp(enum expr_type type, struct symbol *s1, struct symbol *s2);
   165 struct expr *expr_alloc_and(struct expr *e1, struct expr *e2);
   166 struct expr *expr_alloc_or(struct expr *e1, struct expr *e2);
   167 struct expr *expr_copy(struct expr *org);
   168 void expr_free(struct expr *e);
   169 int expr_eq(struct expr *e1, struct expr *e2);
   170 void expr_eliminate_eq(struct expr **ep1, struct expr **ep2);
   171 tristate expr_calc_value(struct expr *e);
   172 struct expr *expr_eliminate_yn(struct expr *e);
   173 struct expr *expr_trans_bool(struct expr *e);
   174 struct expr *expr_eliminate_dups(struct expr *e);
   175 struct expr *expr_transform(struct expr *e);
   176 int expr_contains_symbol(struct expr *dep, struct symbol *sym);
   177 bool expr_depends_symbol(struct expr *dep, struct symbol *sym);
   178 struct expr *expr_extract_eq_and(struct expr **ep1, struct expr **ep2);
   179 struct expr *expr_extract_eq_or(struct expr **ep1, struct expr **ep2);
   180 void expr_extract_eq(enum expr_type type, struct expr **ep, struct expr **ep1, struct expr **ep2);
   181 struct expr *expr_trans_compare(struct expr *e, enum expr_type type, struct symbol *sym);
   182 
   183 void expr_fprint(struct expr *e, FILE *out);
   184 struct gstr; /* forward */
   185 void expr_gstr_print(struct expr *e, struct gstr *gs);
   186 
   187 static inline int expr_is_yes(struct expr *e)
   188 {
   189 	return !e || (e->type == E_SYMBOL && e->left.sym == &symbol_yes);
   190 }
   191 
   192 static inline int expr_is_no(struct expr *e)
   193 {
   194 	return e && (e->type == E_SYMBOL && e->left.sym == &symbol_no);
   195 }
   196 #endif
   197 
   198 #ifdef __cplusplus
   199 }
   200 #endif
   201 
   202 #endif /* EXPR_H */