scripts/addToolsVersion: properly handle .in vs. .in.2
While most components have their version in the .in file, some
have it in the .in.2 (eg. elf2flt).
Currently, to handle this case, we indiscriminately munge both files,
but this is wrong: in the elf2flt case, if we add a binutils version,
we do not want it to be added to elf2flt, and conversely.
So, for each tool, we need to explicitly know what file to munge.
Signed-off-by: "Yann E. MORIN" <yann.morin.1998@free.fr>
2 * Copyright (C) 2002 Roman Zippel <zippel@linux-m68k.org>
3 * Released under the terms of the GNU GPL v2.0.
25 typedef enum tristate {
30 E_NONE, E_OR, E_AND, E_NOT, E_EQUAL, E_UNEQUAL, E_LIST, E_SYMBOL, E_RANGE
40 union expr_data left, right;
43 #define EXPR_OR(dep1, dep2) (((dep1)>(dep2))?(dep1):(dep2))
44 #define EXPR_AND(dep1, dep2) (((dep1)<(dep2))?(dep1):(dep2))
45 #define EXPR_NOT(dep) (2-(dep))
47 #define expr_list_for_each_sym(l, e, s) \
48 for (e = (l); e && (s = e->right.sym); e = e->left.expr)
61 S_UNKNOWN, S_BOOLEAN, S_TRISTATE, S_INT, S_HEX, S_STRING, S_OTHER
64 /* enum values are used as index to symbol.def[] */
66 S_DEF_USER, /* main user value */
67 S_DEF_AUTO, /* values read from auto.conf */
68 S_DEF_DEF3, /* Reserved for UI usage */
69 S_DEF_DEF4, /* Reserved for UI usage */
76 enum symbol_type type;
77 struct symbol_value curr;
78 struct symbol_value def[S_DEF_COUNT];
81 struct property *prop;
82 struct expr_value dir_dep;
83 struct expr_value rev_dep;
86 #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)
88 #define SYMBOL_CONST 0x0001 /* symbol is const */
89 #define SYMBOL_CHECK 0x0008 /* used during dependency checking */
90 #define SYMBOL_CHOICE 0x0010 /* start of a choice block (null name) */
91 #define SYMBOL_CHOICEVAL 0x0020 /* used as a value in a choice block */
92 #define SYMBOL_VALID 0x0080 /* set when symbol.curr is calculated */
93 #define SYMBOL_OPTIONAL 0x0100 /* choice is optional - values can be 'n' */
94 #define SYMBOL_WRITE 0x0200 /* ? */
95 #define SYMBOL_CHANGED 0x0400 /* ? */
96 #define SYMBOL_AUTO 0x1000 /* value from environment variable */
97 #define SYMBOL_CHECKED 0x2000 /* used during dependency checking */
98 #define SYMBOL_WARNED 0x8000 /* warning has been issued */
100 /* Set when symbol.def[] is used */
101 #define SYMBOL_DEF 0x10000 /* First bit of SYMBOL_DEF */
102 #define SYMBOL_DEF_USER 0x10000 /* symbol.def[S_DEF_USER] is valid */
103 #define SYMBOL_DEF_AUTO 0x20000 /* symbol.def[S_DEF_AUTO] is valid */
104 #define SYMBOL_DEF3 0x40000 /* symbol.def[S_DEF_3] is valid */
105 #define SYMBOL_DEF4 0x80000 /* symbol.def[S_DEF_4] is valid */
107 #define SYMBOL_MAXLENGTH 256
108 #define SYMBOL_HASHSIZE 9973
110 /* A property represent the config options that can be associated
111 * with a config "symbol".
115 * prompt "foo prompt"
123 P_PROMPT, /* prompt "foo prompt" or "BAZ Value" */
124 P_COMMENT, /* text associated with a comment */
125 P_MENU, /* prompt associated with a menuconfig option */
126 P_DEFAULT, /* default y */
127 P_CHOICE, /* choice value */
128 P_SELECT, /* select BAR */
129 P_RANGE, /* range 7..100 (for a symbol) */
130 P_ENV, /* value from environment variable */
131 P_SYMBOL, /* where a symbol is defined */
135 struct property *next; /* next property - null if last */
136 struct symbol *sym; /* the symbol for which the property is associated */
137 enum prop_type type; /* type of property */
138 const char *text; /* the prompt value - P_PROMPT, P_MENU, P_COMMENT */
139 struct expr_value visible;
140 struct expr *expr; /* the optional conditional part of the property */
141 struct menu *menu; /* the menu the property are associated with
142 * valid for: P_SELECT, P_RANGE, P_CHOICE,
143 * P_PROMPT, P_DEFAULT, P_MENU, P_COMMENT */
144 struct file *file; /* what file was this property defined */
145 int lineno; /* what lineno was this property defined */
148 #define for_all_properties(sym, st, tok) \
149 for (st = sym->prop; st; st = st->next) \
150 if (st->type == (tok))
151 #define for_all_defaults(sym, st) for_all_properties(sym, st, P_DEFAULT)
152 #define for_all_choices(sym, st) for_all_properties(sym, st, P_CHOICE)
153 #define for_all_prompts(sym, st) \
154 for (st = sym->prop; st; st = st->next) \
162 struct property *prompt;
163 struct expr *visibility;
172 #define MENU_CHANGED 0x0001
173 #define MENU_ROOT 0x0002
177 extern struct file *file_list;
178 extern struct file *current_file;
179 struct file *lookup_file(const char *name);
181 extern struct symbol symbol_yes, symbol_no, symbol_mod;
182 extern struct symbol *modules_sym;
183 extern struct symbol *sym_defconfig_list;
185 struct expr *expr_alloc_symbol(struct symbol *sym);
186 struct expr *expr_alloc_one(enum expr_type type, struct expr *ce);
187 struct expr *expr_alloc_two(enum expr_type type, struct expr *e1, struct expr *e2);
188 struct expr *expr_alloc_comp(enum expr_type type, struct symbol *s1, struct symbol *s2);
189 struct expr *expr_alloc_and(struct expr *e1, struct expr *e2);
190 struct expr *expr_alloc_or(struct expr *e1, struct expr *e2);
191 struct expr *expr_copy(const struct expr *org);
192 void expr_free(struct expr *e);
193 int expr_eq(struct expr *e1, struct expr *e2);
194 void expr_eliminate_eq(struct expr **ep1, struct expr **ep2);
195 tristate expr_calc_value(struct expr *e);
196 struct expr *expr_eliminate_yn(struct expr *e);
197 struct expr *expr_trans_bool(struct expr *e);
198 struct expr *expr_eliminate_dups(struct expr *e);
199 struct expr *expr_transform(struct expr *e);
200 int expr_contains_symbol(struct expr *dep, struct symbol *sym);
201 bool expr_depends_symbol(struct expr *dep, struct symbol *sym);
202 struct expr *expr_extract_eq_and(struct expr **ep1, struct expr **ep2);
203 struct expr *expr_extract_eq_or(struct expr **ep1, struct expr **ep2);
204 void expr_extract_eq(enum expr_type type, struct expr **ep, struct expr **ep1, struct expr **ep2);
205 struct expr *expr_trans_compare(struct expr *e, enum expr_type type, struct symbol *sym);
206 struct expr *expr_simplify_unmet_dep(struct expr *e1, struct expr *e2);
208 void expr_fprint(struct expr *e, FILE *out);
209 struct gstr; /* forward */
210 void expr_gstr_print(struct expr *e, struct gstr *gs);
212 static inline int expr_is_yes(struct expr *e)
214 return !e || (e->type == E_SYMBOL && e->left.sym == &symbol_yes);
217 static inline int expr_is_no(struct expr *e)
219 return e && (e->type == E_SYMBOL && e->left.sym == &symbol_no);