| --- |
| 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 |
| @@ -503,7 +503,6 @@ |
| } |
| 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 |
| @@ -71,9 +71,7 @@ |
| |
| 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) |
| @@ -563,6 +561,9 @@ |
| 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; |
| @@ -661,6 +662,7 @@ |
| { |
| const char *name; |
| char path[PATH_MAX+1]; |
| + char *opwd, *dir, *_name; |
| char *s, *d, c; |
| struct symbol *sym; |
| struct stat sb; |
| @@ -669,8 +671,20 @@ |
| name = conf_get_autoconfig_name(); |
| conf_read_simple(name, S_DEF_AUTO); |
| |
| - 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) { |
| @@ -763,9 +777,11 @@ |
| close(fd); |
| } |
| out: |
| - if (chdir("../..")) |
| - return 1; |
| - |
| + if (chdir(opwd)) |
| + res = 1; |
| +err: |
| + free(opwd); |
| + free(_name); |
| return res; |
| } |
| |
| @@ -776,25 +792,38 @@ |
| 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); |
| @@ -871,19 +900,22 @@ |
| 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 |
| @@ -32,6 +32,8 @@ |
| /* 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; |
| @@ -39,7 +41,16 @@ |
| |
| 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"); |
| @@ -70,7 +81,8 @@ |
| |
| fprintf(out, "\n$(deps_config): ;\n"); |
| fclose(out); |
| - rename("..config.tmp", name); |
| + sprintf(buf2, "%s%s", dir, name); |
| + rename(buf, buf2); |
| return 0; |
| } |
| |