summaryrefslogtreecommitdiff
path: root/util/kconfig
diff options
context:
space:
mode:
Diffstat (limited to 'util/kconfig')
-rw-r--r--util/kconfig/Makefile3
-rw-r--r--util/kconfig/conf.c17
-rw-r--r--util/kconfig/confdata.c56
-rw-r--r--util/kconfig/patches/0001-Kconfig-Add-KCONFIG_STRICT-mode.patch4
-rw-r--r--util/kconfig/patches/0002-Kconfig-Change-symbol-override-from-warning-to-notic.patch6
-rw-r--r--util/kconfig/patches/0003-util-kconfig-conf.c-Fix-newline-in-error-printf.patch2
-rw-r--r--util/kconfig/patches/0005-util-kconfig-Ignore-extra-symbols-in-configs-instead.patch2
-rw-r--r--util/kconfig/patches/0007-kconfig-Allow-KCONFIG_STRICT-outside-of-confdata.c.patch4
-rw-r--r--util/kconfig/patches/0009-util-kconfig-Allow-emitting-false-booleans-into-kconfig-output.patch12
-rw-r--r--util/kconfig/patches/0011-remove-include-config-hardcodes.patch27
-rw-r--r--util/kconfig/patches/series1
-rw-r--r--util/kconfig/preprocess.c2
-rwxr-xr-xutil/kconfig/streamline_config.pl2
13 files changed, 57 insertions, 81 deletions
diff --git a/util/kconfig/Makefile b/util/kconfig/Makefile
index 5a215880b2..b8ef0fb4bb 100644
--- a/util/kconfig/Makefile
+++ b/util/kconfig/Makefile
@@ -69,7 +69,7 @@ localyesconfig localmodconfig: $(obj)/conf
# deprecated for external use
simple-targets := oldconfig allnoconfig allyesconfig allmodconfig \
alldefconfig randconfig listnewconfig olddefconfig syncconfig \
- helpnewconfig yes2modconfig mod2yesconfig
+ helpnewconfig yes2modconfig mod2yesconfig mod2noconfig
PHONY += $(simple-targets)
@@ -134,6 +134,7 @@ help:
@echo ' randconfig - New config with random answer to all options'
@echo ' yes2modconfig - Change answers from yes to mod if possible'
@echo ' mod2yesconfig - Change answers from mod to yes if possible'
+ @echo ' mod2noconfig - Change answers from mod to no if possible'
@echo ' listnewconfig - List new options'
@echo ' helpnewconfig - List new options and help text'
@echo ' olddefconfig - Same as oldconfig but sets new symbols to their'
diff --git a/util/kconfig/conf.c b/util/kconfig/conf.c
index 563755988c..e68da2d44f 100644
--- a/util/kconfig/conf.c
+++ b/util/kconfig/conf.c
@@ -37,6 +37,7 @@ enum input_mode {
olddefconfig,
yes2modconfig,
mod2yesconfig,
+ mod2noconfig,
};
static enum input_mode input_mode = oldaskconfig;
static int input_mode_opt;
@@ -165,8 +166,6 @@ enum conf_def_mode {
def_default,
def_yes,
def_mod,
- def_y2m,
- def_m2y,
def_no,
def_random
};
@@ -304,12 +303,10 @@ static bool conf_set_all_new_symbols(enum conf_def_mode mode)
return has_changed;
}
-static void conf_rewrite_mod_or_yes(enum conf_def_mode mode)
+static void conf_rewrite_tristates(tristate old_val, tristate new_val)
{
struct symbol *sym;
int i;
- tristate old_val = (mode == def_y2m) ? yes : mod;
- tristate new_val = (mode == def_y2m) ? mod : yes;
for_all_symbols(i, sym) {
if (sym_get_type(sym) == S_TRISTATE &&
@@ -687,6 +684,7 @@ static const struct option long_opts[] = {
{"olddefconfig", no_argument, &input_mode_opt, olddefconfig},
{"yes2modconfig", no_argument, &input_mode_opt, yes2modconfig},
{"mod2yesconfig", no_argument, &input_mode_opt, mod2yesconfig},
+ {"mod2noconfig", no_argument, &input_mode_opt, mod2noconfig},
{NULL, 0, NULL, 0}
};
@@ -715,6 +713,7 @@ static void conf_usage(const char *progname)
printf(" --randconfig New config with random answer to all options\n");
printf(" --yes2modconfig Change answers from yes to mod if possible\n");
printf(" --mod2yesconfig Change answers from mod to yes if possible\n");
+ printf(" --mod2noconfig Change answers from mod to no if possible\n");
printf(" (If none of the above is given, --oldaskconfig is the default)\n");
}
@@ -791,6 +790,7 @@ int main(int ac, char **av)
case olddefconfig:
case yes2modconfig:
case mod2yesconfig:
+ case mod2noconfig:
conf_read(NULL);
break;
case allnoconfig:
@@ -872,10 +872,13 @@ int main(int ac, char **av)
case savedefconfig:
break;
case yes2modconfig:
- conf_rewrite_mod_or_yes(def_y2m);
+ conf_rewrite_tristates(yes, mod);
break;
case mod2yesconfig:
- conf_rewrite_mod_or_yes(def_m2y);
+ conf_rewrite_tristates(mod, yes);
+ break;
+ case mod2noconfig:
+ conf_rewrite_tristates(mod, no);
break;
case oldaskconfig:
rootEntry = &rootmenu;
diff --git a/util/kconfig/confdata.c b/util/kconfig/confdata.c
index de421e0649..102f71659b 100644
--- a/util/kconfig/confdata.c
+++ b/util/kconfig/confdata.c
@@ -230,13 +230,6 @@ static const char *conf_get_autoheader_name(void)
return name ? name : "include/generated/autoconf.h";
}
-static const char *conf_get_autobase_name(void)
-{
- char *name = getenv("KCONFIG_SPLITCONFIG");
-
- return name ? name : "include/config/";
-}
-
static int conf_set_sym_val(struct symbol *sym, int def, int def_flags, char *p)
{
char *p2;
@@ -265,19 +258,21 @@ static int conf_set_sym_val(struct symbol *sym, int def, int def_flags, char *p)
p, sym->name);
return 1;
case S_STRING:
- if (*p++ != '"')
- break;
- for (p2 = p; (p2 = strpbrk(p2, "\"\\")); p2++) {
- if (*p2 == '"') {
- *p2 = 0;
+ /* No escaping for S_DEF_AUTO (include/config/auto.conf) */
+ if (def != S_DEF_AUTO) {
+ if (*p++ != '"')
break;
+ for (p2 = p; (p2 = strpbrk(p2, "\"\\")); p2++) {
+ if (*p2 == '"') {
+ *p2 = 0;
+ break;
+ }
+ memmove(p2, p2 + 1, strlen(p2));
}
- memmove(p2, p2 + 1, strlen(p2));
- }
- if (!p2) {
- if (def != S_DEF_AUTO)
+ if (!p2) {
conf_warning("invalid string found");
- return 1;
+ return 1;
+ }
}
/* fall through */
case S_INT:
@@ -732,7 +727,7 @@ static void print_symbol_for_autoconf(FILE *fp, struct symbol *sym)
if (print_negatives) {
out = OUTPUT_N;
}
- __print_symbol(fp, sym, out, true);
+ __print_symbol(fp, sym, out, false);
}
void print_symbol_for_listconfig(struct symbol *sym)
@@ -1019,10 +1014,10 @@ static int conf_write_autoconf_cmd(const char *autoconf_name)
fprintf(out, "\n$(deps_config): ;\n");
- if (ferror(out)) /* error check for all fprintf() calls */
- return -1;
-
+ ret = ferror(out); /* error check for all fprintf() calls */
fclose(out);
+ if (ret)
+ return -1;
if (rename(tmp, name)) {
perror("rename");
@@ -1034,14 +1029,19 @@ static int conf_write_autoconf_cmd(const char *autoconf_name)
static int conf_touch_deps(void)
{
- const char *name;
+ const char *name, *tmp;
struct symbol *sym;
int res, i;
- strcpy(depfile_path, conf_get_autobase_name());
- depfile_prefix_len = strlen(depfile_path);
-
name = conf_get_autoconfig_name();
+ tmp = strrchr(name, '/');
+ depfile_prefix_len = tmp ? tmp - name + 1 : 0;
+ if (depfile_prefix_len + 1 > sizeof(depfile_path))
+ return -1;
+
+ strncpy(depfile_path, name, depfile_prefix_len);
+ depfile_path[depfile_prefix_len] = 0;
+
conf_read_simple(name, S_DEF_AUTO);
sym_calc_value(modules_sym);
@@ -1134,10 +1134,10 @@ static int __conf_write_autoconf(const char *filename,
print_symbol(file, sym);
/* check possible errors in conf_write_heading() and print_symbol() */
- if (ferror(file))
- return -1;
-
+ ret = ferror(file);
fclose(file);
+ if (ret)
+ return -1;
if (rename(tmp, filename)) {
perror("rename");
diff --git a/util/kconfig/patches/0001-Kconfig-Add-KCONFIG_STRICT-mode.patch b/util/kconfig/patches/0001-Kconfig-Add-KCONFIG_STRICT-mode.patch
index 37f41b09e5..e87aaf5eaf 100644
--- a/util/kconfig/patches/0001-Kconfig-Add-KCONFIG_STRICT-mode.patch
+++ b/util/kconfig/patches/0001-Kconfig-Add-KCONFIG_STRICT-mode.patch
@@ -19,7 +19,7 @@ Index: kconfig/confdata.c
===================================================================
--- kconfig.orig/confdata.c
+++ kconfig/confdata.c
-@@ -428,6 +428,7 @@ load:
+@@ -430,6 +430,7 @@ load:
if (def == S_DEF_USER) {
sym = sym_find(line + 2 + strlen(CONFIG_));
if (!sym) {
@@ -27,7 +27,7 @@ Index: kconfig/confdata.c
conf_set_changed(true);
continue;
}
-@@ -510,6 +511,13 @@ load:
+@@ -512,6 +513,13 @@ load:
}
free(line);
fclose(in);
diff --git a/util/kconfig/patches/0002-Kconfig-Change-symbol-override-from-warning-to-notic.patch b/util/kconfig/patches/0002-Kconfig-Change-symbol-override-from-warning-to-notic.patch
index e9b6462094..cc37c0712c 100644
--- a/util/kconfig/patches/0002-Kconfig-Change-symbol-override-from-warning-to-notic.patch
+++ b/util/kconfig/patches/0002-Kconfig-Change-symbol-override-from-warning-to-notic.patch
@@ -40,7 +40,7 @@ Index: kconfig/confdata.c
static void conf_default_message_callback(const char *s)
{
printf("#\n# ");
-@@ -438,7 +448,7 @@ load:
+@@ -440,7 +450,7 @@ load:
sym->type = S_BOOLEAN;
}
if (sym->flags & def_flags) {
@@ -49,7 +49,7 @@ Index: kconfig/confdata.c
}
switch (sym->type) {
case S_BOOLEAN:
-@@ -477,7 +487,7 @@ load:
+@@ -479,7 +489,7 @@ load:
}
if (sym->flags & def_flags) {
@@ -58,7 +58,7 @@ Index: kconfig/confdata.c
}
if (conf_set_sym_val(sym, def, def_flags, p))
continue;
-@@ -502,7 +512,7 @@ load:
+@@ -504,7 +514,7 @@ load:
break;
case yes:
if (cs->def[def].tri != no)
diff --git a/util/kconfig/patches/0003-util-kconfig-conf.c-Fix-newline-in-error-printf.patch b/util/kconfig/patches/0003-util-kconfig-conf.c-Fix-newline-in-error-printf.patch
index dabb0d9fde..c49ae50d21 100644
--- a/util/kconfig/patches/0003-util-kconfig-conf.c-Fix-newline-in-error-printf.patch
+++ b/util/kconfig/patches/0003-util-kconfig-conf.c-Fix-newline-in-error-printf.patch
@@ -14,7 +14,7 @@ Index: kconfig/conf.c
===================================================================
--- kconfig.orig/conf.c
+++ kconfig/conf.c
-@@ -889,7 +889,7 @@ int main(int ac, char **av)
+@@ -892,7 +892,7 @@ int main(int ac, char **av)
if (input_mode == savedefconfig) {
if (conf_write_defconfig(defconfig_file)) {
diff --git a/util/kconfig/patches/0005-util-kconfig-Ignore-extra-symbols-in-configs-instead.patch b/util/kconfig/patches/0005-util-kconfig-Ignore-extra-symbols-in-configs-instead.patch
index 142788d089..d8e2dfee38 100644
--- a/util/kconfig/patches/0005-util-kconfig-Ignore-extra-symbols-in-configs-instead.patch
+++ b/util/kconfig/patches/0005-util-kconfig-Ignore-extra-symbols-in-configs-instead.patch
@@ -24,7 +24,7 @@ Index: kconfig/confdata.c
===================================================================
--- kconfig.orig/confdata.c
+++ kconfig/confdata.c
-@@ -438,7 +438,9 @@ load:
+@@ -440,7 +440,9 @@ load:
if (def == S_DEF_USER) {
sym = sym_find(line + 2 + strlen(CONFIG_));
if (!sym) {
diff --git a/util/kconfig/patches/0007-kconfig-Allow-KCONFIG_STRICT-outside-of-confdata.c.patch b/util/kconfig/patches/0007-kconfig-Allow-KCONFIG_STRICT-outside-of-confdata.c.patch
index 315d0e7f4b..13e4d893d5 100644
--- a/util/kconfig/patches/0007-kconfig-Allow-KCONFIG_STRICT-outside-of-confdata.c.patch
+++ b/util/kconfig/patches/0007-kconfig-Allow-KCONFIG_STRICT-outside-of-confdata.c.patch
@@ -36,7 +36,7 @@ Index: kconfig/conf.c
static void conf(struct menu *menu);
static void check_conf(struct menu *menu);
-@@ -721,6 +723,7 @@ int main(int ac, char **av)
+@@ -720,6 +722,7 @@ int main(int ac, char **av)
const char *progname = av[0];
int opt;
const char *name, *defconfig_file = NULL /* gcc uninit */;
@@ -62,7 +62,7 @@ Index: kconfig/confdata.c
===================================================================
--- kconfig.orig/confdata.c
+++ kconfig/confdata.c
-@@ -528,11 +528,7 @@ load:
+@@ -530,11 +530,7 @@ load:
free(line);
fclose(in);
diff --git a/util/kconfig/patches/0009-util-kconfig-Allow-emitting-false-booleans-into-kconfig-output.patch b/util/kconfig/patches/0009-util-kconfig-Allow-emitting-false-booleans-into-kconfig-output.patch
index aae6c97ab9..f05c620950 100644
--- a/util/kconfig/patches/0009-util-kconfig-Allow-emitting-false-booleans-into-kconfig-output.patch
+++ b/util/kconfig/patches/0009-util-kconfig-Allow-emitting-false-booleans-into-kconfig-output.patch
@@ -27,21 +27,21 @@ Index: kconfig/confdata.c
===================================================================
--- kconfig.orig/confdata.c
+++ kconfig/confdata.c
-@@ -720,7 +720,12 @@ static void print_symbol_for_dotconfig(F
+@@ -722,7 +722,12 @@ static void print_symbol_for_dotconfig(F
static void print_symbol_for_autoconf(FILE *fp, struct symbol *sym)
{
-- __print_symbol(fp, sym, OUTPUT_N_NONE, true);
+- __print_symbol(fp, sym, OUTPUT_N_NONE, false);
+ int print_negatives = getenv("KCONFIG_NEGATIVES") != NULL;
+ enum output_n out = OUTPUT_N_NONE;
+ if (print_negatives) {
+ out = OUTPUT_N;
+ }
-+ __print_symbol(fp, sym, out, true);
++ __print_symbol(fp, sym, out, false);
}
void print_symbol_for_listconfig(struct symbol *sym)
-@@ -745,6 +750,10 @@ static void print_symbol_for_c(FILE *fp,
+@@ -747,6 +752,10 @@ static void print_symbol_for_c(FILE *fp,
case S_TRISTATE:
switch (*val) {
case 'n':
@@ -52,7 +52,7 @@ Index: kconfig/confdata.c
return;
case 'm':
sym_suffix = "_MODULE";
-@@ -756,6 +765,12 @@ static void print_symbol_for_c(FILE *fp,
+@@ -758,6 +767,12 @@ static void print_symbol_for_c(FILE *fp,
case S_HEX:
if (val[0] != '0' || (val[1] != 'x' && val[1] != 'X'))
val_prefix = "0x";
@@ -65,7 +65,7 @@ Index: kconfig/confdata.c
break;
case S_STRING:
escaped = escape_string_value(val);
-@@ -1106,8 +1121,9 @@ static int __conf_write_autoconf(const c
+@@ -1113,8 +1128,9 @@ static int __conf_write_autoconf(const c
conf_write_heading(file, comment_style);
diff --git a/util/kconfig/patches/0011-remove-include-config-hardcodes.patch b/util/kconfig/patches/0011-remove-include-config-hardcodes.patch
deleted file mode 100644
index ca408d9301..0000000000
--- a/util/kconfig/patches/0011-remove-include-config-hardcodes.patch
+++ /dev/null
@@ -1,27 +0,0 @@
-Index: kconfig/confdata.c
-===================================================================
---- kconfig.orig/confdata.c
-+++ kconfig/confdata.c
-@@ -230,6 +230,13 @@ static const char *conf_get_autoheader_n
- return name ? name : "include/generated/autoconf.h";
- }
-
-+static const char *conf_get_autobase_name(void)
-+{
-+ char *name = getenv("KCONFIG_SPLITCONFIG");
-+
-+ return name ? name : "include/config/";
-+}
-+
- static int conf_set_sym_val(struct symbol *sym, int def, int def_flags, char *p)
- {
- char *p2;
-@@ -1031,7 +1038,7 @@ static int conf_touch_deps(void)
- struct symbol *sym;
- int res, i;
-
-- strcpy(depfile_path, "include/config/");
-+ strcpy(depfile_path, conf_get_autobase_name());
- depfile_prefix_len = strlen(depfile_path);
-
- name = conf_get_autoconfig_name();
diff --git a/util/kconfig/patches/series b/util/kconfig/patches/series
index bccab80fd2..13b684b12e 100644
--- a/util/kconfig/patches/series
+++ b/util/kconfig/patches/series
@@ -8,5 +8,4 @@
0008-kconfig-Add-wildcard-support-for-source.patch
0009-util-kconfig-Allow-emitting-false-booleans-into-kconfig-output.patch
0010-reenable-source-in-choice.patch
-0011-remove-include-config-hardcodes.patch
0013-util-kconfig-detect-ncurses-on-FreeBSD.patch
diff --git a/util/kconfig/preprocess.c b/util/kconfig/preprocess.c
index 0590f86df6..748da578b4 100644
--- a/util/kconfig/preprocess.c
+++ b/util/kconfig/preprocess.c
@@ -141,7 +141,7 @@ static char *do_lineno(int argc, char *argv[])
static char *do_shell(int argc, char *argv[])
{
FILE *p;
- char buf[256];
+ char buf[4096];
char *cmd;
size_t nread;
int i;
diff --git a/util/kconfig/streamline_config.pl b/util/kconfig/streamline_config.pl
index 1a5fea0519..3387ad7508 100755
--- a/util/kconfig/streamline_config.pl
+++ b/util/kconfig/streamline_config.pl
@@ -170,7 +170,7 @@ sub read_kconfig {
$source =~ s/\$\($env\)/$ENV{$env}/;
}
- open(my $kinfile, '<', $source) || die "Can't open $kconfig";
+ open(my $kinfile, '<', $source) || die "Can't open $source";
while (<$kinfile>) {
chomp;