carl9170: config: fix patching errors and update CMakeFiles
authorChristian Lamparter <chunkeey@gmail.com>
Sun, 10 Feb 2019 21:53:14 +0000 (22:53 +0100)
committerChristian Lamparter <chunkeey@gmail.com>
Sun, 10 Feb 2019 21:54:39 +0000 (22:54 +0100)
Signed-off-by: Christian Lamparter <chunkeey@gmail.com>
config/CMakeLists.txt
config/conf.c
config/confdata.c
config/zconf.y

index 0a96a82a1166e55d93d9daad285797736321a9c9..23e7218cfd9edbdba94907332d9ec2ae38a377ca 100644 (file)
@@ -11,13 +11,13 @@ include_directories(${CMAKE_CURRENT_SOURCE_DIR})
 
 file(MAKE_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/../include/generated")
 
-BISON_TARGET(zconf zconf.y zconf.tab.c COMPILE_FLAGS "-l -b zconf -p zconf -t")
-FLEX_TARGET(zconfscan zconf.l zconf.lex.c COMPILE_FLAGS "-Pzconf -L")
+BISON_TARGET(zconf zconf.y zconf.tab.c COMPILE_FLAGS "-l -b zconf -p yy -t")
+FLEX_TARGET(zconfscan zconf.l zconf.lex.c COMPILE_FLAGS "-Pyy -L")
 
 SET(zconf_deps ${FLEX_zconfscan_OUTPUTS})
 SET_SOURCE_FILES_PROPERTIES(${BISON_zconf_OUTPUTS}
       PROPERTIES OBJECT_DEPENDS "${zconf_deps}")
 
-set(conf_src conf.c ${BISON_zconf_OUTPUTS})
+set(conf_src conf.c symbol.c confdata.c expr.c preprocess.c ${BISON_zconf_OUTPUTS} ${FLEX_zconfscan_OUTPUTS})
 
 add_executable(conf ${conf_src})
index 89d87de2c93b8acb2d1c976d7f1c2edaa6ab77d5..58df1b76b5288ad46661d75cacf88ead9cf456f9 100644 (file)
@@ -22,6 +22,7 @@ static void check_conf(struct menu *menu);
 
 enum input_mode {
        oldaskconfig,
+       syncconfig,
        oldconfig,
        allnoconfig,
        allyesconfig,
@@ -31,11 +32,13 @@ enum input_mode {
        defconfig,
        savedefconfig,
        listnewconfig,
+       olddefconfig,
 };
 static enum input_mode input_mode = oldaskconfig;
 
 static int indent = 1;
 static int tty_stdio;
+static int sync_kconfig;
 static int conf_cnt;
 static char line[PATH_MAX];
 static struct menu *rootEntry;
@@ -96,6 +99,7 @@ static int conf_askvalue(struct symbol *sym, const char *def)
 
        switch (input_mode) {
        case oldconfig:
+       case syncconfig:
                if (sym_has_value(sym)) {
                        printf("%s\n", def);
                        return 0;
@@ -288,6 +292,7 @@ static int conf_choice(struct menu *menu)
                printf("[1-%d?]: ", cnt);
                switch (input_mode) {
                case oldconfig:
+               case syncconfig:
                        if (!is_new) {
                                cnt = def;
                                printf("%d\n", cnt);
@@ -443,8 +448,9 @@ static void check_conf(struct menu *menu)
 }
 
 static struct option long_opts[] = {
-       {"askconfig",       no_argument,       NULL, oldaskconfig},
-       {"config",          no_argument,       NULL, oldconfig},
+       {"oldaskconfig",    no_argument,       NULL, oldaskconfig},
+       {"oldconfig",       no_argument,       NULL, oldconfig},
+       {"syncconfig",      no_argument,       NULL, syncconfig},
        {"defconfig",       optional_argument, NULL, defconfig},
        {"savedefconfig",   required_argument, NULL, savedefconfig},
        {"allnoconfig",     no_argument,       NULL, allnoconfig},
@@ -453,6 +459,7 @@ static struct option long_opts[] = {
        {"alldefconfig",    no_argument,       NULL, alldefconfig},
        {"randconfig",      no_argument,       NULL, randconfig},
        {"listnewconfig",   no_argument,       NULL, listnewconfig},
+       {"olddefconfig",    no_argument,       NULL, olddefconfig},
        {NULL, 0, NULL, 0}
 };
 
@@ -462,10 +469,11 @@ static void conf_usage(const char *progname)
        printf("Usage: %s [-s] [option] <kconfig-file>\n", progname);
        printf("[option] is _one_ of the following:\n");
        printf("  --listnewconfig         List new options\n");
-       printf("  --askconfig             Start a new configuration using a line-oriented program\n");
-       printf("  --config                Update a configuration using a provided .config as base\n");
-       printf("  --silentconfig          Same as config, but quietly, additionally update deps\n");
-       printf("  --noconfig              Same as silentconfig but set new symbols to no\n");
+       printf("  --oldaskconfig          Start a new configuration using a line-oriented program\n");
+       printf("  --oldconfig             Update a configuration using a provided .config as base\n");
+       printf("  --syncconfig            Similar to oldconfig but generates configuration in\n"
+              "                          include/{generated/,config/}\n");
+       printf("  --olddefconfig          Same as oldconfig but sets new symbols to their default value\n");
        printf("  --defconfig <file>      New config with default defined in <file>\n");
        printf("  --savedefconfig <file>  Save the minimal current configuration to <file>\n");
        printf("  --allnoconfig           New config where all options are answered with no\n");
@@ -498,8 +506,8 @@ int main(int ac, char **av)
                         * Suppress distracting "configuration written to ..."
                         */
                        conf_set_message_callback(NULL);
-                        sync_kconfig = 1;
-                       break
+                       sync_kconfig = 1;
+                       break;
                case defconfig:
                case savedefconfig:
                        defconfig_file = optarg;
@@ -536,6 +544,7 @@ int main(int ac, char **av)
                case allmodconfig:
                case alldefconfig:
                case listnewconfig:
+               case olddefconfig:
                        break;
                case '?':
                        conf_usage(progname);
@@ -551,6 +560,18 @@ int main(int ac, char **av)
        name = av[optind];
        conf_parse(name);
        //zconfdump(stdout);
+       if (sync_kconfig) {
+               name = conf_get_configname();
+               if (stat(name, &tmpstat)) {
+                       fprintf(stderr, "***\n"
+                               "*** Configuration file \"%s\" not found!\n"
+                               "***\n"
+                               "*** Please run some configurator (e.g. \"make oldconfig\" or\n"
+                               "*** \"make menuconfig\" or \"make xconfig\").\n"
+                               "***\n", name);
+                       exit(1);
+               }
+       }
 
        switch (input_mode) {
        case defconfig:
@@ -566,9 +587,11 @@ int main(int ac, char **av)
                }
                break;
        case savedefconfig:
+       case syncconfig:
        case oldaskconfig:
        case oldconfig:
        case listnewconfig:
+       case olddefconfig:
                conf_read(NULL);
                break;
        case allnoconfig:
@@ -608,6 +631,18 @@ int main(int ac, char **av)
                break;
        }
 
+       if (sync_kconfig) {
+               name = getenv("KCONFIG_NOSILENTUPDATE");
+               if (name && *name) {
+                       if (conf_get_changed()) {
+                               fprintf(stderr,
+                                       "\n*** The configuration requires explicit update.\n\n");
+                               return 1;
+                       }
+                       no_conf_write = 1;
+               }
+       }
+
        switch (input_mode) {
        case allnoconfig:
                conf_set_all_new_symbols(def_no);
@@ -637,12 +672,16 @@ int main(int ac, char **av)
                /* fall through */
        case oldconfig:
        case listnewconfig:
+       case syncconfig:
                /* Update until a loop caused no more changes */
                do {
                        conf_cnt = 0;
                        check_conf(&rootmenu);
                } while (conf_cnt);
                break;
+       case olddefconfig:
+       default:
+               break;
        }
 
        if (input_mode == savedefconfig) {
@@ -652,15 +691,23 @@ int main(int ac, char **av)
                        return 1;
                }
        } else if (input_mode != listnewconfig) {
-               /*
-                * build so we shall update autoconf.
-                */
                if (!no_conf_write && conf_write(NULL)) {
                        fprintf(stderr, "\n*** Error during writing of the configuration.\n\n");
                        exit(1);
                }
-               if (conf_write_autoconf()) {
-                       fprintf(stderr, "\n*** Error during update of the configuration.\n\n");
+
+               /*
+                * Create auto.conf if it does not exist.
+                * This prevents GNU Make 4.1 or older from emitting
+                * "include/generated/auto.conf: No such file or directory"
+                * in the top-level Makefile
+                *
+                * syncconfig always creates or updates auto.conf because it is
+                * used during the build.
+                */
+               if (conf_write_autoconf(sync_kconfig) && sync_kconfig) {
+                       fprintf(stderr,
+                               "\n*** Error during sync of the configuration.\n\n");
                        return 1;
                }
        }
index a143cb3d8bb2cba9b0fd9cfab96c567a0c73ce58..57c09a7d3883914627ea3ababa9b6f1bbe486bd0 100644 (file)
@@ -582,46 +582,6 @@ kconfig_print_symbol(FILE *fp, struct symbol *sym, const char *value, void *arg)
        fprintf(fp, "%s%s=%s\n", CONFIG_, sym->name, value);
 }
 
-static void
-kconfig_print_cmake_symbol(FILE *fp, struct symbol *sym, const char *value, void *arg)
-{
-
-       switch (sym->type) {
-       case S_BOOLEAN:
-       case S_TRISTATE:
-               if (*value == 'n') {
-                       bool skip_unset = (arg != NULL);
-
-                       if (!skip_unset)
-                               fprintf(fp, "set(%s%s false)\n",
-                                       CONFIG_, sym->name, value);
-                       return;
-               } else if (*value == 'm') {
-                       abort();
-               } else {
-                       fprintf(fp, "set(%s%s true)\n", CONFIG_, sym->name, value);
-               }
-               break;
-       case S_HEX: {
-               const char *prefix = "";
-
-               if (value[0] != '0' || (value[1] != 'x' && value[1] != 'X'))
-                       prefix = "0x";
-               fprintf(fp, "set(%s%s %s%s)\n",
-                   CONFIG_, sym->name, prefix, value);
-               break;
-       }
-       case S_STRING:
-       case S_INT:
-               fprintf(fp, "set(%s%s %s)\n",
-                   CONFIG_, sym->name, value);
-               break;
-       default:
-               break;
-       }
-
-}
-
 static void
 kconfig_print_comment(FILE *fp, const char *value, void *arg)
 {
@@ -648,12 +608,6 @@ static struct conf_printer kconfig_printer_cb =
        .print_comment = kconfig_print_comment,
 };
 
-static struct conf_printer kconfig_printer_cmake_cb =
-{
-       .print_symbol = kconfig_print_cmake_symbol,
-       .print_comment = kconfig_print_comment,
-};
-
 /*
  * Header printer
  *
@@ -1061,13 +1015,17 @@ static int conf_touch_deps(void)
        return 0;
 }
 
-int conf_write_autoconf(void)
+int conf_write_autoconf(int overwrite)
 {
        struct symbol *sym;
        const char *name;
-       FILE *out, *tristate, *out_h, *out_c;
+       const char *autoconf_name = conf_get_autoconfig_name();
+       FILE *out, *tristate, *out_h;
        int i;
 
+       if (!overwrite && is_present(autoconf_name))
+               return 0;
+
        sym_clear_all_valid();
 
        conf_write_dep("include/generated/auto.conf.cmd");
@@ -1092,21 +1050,12 @@ int conf_write_autoconf(void)
                return 1;
        }
 
-       out_c = fopen(".tmpconfig.cmake", "w");
-       if (!out_c) {
-               fclose(out);
-               fclose(tristate);
-               fclose(out_h);
-       }
-
        conf_write_heading(out, &kconfig_printer_cb, NULL);
 
        conf_write_heading(tristate, &tristate_printer_cb, NULL);
 
        conf_write_heading(out_h, &header_printer_cb, NULL);
 
-       conf_write_heading(out_c, &kconfig_printer_cmake_cb, NULL);
-
        for_all_symbols(i, sym) {
                sym_calc_value(sym);
                if (!(sym->flags & SYMBOL_WRITE) || !sym->name)
@@ -1118,13 +1067,10 @@ int conf_write_autoconf(void)
                conf_write_symbol(tristate, sym, &tristate_printer_cb, (void *)1);
 
                conf_write_symbol(out_h, sym, &header_printer_cb, NULL);
-
-               conf_write_symbol(out_c, sym, &kconfig_printer_cmake_cb, NULL);
        }
        fclose(out);
        fclose(tristate);
        fclose(out_h);
-       fclose(out_c);
 
        name = getenv("KCONFIG_AUTOHEADER");
        if (!name)
@@ -1142,23 +1088,13 @@ int conf_write_autoconf(void)
        if (rename(".tmpconfig_tristate", name))
                return 1;
 
-       name = getenv("KCONFIG_CMAKE");
-       if (!name)
-               name = "config.cmake";
-       if (make_parent_dir(name))
+       if (make_parent_dir(autoconf_name))
                return 1;
-       if (rename(".tmpconfig.cmake", 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.
         */
-       if (rename(".tmpconfig", name))
+       if (rename(".tmpconfig", autoconf_name))
                return 1;
 
        return 0;
index e8bcb966b4ac56c8c336e21d60a1ab68f6424a7c..a990f46f38257702c30311adbca516514c178567 100644 (file)
@@ -497,7 +497,6 @@ void conf_parse(const char *name)
        zconf_initscan(name);
 
        _menu_init();
-       rootmenu.prompt = menu_add_prompt(P_MENU, "CARL9170 Firmware Configuration", NULL);
 
        if (getenv("ZCONF_DEBUG"))
                yydebug = 1;