add possibility to set default .config values
SVN-Revision: 9300
This commit is contained in:
		| @@ -144,8 +144,17 @@ config SOURCE_FEEDS_REV | |||||||
|  |  | ||||||
|  |  | ||||||
| source "toolchain/Config.in" | source "toolchain/Config.in" | ||||||
|  | menuconfig BUILDSYSTEM_SETTINGS | ||||||
|  |     bool "Buildsystem settings"  | ||||||
|  |  | ||||||
|  | config DOWNLOAD_FOLDER | ||||||
|  | 	string | ||||||
|  | 	prompt "Download folder" | ||||||
|  | 	default "" | ||||||
|  | 	depends BUILDSYSTEM_SETTINGS  | ||||||
| source "target/imagebuilder/Config.in" | source "target/imagebuilder/Config.in" | ||||||
| source "target/sdk/Config.in" | source "target/sdk/Config.in" | ||||||
|  |  | ||||||
| source "tmp/.config-package.in" | source "tmp/.config-package.in" | ||||||
|  |  | ||||||
|  |  | ||||||
|   | |||||||
| @@ -52,6 +52,8 @@ prepare-tmpinfo: FORCE | |||||||
| scripts/config/mconf: | scripts/config/mconf: | ||||||
| 	@+$(MAKE) -C scripts/config all | 	@+$(MAKE) -C scripts/config all | ||||||
|  |  | ||||||
|  | $(call  rdep,scripts/config,scripts/config/mconf) | ||||||
|  |  | ||||||
| scripts/config/conf: | scripts/config/conf: | ||||||
| 	@+$(MAKE) -C scripts/config conf | 	@+$(MAKE) -C scripts/config conf | ||||||
|  |  | ||||||
|   | |||||||
							
								
								
									
										2
									
								
								rules.mk
									
									
									
									
									
								
							
							
						
						
									
										2
									
								
								rules.mk
									
									
									
									
									
								
							| @@ -32,7 +32,7 @@ SUBDIR:=$(patsubst $(TOPDIR)/%,%,${CURDIR}) | |||||||
|  |  | ||||||
| OPTIMIZE_FOR_CPU:=$(ARCH) | OPTIMIZE_FOR_CPU:=$(ARCH) | ||||||
|  |  | ||||||
| DL_DIR:=$(TOPDIR)/dl | DL_DIR:=$(call qstrip,$(if $(CONFIG_DOWNLOAD_FOLDER), $(CONFIG_DOWNLOAD_FOLDER),$(TOPDIR)/dl)) | ||||||
| BIN_DIR:=$(TOPDIR)/bin | BIN_DIR:=$(TOPDIR)/bin | ||||||
| INCLUDE_DIR:=$(TOPDIR)/include | INCLUDE_DIR:=$(TOPDIR)/include | ||||||
| SCRIPT_DIR:=$(TOPDIR)/scripts | SCRIPT_DIR:=$(TOPDIR)/scripts | ||||||
|   | |||||||
| @@ -33,7 +33,7 @@ clean: | |||||||
| 	rm -f *.o $(clean-files) conf mconf | 	rm -f *.o $(clean-files) conf mconf | ||||||
| 	$(MAKE) -C lxdialog clean | 	$(MAKE) -C lxdialog clean | ||||||
|  |  | ||||||
| zconf.tab.o: lex.zconf.c zconf.hash.c | zconf.tab.o: lex.zconf.c zconf.hash.c confdata.c | ||||||
|  |  | ||||||
| kconfig_load.o: lkc_defs.h | kconfig_load.o: lkc_defs.h | ||||||
|  |  | ||||||
|   | |||||||
| @@ -14,6 +14,8 @@ | |||||||
| #define LKC_DIRECT_LINK | #define LKC_DIRECT_LINK | ||||||
| #include "lkc.h" | #include "lkc.h" | ||||||
|  |  | ||||||
|  | #define LOCAL_BUILD_SETTINGS "/.openwrt/defconfig" | ||||||
|  |  | ||||||
| static void conf_warning(const char *fmt, ...) | static void conf_warning(const char *fmt, ...) | ||||||
| 	__attribute__ ((format (printf, 1, 2))); | 	__attribute__ ((format (printf, 1, 2))); | ||||||
|  |  | ||||||
| @@ -104,55 +106,12 @@ void conf_reset(void) | |||||||
| 			sym->user.tri = no; | 			sym->user.tri = no; | ||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
|  | 	conf_read_simple(NULL, 0); | ||||||
| } | } | ||||||
|  |  | ||||||
| int conf_read_simple(const char *name) | int conf_read_file(FILE *in, struct symbol *sym){ | ||||||
| { |  | ||||||
| 	FILE *in = NULL; |  | ||||||
| 	char line[1024]; | 	char line[1024]; | ||||||
| 	char *p, *p2; | 	char *p, *p2; | ||||||
| 	struct symbol *sym; |  | ||||||
| 	int i; |  | ||||||
|  |  | ||||||
| 	if (name) { |  | ||||||
| 		in = zconf_fopen(name); |  | ||||||
| 	} else { |  | ||||||
| 		const char **names = conf_confnames; |  | ||||||
| 		while ((name = *names++)) { |  | ||||||
| 			name = conf_expand_value(name); |  | ||||||
| 			in = zconf_fopen(name); |  | ||||||
| 			if (in) { |  | ||||||
| 				printf(_("#\n" |  | ||||||
| 				         "# using defaults found in %s\n" |  | ||||||
| 				         "#\n"), name); |  | ||||||
| 				break; |  | ||||||
| 			} |  | ||||||
| 		} |  | ||||||
| 	} |  | ||||||
| 	if (!in) |  | ||||||
| 		return 1; |  | ||||||
|  |  | ||||||
| 	conf_filename = name; |  | ||||||
| 	conf_lineno = 0; |  | ||||||
| 	conf_warnings = 0; |  | ||||||
| 	conf_unsaved = 0; |  | ||||||
|  |  | ||||||
| 	for_all_symbols(i, sym) { |  | ||||||
| 		sym->flags |= SYMBOL_NEW | SYMBOL_CHANGED; |  | ||||||
| 		if (sym_is_choice(sym)) |  | ||||||
| 			sym->flags &= ~SYMBOL_NEW; |  | ||||||
| 		sym->flags &= ~SYMBOL_VALID; |  | ||||||
| 		switch (sym->type) { |  | ||||||
| 		case S_INT: |  | ||||||
| 		case S_HEX: |  | ||||||
| 		case S_STRING: |  | ||||||
| 			if (sym->user.val) |  | ||||||
| 				free(sym->user.val); |  | ||||||
| 		default: |  | ||||||
| 			sym->user.val = NULL; |  | ||||||
| 			sym->user.tri = no; |  | ||||||
| 		} |  | ||||||
| 	} |  | ||||||
|  |  | ||||||
| 	while (fgets(line, sizeof(line), in)) { | 	while (fgets(line, sizeof(line), in)) { | ||||||
| 		conf_lineno++; | 		conf_lineno++; | ||||||
| @@ -169,12 +128,12 @@ int conf_read_simple(const char *name) | |||||||
| 				continue; | 				continue; | ||||||
| 			sym = sym_find(line + 9); | 			sym = sym_find(line + 9); | ||||||
| 			if (!sym) { | 			if (!sym) { | ||||||
| 				conf_warning("trying to assign nonexistent symbol %s", line + 9); | 				//conf_warning("trying to assign nonexistent symbol %s", line + 9); | ||||||
| 				break; | 				break; | ||||||
| 			} else if (!(sym->flags & SYMBOL_NEW)) { | 			} /*else if (!(sym->flags & SYMBOL_NEW)) { | ||||||
| 				conf_warning("trying to reassign symbol %s", sym->name); | 				//conf_warning("trying to reassign symbol %s", sym->name); | ||||||
| 				break; | 				break; | ||||||
| 			} | 			}*/ | ||||||
| 			switch (sym->type) { | 			switch (sym->type) { | ||||||
| 			case S_BOOLEAN: | 			case S_BOOLEAN: | ||||||
| 			case S_TRISTATE: | 			case S_TRISTATE: | ||||||
| @@ -199,12 +158,12 @@ int conf_read_simple(const char *name) | |||||||
| 				*p2 = 0; | 				*p2 = 0; | ||||||
| 			sym = sym_find(line + 7); | 			sym = sym_find(line + 7); | ||||||
| 			if (!sym) { | 			if (!sym) { | ||||||
| 				conf_warning("trying to assign nonexistent symbol %s", line + 7); | 				//conf_warning("trying to assign nonexistent symbol %s", line + 7); | ||||||
| 				break; | 				break; | ||||||
| 			} else if (!(sym->flags & SYMBOL_NEW)) { | 			} /*else if (!(sym->flags & SYMBOL_NEW)) { | ||||||
| 				conf_warning("trying to reassign symbol %s", sym->name); | 				conf_warning("trying to reassign symbol %s", sym->name); | ||||||
| 				break; | 				break; | ||||||
| 			} | 			}*/ | ||||||
| 			switch (sym->type) { | 			switch (sym->type) { | ||||||
| 			case S_TRISTATE: | 			case S_TRISTATE: | ||||||
| 				if (p[0] == 'm') { | 				if (p[0] == 'm') { | ||||||
| @@ -283,8 +242,79 @@ int conf_read_simple(const char *name) | |||||||
| 	} | 	} | ||||||
| 	fclose(in); | 	fclose(in); | ||||||
|  |  | ||||||
|  | 	return 0; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | int conf_read_simple(const char *name, int load_config) | ||||||
|  | { | ||||||
|  | 	FILE *in = NULL; | ||||||
|  | 	FILE *defaults = NULL; | ||||||
|  | 	struct symbol *sym; | ||||||
|  | 	int i; | ||||||
|  | 	char *home_dir = getenv("HOME"); | ||||||
|  | 	char *default_config_path = NULL; | ||||||
|  | 	 | ||||||
|  | 	if(home_dir){ | ||||||
|  | 			default_config_path = malloc(strlen(home_dir) + sizeof(LOCAL_BUILD_SETTINGS) + 1); | ||||||
|  | 			sprintf(default_config_path, "%s%s", home_dir, LOCAL_BUILD_SETTINGS); | ||||||
|  | 			defaults = zconf_fopen(default_config_path); | ||||||
|  | 			if(defaults) | ||||||
|  | 					printf("# using buildsystem predefines from %s\n", default_config_path); | ||||||
|  | 			free(default_config_path); | ||||||
|  | 	} | ||||||
|  | 	 | ||||||
|  | 	if(load_config){ | ||||||
|  | 		if (name) { | ||||||
|  | 			in = zconf_fopen(name); | ||||||
|  | 		} else { | ||||||
|  | 			const char **names = conf_confnames; | ||||||
|  | 			while ((name = *names++)) { | ||||||
|  | 				name = conf_expand_value(name); | ||||||
|  | 				in = zconf_fopen(name); | ||||||
|  | 				if (in) { | ||||||
|  | 					printf(_("#\n" | ||||||
|  | 					         "# using defaults found in %s\n" | ||||||
|  | 					         "#\n"), name); | ||||||
|  | 					break; | ||||||
|  | 				} | ||||||
|  | 			} | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	if (!in && !defaults) | ||||||
|  | 		return 1; | ||||||
|  |  | ||||||
|  | 	conf_filename = name; | ||||||
|  | 	conf_lineno = 0; | ||||||
|  | 	conf_warnings = 0; | ||||||
|  | 	conf_unsaved = 0; | ||||||
|  | 	 | ||||||
|  | 	for_all_symbols(i, sym) { | ||||||
|  | 		sym->flags |= SYMBOL_NEW | SYMBOL_CHANGED; | ||||||
|  | 		if (sym_is_choice(sym)) | ||||||
|  | 			sym->flags &= ~SYMBOL_NEW; | ||||||
|  | 		sym->flags &= ~SYMBOL_VALID; | ||||||
|  | 		switch (sym->type) { | ||||||
|  | 		case S_INT: | ||||||
|  | 		case S_HEX: | ||||||
|  | 		case S_STRING: | ||||||
|  | 			if (sym->user.val) | ||||||
|  | 				free(sym->user.val); | ||||||
|  | 		default: | ||||||
|  | 			sym->user.val = NULL; | ||||||
|  | 			sym->user.tri = no; | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	if(defaults) | ||||||
|  | 		conf_read_file(defaults, sym); | ||||||
|  | 	 | ||||||
|  | 	if(in) | ||||||
|  | 		conf_read_file(in, sym); | ||||||
|  | 	 | ||||||
| 	if (modules_sym) | 	if (modules_sym) | ||||||
| 		sym_calc_value(modules_sym); | 		sym_calc_value(modules_sym); | ||||||
|  |  | ||||||
| 	return 0;	 | 	return 0;	 | ||||||
| } | } | ||||||
|  |  | ||||||
| @@ -295,7 +325,7 @@ int conf_read(const char *name) | |||||||
| 	struct expr *e; | 	struct expr *e; | ||||||
| 	int i; | 	int i; | ||||||
|  |  | ||||||
| 	if (conf_read_simple(name)) | 	if (conf_read_simple(name, 1)) | ||||||
| 		return 1; | 		return 1; | ||||||
|  |  | ||||||
| 	for_all_symbols(i, sym) { | 	for_all_symbols(i, sym) { | ||||||
|   | |||||||
| @@ -3,7 +3,7 @@ | |||||||
| P(conf_parse,void,(const char *name)); | P(conf_parse,void,(const char *name)); | ||||||
| P(conf_read,int,(const char *name)); | P(conf_read,int,(const char *name)); | ||||||
| P(conf_reset,void,(void)); | P(conf_reset,void,(void)); | ||||||
| P(conf_read_simple,int,(const char *name)); | P(conf_read_simple,int,(const char *name, int load_config)); | ||||||
| P(conf_write,int,(const char *name)); | P(conf_write,int,(const char *name)); | ||||||
|  |  | ||||||
| /* menu.c */ | /* menu.c */ | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 John Crispin
					John Crispin