lkml.org 
[lkml]   [2018]   [Feb]   [16]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
Patch in this message
/
From
Subject[PATCH 2/3] Kconfig: improve handling for all{rand,yes,no,}.config fragments
Date
The kernel currently supports two methods of dealing with config
fragments in the tree:

a) Running "make foo.config" looks for arch/$(ARCH)/configs/foo.config
and kernel/configs/foo.config, and applies the defaults from those
files on top of the current configuration.

b) Running "KCONFIG_ALLCONFIG=1 make randconfig" (or the equivalent
allmodconfig/allnoconfig/allyesconfig/alldefconfig) will look
for a "allrandconfig.config" file in the current directory or the
top of the $(srctree). These are used as defaults before we generate
the remaining options.

This is rather inconsistent, and prevents us from easily shipping
good defaults for "randconfig". I'm extending the logic here so that
the second case also looks for the hardcoded file names in the standard
directories (first arch/$(ARCH)/configs/, then kernel/configs) in the
source tree.

Signed-off-by: Arnd Bergmann <arnd@arndb.de>
---
scripts/kconfig/conf.c | 27 +++++++++++++++++++--------
1 file changed, 19 insertions(+), 8 deletions(-)

diff --git a/scripts/kconfig/conf.c b/scripts/kconfig/conf.c
index 866369f10ff8..848bf4d15e9a 100644
--- a/scripts/kconfig/conf.c
+++ b/scripts/kconfig/conf.c
@@ -493,8 +493,9 @@ int main(int ac, char **av)
{
const char *progname = av[0];
int opt;
- const char *name, *defconfig_file = NULL /* gcc uninit */;
+ const char *arch, *name, *defconfig_file = NULL /* gcc uninit */;
struct stat tmpstat;
+ char fullname[PATH_MAX+1];

setlocale(LC_ALL, "");
bindtextdomain(PACKAGE, LOCALEDIR);
@@ -621,14 +622,24 @@ int main(int ac, char **av)
case randconfig: name = "allrandom.config"; break;
default: break;
}
- if (conf_read_simple(name, S_DEF_USER) &&
- conf_read_simple("all.config", S_DEF_USER)) {
- fprintf(stderr,
- _("*** KCONFIG_ALLCONFIG set, but no \"%s\" or \"all.config\" file found\n"),
- name);
- exit(1);
+ /* try ./name, arch/$(ARCH)/configs/name and kernel/config/name */
+ if (!conf_read_simple(name, S_DEF_USER))
+ break;
+ arch = getenv("ARCH");
+ if (arch) {
+ snprintf(fullname, sizeof(fullname), "arch/%s/configs/%s",
+ arch, name);
+ if (!conf_read_simple(fullname, S_DEF_USER))
+ break;
}
- break;
+ snprintf(fullname, sizeof(fullname), "kernel/configs/%s", name);
+ if (!conf_read_simple(fullname, S_DEF_USER))
+ break;
+
+ fprintf(stderr,
+ _("*** KCONFIG_ALLCONFIG set, but no \"%s\" or \"all.config\" file found\n"),
+ name);
+ exit(1);
default:
break;
}
--
2.9.0
\
 
 \ /
  Last update: 2018-02-16 22:43    [W:0.325 / U:0.268 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site