kconfig/conf.c
author "Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
Sun Jul 13 10:32:38 2008 +0000 (2008-07-13)
changeset 645 8e58024f8e37
parent 39 af42eec9d383
child 860 3ff8038f904c
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(-)
yann@1
     1
/*
yann@1
     2
 * Copyright (C) 2002 Roman Zippel <zippel@linux-m68k.org>
yann@1
     3
 * Released under the terms of the GNU GPL v2.0.
yann@1
     4
 */
yann@1
     5
yann@1
     6
#include <ctype.h>
yann@1
     7
#include <stdlib.h>
yann@1
     8
#include <stdio.h>
yann@1
     9
#include <string.h>
yann@1
    10
#include <unistd.h>
yann@1
    11
#include <time.h>
yann@1
    12
#include <sys/stat.h>
yann@1
    13
yann@1
    14
#define LKC_DIRECT_LINK
yann@1
    15
#include "lkc.h"
yann@1
    16
yann@1
    17
static void conf(struct menu *menu);
yann@1
    18
static void check_conf(struct menu *menu);
yann@1
    19
yann@1
    20
enum {
yann@1
    21
	ask_all,
yann@1
    22
	ask_new,
yann@1
    23
	ask_silent,
yann@1
    24
	set_default,
yann@1
    25
	set_yes,
yann@1
    26
	set_mod,
yann@1
    27
	set_no,
yann@1
    28
	set_random
yann@1
    29
} input_mode = ask_all;
yann@1
    30
char *defconfig_file;
yann@1
    31
yann@1
    32
static int indent = 1;
yann@1
    33
static int valid_stdin = 1;
yann@1
    34
static int conf_cnt;
yann@1
    35
static char line[128];
yann@1
    36
static struct menu *rootEntry;
yann@1
    37
yann@1
    38
static char nohelp_text[] = N_("Sorry, no help available for this option yet.\n");
yann@1
    39
yann@1
    40
static void strip(char *str)
yann@1
    41
{
yann@1
    42
	char *p = str;
yann@1
    43
	int l;
yann@1
    44
yann@1
    45
	while ((isspace(*p)))
yann@1
    46
		p++;
yann@1
    47
	l = strlen(p);
yann@1
    48
	if (p != str)
yann@1
    49
		memmove(str, p, l + 1);
yann@1
    50
	if (!l)
yann@1
    51
		return;
yann@1
    52
	p = str + l - 1;
yann@1
    53
	while ((isspace(*p)))
yann@1
    54
		*p-- = 0;
yann@1
    55
}
yann@1
    56
yann@1
    57
static void check_stdin(void)
yann@1
    58
{
yann@1
    59
	if (!valid_stdin && input_mode == ask_silent) {
yann@1
    60
		printf(_("aborted!\n\n"));
yann@1
    61
		printf(_("Console input/output is redirected. "));
yann@1
    62
		printf(_("Run 'make oldconfig' to update configuration.\n\n"));
yann@1
    63
		exit(1);
yann@1
    64
	}
yann@1
    65
}
yann@1
    66
yann@1
    67
static void conf_askvalue(struct symbol *sym, const char *def)
yann@1
    68
{
yann@1
    69
	enum symbol_type type = sym_get_type(sym);
yann@1
    70
	tristate val;
yann@1
    71
yann@1
    72
	if (!sym_has_value(sym))
yann@1
    73
		printf("(NEW) ");
yann@1
    74
yann@1
    75
	line[0] = '\n';
yann@1
    76
	line[1] = 0;
yann@1
    77
yann@1
    78
	if (!sym_is_changable(sym)) {
yann@1
    79
		printf("%s\n", def);
yann@1
    80
		line[0] = '\n';
yann@1
    81
		line[1] = 0;
yann@1
    82
		return;
yann@1
    83
	}
yann@1
    84
yann@1
    85
	switch (input_mode) {
yann@1
    86
	case set_no:
yann@1
    87
	case set_mod:
yann@1
    88
	case set_yes:
yann@1
    89
	case set_random:
yann@1
    90
		if (sym_has_value(sym)) {
yann@1
    91
			printf("%s\n", def);
yann@1
    92
			return;
yann@1
    93
		}
yann@1
    94
		break;
yann@1
    95
	case ask_new:
yann@1
    96
	case ask_silent:
yann@1
    97
		if (sym_has_value(sym)) {
yann@1
    98
			printf("%s\n", def);
yann@1
    99
			return;
yann@1
   100
		}
yann@1
   101
		check_stdin();
yann@1
   102
	case ask_all:
yann@1
   103
		fflush(stdout);
yann@1
   104
		fgets(line, 128, stdin);
yann@1
   105
		return;
yann@1
   106
	case set_default:
yann@1
   107
		printf("%s\n", def);
yann@1
   108
		return;
yann@1
   109
	default:
yann@1
   110
		break;
yann@1
   111
	}
yann@1
   112
yann@1
   113
	switch (type) {
yann@1
   114
	case S_INT:
yann@1
   115
	case S_HEX:
yann@1
   116
	case S_STRING:
yann@1
   117
		printf("%s\n", def);
yann@1
   118
		return;
yann@1
   119
	default:
yann@1
   120
		;
yann@1
   121
	}
yann@1
   122
	switch (input_mode) {
yann@1
   123
	case set_yes:
yann@1
   124
		if (sym_tristate_within_range(sym, yes)) {
yann@1
   125
			line[0] = 'y';
yann@1
   126
			line[1] = '\n';
yann@1
   127
			line[2] = 0;
yann@1
   128
			break;
yann@1
   129
		}
yann@1
   130
	case set_mod:
yann@1
   131
		if (type == S_TRISTATE) {
yann@1
   132
			if (sym_tristate_within_range(sym, mod)) {
yann@1
   133
				line[0] = 'm';
yann@1
   134
				line[1] = '\n';
yann@1
   135
				line[2] = 0;
yann@1
   136
				break;
yann@1
   137
			}
yann@1
   138
		} else {
yann@1
   139
			if (sym_tristate_within_range(sym, yes)) {
yann@1
   140
				line[0] = 'y';
yann@1
   141
				line[1] = '\n';
yann@1
   142
				line[2] = 0;
yann@1
   143
				break;
yann@1
   144
			}
yann@1
   145
		}
yann@1
   146
	case set_no:
yann@1
   147
		if (sym_tristate_within_range(sym, no)) {
yann@1
   148
			line[0] = 'n';
yann@1
   149
			line[1] = '\n';
yann@1
   150
			line[2] = 0;
yann@1
   151
			break;
yann@1
   152
		}
yann@1
   153
	case set_random:
yann@1
   154
		do {
yann@1
   155
			val = (tristate)(random() % 3);
yann@1
   156
		} while (!sym_tristate_within_range(sym, val));
yann@1
   157
		switch (val) {
yann@1
   158
		case no: line[0] = 'n'; break;
yann@1
   159
		case mod: line[0] = 'm'; break;
yann@1
   160
		case yes: line[0] = 'y'; break;
yann@1
   161
		}
yann@1
   162
		line[1] = '\n';
yann@1
   163
		line[2] = 0;
yann@1
   164
		break;
yann@1
   165
	default:
yann@1
   166
		break;
yann@1
   167
	}
yann@1
   168
	printf("%s", line);
yann@1
   169
}
yann@1
   170
yann@1
   171
int conf_string(struct menu *menu)
yann@1
   172
{
yann@1
   173
	struct symbol *sym = menu->sym;
yann@1
   174
	const char *def, *help;
yann@1
   175
yann@1
   176
	while (1) {
yann@1
   177
		printf("%*s%s ", indent - 1, "", menu->prompt->text);
yann@1
   178
		printf("(%s) ", sym->name);
yann@1
   179
		def = sym_get_string_value(sym);
yann@1
   180
		if (sym_get_string_value(sym))
yann@1
   181
			printf("[%s] ", def);
yann@1
   182
		conf_askvalue(sym, def);
yann@1
   183
		switch (line[0]) {
yann@1
   184
		case '\n':
yann@1
   185
			break;
yann@1
   186
		case '?':
yann@1
   187
			/* print help */
yann@1
   188
			if (line[1] == '\n') {
yann@1
   189
				help = nohelp_text;
yann@1
   190
				if (menu->sym->help)
yann@1
   191
					help = menu->sym->help;
yann@1
   192
				printf("\n%s\n", menu->sym->help);
yann@1
   193
				def = NULL;
yann@1
   194
				break;
yann@1
   195
			}
yann@1
   196
		default:
yann@1
   197
			line[strlen(line)-1] = 0;
yann@1
   198
			def = line;
yann@1
   199
		}
yann@1
   200
		if (def && sym_set_string_value(sym, def))
yann@1
   201
			return 0;
yann@1
   202
	}
yann@1
   203
}
yann@1
   204
yann@1
   205
static int conf_sym(struct menu *menu)
yann@1
   206
{
yann@1
   207
	struct symbol *sym = menu->sym;
yann@1
   208
	int type;
yann@1
   209
	tristate oldval, newval;
yann@1
   210
	const char *help;
yann@1
   211
yann@1
   212
	while (1) {
yann@1
   213
		printf("%*s%s ", indent - 1, "", menu->prompt->text);
yann@1
   214
		if (sym->name)
yann@1
   215
			printf("(%s) ", sym->name);
yann@1
   216
		type = sym_get_type(sym);
yann@1
   217
		putchar('[');
yann@1
   218
		oldval = sym_get_tristate_value(sym);
yann@1
   219
		switch (oldval) {
yann@1
   220
		case no:
yann@1
   221
			putchar('N');
yann@1
   222
			break;
yann@1
   223
		case mod:
yann@1
   224
			putchar('M');
yann@1
   225
			break;
yann@1
   226
		case yes:
yann@1
   227
			putchar('Y');
yann@1
   228
			break;
yann@1
   229
		}
yann@1
   230
		if (oldval != no && sym_tristate_within_range(sym, no))
yann@1
   231
			printf("/n");
yann@1
   232
		if (oldval != mod && sym_tristate_within_range(sym, mod))
yann@1
   233
			printf("/m");
yann@1
   234
		if (oldval != yes && sym_tristate_within_range(sym, yes))
yann@1
   235
			printf("/y");
yann@1
   236
		if (sym->help)
yann@1
   237
			printf("/?");
yann@1
   238
		printf("] ");
yann@1
   239
		conf_askvalue(sym, sym_get_string_value(sym));
yann@1
   240
		strip(line);
yann@1
   241
yann@1
   242
		switch (line[0]) {
yann@1
   243
		case 'n':
yann@1
   244
		case 'N':
yann@1
   245
			newval = no;
yann@1
   246
			if (!line[1] || !strcmp(&line[1], "o"))
yann@1
   247
				break;
yann@1
   248
			continue;
yann@1
   249
		case 'm':
yann@1
   250
		case 'M':
yann@1
   251
			newval = mod;
yann@1
   252
			if (!line[1])
yann@1
   253
				break;
yann@1
   254
			continue;
yann@1
   255
		case 'y':
yann@1
   256
		case 'Y':
yann@1
   257
			newval = yes;
yann@1
   258
			if (!line[1] || !strcmp(&line[1], "es"))
yann@1
   259
				break;
yann@1
   260
			continue;
yann@1
   261
		case 0:
yann@1
   262
			newval = oldval;
yann@1
   263
			break;
yann@1
   264
		case '?':
yann@1
   265
			goto help;
yann@1
   266
		default:
yann@1
   267
			continue;
yann@1
   268
		}
yann@1
   269
		if (sym_set_tristate_value(sym, newval))
yann@1
   270
			return 0;
yann@1
   271
help:
yann@1
   272
		help = nohelp_text;
yann@1
   273
		if (sym->help)
yann@1
   274
			help = sym->help;
yann@1
   275
		printf("\n%s\n", help);
yann@1
   276
	}
yann@1
   277
}
yann@1
   278
yann@1
   279
static int conf_choice(struct menu *menu)
yann@1
   280
{
yann@1
   281
	struct symbol *sym, *def_sym;
yann@1
   282
	struct menu *child;
yann@1
   283
	int type;
yann@1
   284
	bool is_new;
yann@1
   285
yann@1
   286
	sym = menu->sym;
yann@1
   287
	type = sym_get_type(sym);
yann@1
   288
	is_new = !sym_has_value(sym);
yann@1
   289
	if (sym_is_changable(sym)) {
yann@1
   290
		conf_sym(menu);
yann@1
   291
		sym_calc_value(sym);
yann@1
   292
		switch (sym_get_tristate_value(sym)) {
yann@1
   293
		case no:
yann@1
   294
			return 1;
yann@1
   295
		case mod:
yann@1
   296
			return 0;
yann@1
   297
		case yes:
yann@1
   298
			break;
yann@1
   299
		}
yann@1
   300
	} else {
yann@1
   301
		switch (sym_get_tristate_value(sym)) {
yann@1
   302
		case no:
yann@1
   303
			return 1;
yann@1
   304
		case mod:
yann@1
   305
			printf("%*s%s\n", indent - 1, "", menu_get_prompt(menu));
yann@1
   306
			return 0;
yann@1
   307
		case yes:
yann@1
   308
			break;
yann@1
   309
		}
yann@1
   310
	}
yann@1
   311
yann@1
   312
	while (1) {
yann@1
   313
		int cnt, def;
yann@1
   314
yann@1
   315
		printf("%*s%s\n", indent - 1, "", menu_get_prompt(menu));
yann@1
   316
		def_sym = sym_get_choice_value(sym);
yann@1
   317
		cnt = def = 0;
yann@1
   318
		line[0] = 0;
yann@1
   319
		for (child = menu->list; child; child = child->next) {
yann@1
   320
			if (!menu_is_visible(child))
yann@1
   321
				continue;
yann@1
   322
			if (!child->sym) {
yann@1
   323
				printf("%*c %s\n", indent, '*', menu_get_prompt(child));
yann@1
   324
				continue;
yann@1
   325
			}
yann@1
   326
			cnt++;
yann@1
   327
			if (child->sym == def_sym) {
yann@1
   328
				def = cnt;
yann@1
   329
				printf("%*c", indent, '>');
yann@1
   330
			} else
yann@1
   331
				printf("%*c", indent, ' ');
yann@1
   332
			printf(" %d. %s", cnt, menu_get_prompt(child));
yann@1
   333
			if (child->sym->name)
yann@1
   334
				printf(" (%s)", child->sym->name);
yann@1
   335
			if (!sym_has_value(child->sym))
yann@1
   336
				printf(" (NEW)");
yann@1
   337
			printf("\n");
yann@1
   338
		}
yann@1
   339
		printf("%*schoice", indent - 1, "");
yann@1
   340
		if (cnt == 1) {
yann@1
   341
			printf("[1]: 1\n");
yann@1
   342
			goto conf_childs;
yann@1
   343
		}
yann@1
   344
		printf("[1-%d", cnt);
yann@1
   345
		if (sym->help)
yann@1
   346
			printf("?");
yann@1
   347
		printf("]: ");
yann@1
   348
		switch (input_mode) {
yann@1
   349
		case ask_new:
yann@1
   350
		case ask_silent:
yann@1
   351
			if (!is_new) {
yann@1
   352
				cnt = def;
yann@1
   353
				printf("%d\n", cnt);
yann@1
   354
				break;
yann@1
   355
			}
yann@1
   356
			check_stdin();
yann@1
   357
		case ask_all:
yann@1
   358
			fflush(stdout);
yann@1
   359
			fgets(line, 128, stdin);
yann@1
   360
			strip(line);
yann@1
   361
			if (line[0] == '?') {
yann@1
   362
				printf("\n%s\n", menu->sym->help ?
yann@1
   363
					menu->sym->help : nohelp_text);
yann@1
   364
				continue;
yann@1
   365
			}
yann@1
   366
			if (!line[0])
yann@1
   367
				cnt = def;
yann@1
   368
			else if (isdigit(line[0]))
yann@1
   369
				cnt = atoi(line);
yann@1
   370
			else
yann@1
   371
				continue;
yann@1
   372
			break;
yann@1
   373
		case set_random:
yann@1
   374
			def = (random() % cnt) + 1;
yann@1
   375
		case set_default:
yann@1
   376
		case set_yes:
yann@1
   377
		case set_mod:
yann@1
   378
		case set_no:
yann@1
   379
			cnt = def;
yann@1
   380
			printf("%d\n", cnt);
yann@1
   381
			break;
yann@1
   382
		}
yann@1
   383
yann@1
   384
	conf_childs:
yann@1
   385
		for (child = menu->list; child; child = child->next) {
yann@1
   386
			if (!child->sym || !menu_is_visible(child))
yann@1
   387
				continue;
yann@1
   388
			if (!--cnt)
yann@1
   389
				break;
yann@1
   390
		}
yann@1
   391
		if (!child)
yann@1
   392
			continue;
yann@1
   393
		if (line[strlen(line) - 1] == '?') {
yann@1
   394
			printf("\n%s\n", child->sym->help ?
yann@1
   395
				child->sym->help : nohelp_text);
yann@1
   396
			continue;
yann@1
   397
		}
yann@1
   398
		sym_set_choice_value(sym, child->sym);
yann@1
   399
		if (child->list) {
yann@1
   400
			indent += 2;
yann@1
   401
			conf(child->list);
yann@1
   402
			indent -= 2;
yann@1
   403
		}
yann@1
   404
		return 1;
yann@1
   405
	}
yann@1
   406
}
yann@1
   407
yann@1
   408
static void conf(struct menu *menu)
yann@1
   409
{
yann@1
   410
	struct symbol *sym;
yann@1
   411
	struct property *prop;
yann@1
   412
	struct menu *child;
yann@1
   413
yann@1
   414
	if (!menu_is_visible(menu))
yann@1
   415
		return;
yann@1
   416
yann@1
   417
	sym = menu->sym;
yann@1
   418
	prop = menu->prompt;
yann@1
   419
	if (prop) {
yann@1
   420
		const char *prompt;
yann@1
   421
yann@1
   422
		switch (prop->type) {
yann@1
   423
		case P_MENU:
yann@1
   424
			if (input_mode == ask_silent && rootEntry != menu) {
yann@1
   425
				check_conf(menu);
yann@1
   426
				return;
yann@1
   427
			}
yann@1
   428
		case P_COMMENT:
yann@1
   429
			prompt = menu_get_prompt(menu);
yann@1
   430
			if (prompt)
yann@1
   431
				printf("%*c\n%*c %s\n%*c\n",
yann@1
   432
					indent, '*',
yann@1
   433
					indent, '*', prompt,
yann@1
   434
					indent, '*');
yann@1
   435
		default:
yann@1
   436
			;
yann@1
   437
		}
yann@1
   438
	}
yann@1
   439
yann@1
   440
	if (!sym)
yann@1
   441
		goto conf_childs;
yann@1
   442
yann@1
   443
	if (sym_is_choice(sym)) {
yann@1
   444
		conf_choice(menu);
yann@1
   445
		if (sym->curr.tri != mod)
yann@1
   446
			return;
yann@1
   447
		goto conf_childs;
yann@1
   448
	}
yann@1
   449
yann@1
   450
	switch (sym->type) {
yann@1
   451
	case S_INT:
yann@1
   452
	case S_HEX:
yann@1
   453
	case S_STRING:
yann@1
   454
		conf_string(menu);
yann@1
   455
		break;
yann@1
   456
	default:
yann@1
   457
		conf_sym(menu);
yann@1
   458
		break;
yann@1
   459
	}
yann@1
   460
yann@1
   461
conf_childs:
yann@1
   462
	if (sym)
yann@1
   463
		indent += 2;
yann@1
   464
	for (child = menu->list; child; child = child->next)
yann@1
   465
		conf(child);
yann@1
   466
	if (sym)
yann@1
   467
		indent -= 2;
yann@1
   468
}
yann@1
   469
yann@1
   470
static void check_conf(struct menu *menu)
yann@1
   471
{
yann@1
   472
	struct symbol *sym;
yann@1
   473
	struct menu *child;
yann@1
   474
yann@1
   475
	if (!menu_is_visible(menu))
yann@1
   476
		return;
yann@1
   477
yann@1
   478
	sym = menu->sym;
yann@1
   479
	if (sym && !sym_has_value(sym)) {
yann@1
   480
		if (sym_is_changable(sym) ||
yann@1
   481
		    (sym_is_choice(sym) && sym_get_tristate_value(sym) == yes)) {
yann@1
   482
			if (!conf_cnt++)
yann@1
   483
				printf(_("*\n* Restart config...\n*\n"));
yann@1
   484
			rootEntry = menu_get_parent_menu(menu);
yann@1
   485
			conf(rootEntry);
yann@1
   486
		}
yann@1
   487
	}
yann@1
   488
yann@1
   489
	for (child = menu->list; child; child = child->next)
yann@1
   490
		check_conf(child);
yann@1
   491
}
yann@1
   492
yann@1
   493
int main(int ac, char **av)
yann@1
   494
{
yann@1
   495
	int i = 1;
yann@1
   496
	const char *name;
yann@1
   497
	struct stat tmpstat;
yann@1
   498
yann@1
   499
	if (ac > i && av[i][0] == '-') {
yann@1
   500
		switch (av[i++][1]) {
yann@1
   501
		case 'o':
yann@1
   502
			input_mode = ask_new;
yann@1
   503
			break;
yann@1
   504
		case 's':
yann@1
   505
			input_mode = ask_silent;
yann@1
   506
			break;
yann@1
   507
		case 'd':
yann@1
   508
			input_mode = set_default;
yann@1
   509
			break;
yann@1
   510
		case 'D':
yann@1
   511
			input_mode = set_default;
yann@1
   512
			defconfig_file = av[i++];
yann@1
   513
			if (!defconfig_file) {
yann@1
   514
				printf(_("%s: No default config file specified\n"),
yann@1
   515
					av[0]);
yann@1
   516
				exit(1);
yann@1
   517
			}
yann@1
   518
			break;
yann@1
   519
		case 'n':
yann@1
   520
			input_mode = set_no;
yann@1
   521
			break;
yann@1
   522
		case 'm':
yann@1
   523
			input_mode = set_mod;
yann@1
   524
			break;
yann@1
   525
		case 'y':
yann@1
   526
			input_mode = set_yes;
yann@1
   527
			break;
yann@1
   528
		case 'r':
yann@1
   529
			input_mode = set_random;
yann@1
   530
			srandom(time(NULL));
yann@1
   531
			break;
yann@1
   532
		case 'h':
yann@1
   533
		case '?':
yann@1
   534
			fprintf(stderr, "See README for usage info\n");
yann@1
   535
			exit(0);
yann@1
   536
		}
yann@1
   537
	}
yann@1
   538
  	name = av[i];
yann@1
   539
	if (!name) {
yann@1
   540
		printf(_("%s: Kconfig file missing\n"), av[0]);
yann@1
   541
		exit(1);
yann@1
   542
	}
yann@1
   543
	conf_parse(name);
yann@1
   544
	//zconfdump(stdout);
yann@1
   545
	switch (input_mode) {
yann@1
   546
	case set_default:
yann@1
   547
		if (!defconfig_file)
yann@1
   548
			defconfig_file = conf_get_default_confname();
yann@1
   549
		if (conf_read(defconfig_file)) {
yann@1
   550
			printf("***\n"
yann@1
   551
				"*** Can't find default configuration \"%s\"!\n"
yann@1
   552
				"***\n", defconfig_file);
yann@1
   553
			exit(1);
yann@1
   554
		}
yann@1
   555
		break;
yann@1
   556
	case ask_silent:
yann@1
   557
		if (stat(".config", &tmpstat)) {
yann@1
   558
			printf(_("***\n"
yann@39
   559
				"*** You have not yet configured "PROJECT_NAME"!\n"
yann@1
   560
				"***\n"
yann@1
   561
				"*** Please run some configurator (e.g. \"make oldconfig\" or\n"
yann@1
   562
				"*** \"make menuconfig\" or \"make xconfig\").\n"
yann@1
   563
				"***\n"));
yann@1
   564
			exit(1);
yann@1
   565
		}
yann@1
   566
	case ask_all:
yann@1
   567
	case ask_new:
yann@1
   568
		conf_read(NULL);
yann@1
   569
		break;
yann@1
   570
	case set_no:
yann@1
   571
	case set_mod:
yann@1
   572
	case set_yes:
yann@1
   573
	case set_random:
yann@1
   574
		name = getenv("KCONFIG_ALLCONFIG");
yann@1
   575
		if (name && !stat(name, &tmpstat)) {
yann@1
   576
			conf_read_simple(name, S_DEF_USER);
yann@1
   577
			break;
yann@1
   578
		}
yann@1
   579
		switch (input_mode) {
yann@1
   580
		case set_no:	 name = "allno.config"; break;
yann@1
   581
		case set_mod:	 name = "allmod.config"; break;
yann@1
   582
		case set_yes:	 name = "allyes.config"; break;
yann@1
   583
		case set_random: name = "allrandom.config"; break;
yann@1
   584
		default: break;
yann@1
   585
		}
yann@1
   586
		if (!stat(name, &tmpstat))
yann@1
   587
			conf_read_simple(name, S_DEF_USER);
yann@1
   588
		else if (!stat("all.config", &tmpstat))
yann@1
   589
			conf_read_simple("all.config", S_DEF_USER);
yann@1
   590
		break;
yann@1
   591
	default:
yann@1
   592
		break;
yann@1
   593
	}
yann@1
   594
yann@1
   595
	if (input_mode != ask_silent) {
yann@1
   596
		rootEntry = &rootmenu;
yann@1
   597
		conf(&rootmenu);
yann@1
   598
		if (input_mode == ask_all) {
yann@1
   599
			input_mode = ask_silent;
yann@1
   600
			valid_stdin = 1;
yann@1
   601
		}
yann@39
   602
	} else if (conf_get_changed()) {
yann@1
   603
		name = getenv("KCONFIG_NOSILENTUPDATE");
yann@1
   604
		if (name && *name) {
yann@1
   605
			fprintf(stderr, _("\n*** "PROJECT_NAME" configuration requires explicit update.\n\n"));
yann@1
   606
			return 1;
yann@1
   607
		}
yann@1
   608
	} else
yann@1
   609
		goto skip_check;
yann@1
   610
yann@1
   611
	do {
yann@1
   612
		conf_cnt = 0;
yann@1
   613
		check_conf(&rootmenu);
yann@1
   614
	} while (conf_cnt);
yann@39
   615
	if (conf_write(NULL)) {
yann@39
   616
		fprintf(stderr, _("\n*** Error during writing of "PROJECT_NAME" configuration.\n\n"));
yann@39
   617
		return 1;
yann@39
   618
	}
yann@39
   619
skip_check:
yann@1
   620
yann@39
   621
	return 0;
yann@1
   622
}