123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207 |
- ---
- conf.c | 1
- confdata.c | 62 ++++++++++++++++++++++++++++++++++++++++++++++---------------
- util.c | 16 +++++++++++++--
- 3 files changed, 61 insertions(+), 18 deletions(-)
- Index: kconfig/conf.c
- ===================================================================
- --- kconfig.orig/conf.c
- +++ kconfig/conf.c
- @@ -565,7 +565,6 @@ 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)) {
- Index: kconfig/confdata.c
- ===================================================================
- --- kconfig.orig/confdata.c
- +++ kconfig/confdata.c
- @@ -13,6 +13,7 @@
- #include <string.h>
- #include <time.h>
- #include <unistd.h>
- +#include <libgen.h>
-
- #include "lkc.h"
-
- @@ -76,9 +77,7 @@ const char *conf_get_configname(void)
-
- const char *conf_get_autoconfig_name(void)
- {
- - char *name = getenv("KCONFIG_AUTOCONFIG");
- -
- - return name ? name : "include/config/auto.conf";
- + return getenv("KCONFIG_AUTOCONFIG");
- }
-
- static char *conf_expand_value(const char *in)
- @@ -748,6 +747,9 @@ int conf_write(const char *name)
- char dirname[PATH_MAX+1], tmpname[PATH_MAX+1], newname[PATH_MAX+1];
- char *env;
-
- + if (!name)
- + name = conf_get_configname();
- +
- dirname[0] = 0;
- if (name && name[0]) {
- struct stat st;
- @@ -842,6 +844,7 @@ static int conf_split_config(void)
- {
- const char *name;
- char path[PATH_MAX+1];
- + char *opwd, *dir, *_name;
- char *s, *d, c;
- struct symbol *sym;
- struct stat sb;
- @@ -851,8 +854,20 @@ static int conf_split_config(void)
- conf_read_simple(name, S_DEF_AUTO);
- sym_calc_value(modules_sym);
-
- - if (chdir("include/config"))
- - return 1;
- + opwd = malloc(256);
- + _name = strdup(name);
- + if (opwd == NULL || _name == NULL)
- + return 1;
- + opwd = getcwd(opwd, 256);
- + dir = dirname(_name);
- + if (dir == NULL) {
- + res = 1;
- + goto err;
- + }
- + if (chdir(dir)) {
- + res = 1;
- + goto err;
- + }
-
- res = 0;
- for_all_symbols(i, sym) {
- @@ -945,9 +960,11 @@ static int conf_split_config(void)
- close(fd);
- }
- out:
- - if (chdir("../.."))
- - return 1;
- -
- + if (chdir(opwd))
- + res = 1;
- +err:
- + free(opwd);
- + free(_name);
- return res;
- }
-
- @@ -957,25 +974,38 @@ int conf_write_autoconf(void)
- const char *name;
- FILE *out, *tristate, *out_h;
- int i;
- + char dir[PATH_MAX+1], buf[PATH_MAX+1];
- + char *s;
- +
- + strcpy(dir, conf_get_configname());
- + s = strrchr(dir, '/');
- + if (s)
- + s[1] = 0;
- + else
- + dir[0] = 0;
-
- sym_clear_all_valid();
-
- - file_write_dep("include/config/auto.conf.cmd");
- + sprintf(buf, "%s.config.cmd", dir);
- + file_write_dep(buf);
-
- if (conf_split_config())
- return 1;
-
- - out = fopen(".tmpconfig", "w");
- + sprintf(buf, "%s.tmpconfig", dir);
- + out = fopen(buf, "w");
- if (!out)
- return 1;
-
- - tristate = fopen(".tmpconfig_tristate", "w");
- + sprintf(buf, "%s.tmpconfig_tristate", dir);
- + tristate = fopen(buf, "w");
- if (!tristate) {
- fclose(out);
- return 1;
- }
-
- - out_h = fopen(".tmpconfig.h", "w");
- + sprintf(buf, "%s.tmpconfig.h", dir);
- + out_h = fopen(buf, "w");
- if (!out_h) {
- fclose(out);
- fclose(tristate);
- @@ -1007,19 +1037,22 @@ int conf_write_autoconf(void)
- name = getenv("KCONFIG_AUTOHEADER");
- if (!name)
- name = "include/generated/autoconf.h";
- - if (rename(".tmpconfig.h", name))
- + sprintf(buf, "%s.tmpconfig.h", dir);
- + if (rename(buf, name))
- return 1;
- name = getenv("KCONFIG_TRISTATE");
- if (!name)
- name = "include/config/tristate.conf";
- - if (rename(".tmpconfig_tristate", name))
- + sprintf(buf, "%s.tmpconfig_tristate", dir);
- + if (rename(buf, name))
- return 1;
- name = conf_get_autoconfig_name();
- /*
- * 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))
- + sprintf(buf, "%s.tmpconfig", dir);
- + if (rename(buf, name))
- return 1;
-
- return 0;
- Index: kconfig/util.c
- ===================================================================
- --- kconfig.orig/util.c
- +++ kconfig/util.c
- @@ -34,6 +34,8 @@ struct file *file_lookup(const char *nam
- /* write a dependency file as used by kbuild to track dependencies */
- int file_write_dep(const char *name)
- {
- + char *str;
- + char buf[PATH_MAX+1], buf2[PATH_MAX+1], dir[PATH_MAX+1];
- struct symbol *sym, *env_sym;
- struct expr *e;
- struct file *file;
- @@ -41,7 +43,16 @@ int file_write_dep(const char *name)
-
- if (!name)
- name = ".kconfig.d";
- - out = fopen("..config.tmp", "w");
- +
- + strcpy(dir, conf_get_configname());
- + str = strrchr(dir, '/');
- + if (str)
- + str[1] = 0;
- + else
- + dir[0] = 0;
- +
- + sprintf(buf, "%s..config.tmp", dir);
- + out = fopen(buf, "w");
- if (!out)
- return 1;
- fprintf(out, "deps_config := \\\n");
- @@ -72,7 +83,8 @@ int file_write_dep(const char *name)
-
- fprintf(out, "\n$(deps_config): ;\n");
- fclose(out);
- - rename("..config.tmp", name);
- + sprintf(buf2, "%s%s", dir, name);
- + rename(buf, buf2);
- return 0;
- }
-
|