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>
1 %option backup nostdinit noyywrap never-interactive full ecs
2 %option 8bit backup nodefault perf-report perf-report
4 %x COMMAND HELP STRING PARAM
7 * Copyright (C) 2002 Roman Zippel <zippel@linux-m68k.org>
8 * Released under the terms of the GNU GPL v2.0.
17 #define LKC_DIRECT_LINK
20 #define START_STRSIZE 16
28 static int text_size, text_asize;
31 struct buffer *parent;
32 YY_BUFFER_STATE state;
35 struct buffer *current_buf;
37 static int last_ts, first_ts;
39 static void zconf_endhelp(void);
40 static void zconf_endfile(void);
42 static void new_string(void)
44 text = malloc(START_STRSIZE);
45 text_asize = START_STRSIZE;
50 static void append_string(const char *str, int size)
52 int new_size = text_size + size + 1;
53 if (new_size > text_asize) {
54 new_size += START_STRSIZE - 1;
55 new_size &= -START_STRSIZE;
56 text = realloc(text, new_size);
57 text_asize = new_size;
59 memcpy(text + text_size, str, size);
64 static void alloc_string(const char *str, int size)
66 text = malloc(size + 1);
67 memcpy(text, str, size);
81 current_file->lineno++;
99 struct kconf_id *id = kconf_id_lookup(yytext, yyleng);
101 current_pos.file = current_file;
102 current_pos.lineno = current_file->lineno;
103 if (id && id->flags & TF_COMMAND) {
107 alloc_string(yytext, yyleng);
108 zconflval.string = text;
114 current_file->lineno++;
122 "(" return T_OPEN_PAREN;
123 ")" return T_CLOSE_PAREN;
126 "!=" return T_UNEQUAL;
132 \n BEGIN(INITIAL); current_file->lineno++; return T_EOL;
135 struct kconf_id *id = kconf_id_lookup(yytext, yyleng);
136 if (id && id->flags & TF_PARAM) {
140 alloc_string(yytext, yyleng);
141 zconflval.string = text;
145 \\\n current_file->lineno++;
154 append_string(yytext, yyleng);
155 zconflval.string = text;
159 append_string(yytext, yyleng);
162 append_string(yytext + 1, yyleng - 1);
163 zconflval.string = text;
167 append_string(yytext + 1, yyleng - 1);
170 if (str == yytext[0]) {
172 zconflval.string = text;
175 append_string(yytext, 1);
178 printf("%s:%d:warning: multi-line strings not supported\n", zconf_curname(), zconf_lineno());
179 current_file->lineno++;
191 for (i = 0; i < yyleng; i++) {
192 if (yytext[i] == '\t')
205 append_string(" ", 8);
208 append_string(" ", ts);
212 current_file->lineno++;
217 current_file->lineno++;
218 append_string("\n", 1);
222 if ((yytext[yyleng-1] != ' ') && (yytext[yyleng-1] != '\t'))
226 append_string(yytext, yyleng);
246 void zconf_starthelp(void)
249 last_ts = first_ts = 0;
253 static void zconf_endhelp(void)
255 zconflval.string = text;
261 * Try to open specified file with following names:
264 * The latter is used when srctree is separate from objtree
265 * when compiling the kernel.
266 * Return NULL if file is not found.
268 FILE *zconf_fopen(const char *name)
270 char *env, fullname[PATH_MAX+1];
273 f = fopen(name, "r");
274 if (!f && name != NULL && name[0] != '/') {
275 env = getenv(SRCTREE);
277 sprintf(fullname, "%s/%s", env, name);
278 f = fopen(fullname, "r");
284 void zconf_initscan(const char *name)
286 yyin = zconf_fopen(name);
288 printf("can't find file %s\n", name);
292 current_buf = malloc(sizeof(*current_buf));
293 memset(current_buf, 0, sizeof(*current_buf));
295 current_file = file_lookup(name);
296 current_file->lineno = 1;
299 void zconf_nextfile(const char *name)
302 struct file *file = file_lookup(name);
303 struct buffer *buf = malloc(sizeof(*buf));
304 memset(buf, 0, sizeof(*buf));
306 current_buf->state = YY_CURRENT_BUFFER;
307 yyin = zconf_fopen(file->name);
309 printf("%s:%d: can't open file \"%s\"\n",
310 zconf_curname(), zconf_lineno(), file->name);
313 yy_switch_to_buffer(yy_create_buffer(yyin, YY_BUF_SIZE));
314 buf->parent = current_buf;
317 for (iter = current_file->parent; iter; iter = iter->parent ) {
318 if (!strcmp(current_file->name,iter->name) ) {
319 printf("%s:%d: recursive inclusion detected. "
320 "Inclusion path:\n current file : '%s'\n",
321 zconf_curname(), zconf_lineno(),
323 iter = current_file->parent;
325 strcmp(iter->name,current_file->name)) {
326 printf(" included from: '%s:%d'\n",
327 iter->name, iter->lineno-1);
331 printf(" included from: '%s:%d'\n",
332 iter->name, iter->lineno+1);
337 file->parent = current_file;
341 static void zconf_endfile(void)
343 struct buffer *parent;
345 current_file = current_file->parent;
347 parent = current_buf->parent;
350 yy_delete_buffer(YY_CURRENT_BUFFER);
351 yy_switch_to_buffer(parent->state);
354 current_buf = parent;
357 int zconf_lineno(void)
359 return current_pos.lineno;
362 const char *zconf_curname(void)
364 return current_pos.file ? current_pos.file->name : "<none>";