add possibility to set default .config values

SVN-Revision: 9300
master
John Crispin 17 years ago
parent 3568f0c247
commit 1a3c4d1090
  1. 9
      Config.in
  2. 2
      include/toplevel.mk
  3. 2
      rules.mk
  4. 4
      scripts/config/Makefile
  5. 140
      scripts/config/confdata.c
  6. 2
      scripts/config/lkc_proto.h

@ -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

@ -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

@ -27,13 +27,13 @@ lxdialog/lxdialog:
$(MAKE) -C lxdialog $(MAKE) -C lxdialog
conf: $(conf-objs) conf: $(conf-objs)
mconf: $(mconf-objs) mconf: $(mconf-objs)
clean: 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)));
@ -87,7 +89,7 @@ void conf_reset(void)
{ {
struct symbol *sym; struct symbol *sym;
int i; int i;
for_all_symbols(i, sym) { for_all_symbols(i, sym) {
sym->flags |= SYMBOL_NEW | SYMBOL_CHANGED; sym->flags |= SYMBOL_NEW | SYMBOL_CHANGED;
if (sym_is_choice(sym)) if (sym_is_choice(sym))
@ -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,9 +242,80 @@ 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;
} }
int conf_read(const char *name) int conf_read(const char *name)
@ -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 */

Loading…
Cancel
Save