kconfig: create directories needed for syncconfig by itself
authorMasahiro Yamada <yamada.masahiro@socionext.com>
Fri, 20 Jul 2018 07:46:29 +0000 (16:46 +0900)
committerMasahiro Yamada <yamada.masahiro@socionext.com>
Wed, 25 Jul 2018 14:25:30 +0000 (23:25 +0900)
'make syncconfig' creates some files such as include/config/auto.conf,
include/generate/autoconf.h, etc. but the necessary directory creation
relies on scripts/kconfig/Makefile.

To make Kconfig self-contained, create directories as needed in
conf_write_autoconf().

This change allows scripts/kconfig/Makefile cleanups; syncconfig can
be merged into simple-targets.

Signed-off-by: Masahiro Yamada <yamada.masahiro@socionext.com>
scripts/kconfig/Makefile
scripts/kconfig/confdata.c

index bd8da65..7f3eeca 100644 (file)
@@ -3,8 +3,7 @@
 # Kernel configuration targets
 # These targets are used from top-level makefile
 
-PHONY += xconfig gconfig menuconfig config syncconfig \
-       localmodconfig localyesconfig
+PHONY += xconfig gconfig menuconfig config localmodconfig localyesconfig
 
 ifdef KBUILD_KCONFIG
 Kconfig := $(KBUILD_KCONFIG)
@@ -34,12 +33,6 @@ config: $(obj)/conf
 nconfig: $(obj)/nconf
        $< $(silent) $(Kconfig)
 
-# This has become an internal implementation detail and is now deprecated
-# for external use.
-syncconfig: $(obj)/conf
-       $(Q)mkdir -p include/config include/generated
-       $< $(silent) --$@ $(Kconfig)
-
 localyesconfig localmodconfig: $(obj)/conf
        $(Q)perl $(srctree)/$(src)/streamline_config.pl --$@ $(srctree) $(Kconfig) > .tmp.config
        $(Q)if [ -f .config ]; then                                     \
@@ -55,8 +48,12 @@ localyesconfig localmodconfig: $(obj)/conf
        $(Q)rm -f .tmp.config
 
 # These targets map 1:1 to the commandline options of 'conf'
+#
+# Note:
+#  syncconfig has become an internal implementation detail and is now
+#  deprecated for external use
 simple-targets := oldconfig allnoconfig allyesconfig allmodconfig \
-       alldefconfig randconfig listnewconfig olddefconfig
+       alldefconfig randconfig listnewconfig olddefconfig syncconfig
 PHONY += $(simple-targets)
 
 $(simple-targets): $(obj)/conf
index 88429d7..fad403d 100644 (file)
@@ -899,6 +899,9 @@ static int conf_write_dep(const char *name)
 
        fprintf(out, "\n$(deps_config): ;\n");
        fclose(out);
+
+       if (make_parent_dir(name))
+               return 1;
        rename("..config.tmp", name);
        return 0;
 }
@@ -915,6 +918,8 @@ static int conf_split_config(void)
        conf_read_simple(name, S_DEF_AUTO);
        sym_calc_value(modules_sym);
 
+       if (make_parent_dir("include/config/foo.h"))
+               return 1;
        if (chdir("include/config"))
                return 1;
 
@@ -991,6 +996,7 @@ static int conf_split_config(void)
                                res = 1;
                                goto out;
                        }
+
                        /* Try it again. */
                        fd = open(path, O_WRONLY | O_CREAT | O_TRUNC, 0644);
                        if (fd == -1) {
@@ -1063,14 +1069,22 @@ int conf_write_autoconf(void)
        name = getenv("KCONFIG_AUTOHEADER");
        if (!name)
                name = "include/generated/autoconf.h";
+       if (make_parent_dir(name))
+               return 1;
        if (rename(".tmpconfig.h", name))
                return 1;
+
        name = getenv("KCONFIG_TRISTATE");
        if (!name)
                name = "include/config/tristate.conf";
+       if (make_parent_dir(name))
+               return 1;
        if (rename(".tmpconfig_tristate", name))
                return 1;
+
        name = conf_get_autoconfig_name();
+       if (make_parent_dir(name))
+               return 1;
        /*
         * This must be the last step, kbuild has a dependency on auto.conf
         * and this marks the successful completion of the previous steps.