From 39ca6d50d8d52a9c8cb252cffb23a9d6f0c2942d Mon Sep 17 00:00:00 2001 From: Will Wagner Date: Mon, 11 Jan 2010 12:28:50 +0000 Subject: Move config files into output directory for out-of-tree build Closes #1213 Signed-off-by: Will Wagner Signed-off-by: Peter Korsgaard --- package/config/.gitignore | 1 - package/config/Makefile | 1 - package/config/confdata.c | 53 +++++++++++++++++++++++++++++++++++++++++------ package/config/lkc.h | 1 + package/config/util.c | 33 ++++++++++++++++++++++------- 5 files changed, 74 insertions(+), 15 deletions(-) (limited to 'package') diff --git a/package/config/.gitignore b/package/config/.gitignore index 161a19ada..1ea18a233 100644 --- a/package/config/.gitignore +++ b/package/config/.gitignore @@ -1,4 +1,3 @@ -/buildroot-config /conf /mconf /qconf diff --git a/package/config/Makefile b/package/config/Makefile index a10085007..197c50026 100644 --- a/package/config/Makefile +++ b/package/config/Makefile @@ -43,7 +43,6 @@ distclean: clean $(Q)rm -f $(lxdialog) $(conf-objs) $(mconf-objs) $(kxgettext-objs) \ $(hostprogs-y) $(qconf-cxxobjs) $(qconf-objs) $(gconf-objs) \ mconf .depend - $(Q)rm -rf buildroot-config FORCE: .PHONY: FORCE clean distclean diff --git a/package/config/confdata.c b/package/config/confdata.c index 52199123a..fe1fc2e8e 100644 --- a/package/config/confdata.c +++ b/package/config/confdata.c @@ -423,8 +423,17 @@ int conf_write(const char *name) basename = conf_get_configname(); } else basename = name; - } else + } else { + char *slash; + basename = conf_get_configname(); + if((slash = strrchr(basename, '/'))) { + int size = slash - basename + 1; + memcpy(dirname, basename, size); + dirname[size] = 0; + basename = slash + 1; + } + } sprintf(newname, "%s%s", dirname, basename); env = getenv("KCONFIG_OVERWRITECONFIG"); @@ -688,19 +697,51 @@ int conf_write_autoconf(void) FILE *out, *out_h; time_t now; int i, l; + char buf[PATH_MAX+1]; + char buf2[PATH_MAX+1]; sym_clear_all_valid(); - file_write_dep(".config.cmd"); + name = conf_get_configname(); + str = strrchr(name, '/'); + + memset(buf, 0, PATH_MAX+1); + if(str) + { + strncpy(buf, name, str - name + 1); + } + strcat(buf, ".config.cmd"); + file_write_dep(buf); + + memset(buf, 0, PATH_MAX+1); + if(str) + { + strncpy(buf, name, str - name + 1); + } + strcat(buf, ".auto.deps"); + write_make_deps(buf); if (conf_split_config()) return 1; - out = fopen(".tmpconfig", "w"); + memset(buf, 0, PATH_MAX+1); + if(str) + { + strncpy(buf, name, str - name + 1); + } + strcat(buf, ".tmpconfig"); + memset(buf2, 0, PATH_MAX+1); + if(str) + { + strncpy(buf2, name, str - name + 1); + } + strcat(buf2, ".tmpconfig.h"); + + out = fopen(buf, "w"); if (!out) return 1; - out_h = fopen(".tmpconfig.h", "w"); + out_h = fopen(buf2, "w"); if (!out_h) { fclose(out); return 1; @@ -782,14 +823,14 @@ int conf_write_autoconf(void) name = getenv("KCONFIG_AUTOHEADER"); if (!name) name = "include/linux/autoconf.h"; - if (rename(".tmpconfig.h", name)) + if (rename(buf2, 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)) + if (rename(buf, name)) return 1; return 0; diff --git a/package/config/lkc.h b/package/config/lkc.h index f379b0bf8..e5661c0e8 100644 --- a/package/config/lkc.h +++ b/package/config/lkc.h @@ -102,6 +102,7 @@ void menu_set_type(int type); /* util.c */ struct file *file_lookup(const char *name); int file_write_dep(const char *name); +int write_make_deps(const char *name); struct gstr { size_t len; diff --git a/package/config/util.c b/package/config/util.c index 42038385b..a1e9dea21 100644 --- a/package/config/util.c +++ b/package/config/util.c @@ -51,17 +51,26 @@ static char* br2_symbol_printer(const char * const in) } /* write dependencies of the infividual config-symbols */ -static int write_make_deps(const char *name) +int write_make_deps(const char *name) { + const char *str; + char buf[PATH_MAX+1]; struct menu *menu; struct symbol *sym; struct property *prop, *p; unsigned done; - const char * const name_tmp = "..make.deps.tmp"; FILE *out; if (!name) name = ".auto.deps"; - out = fopen(name_tmp, "w"); + + str = strrchr(name, '/'); + memset(buf, 0, PATH_MAX+1); + if(str) + { + strncpy(buf, name, str - name + 1); + } + strcat(buf, "..make.deps.tmp"); + out = fopen(buf, "w"); if (!out) return 1; fprintf(out, "# ATTENTION! This does not handle 'depends', just 'select'! \n" @@ -120,7 +129,7 @@ next: } } fclose(out); - rename(name_tmp, name); + rename(buf, name); printf(_("#\n" "# make dependencies written to %s\n" "# ATTENTION buildroot devels!\n" @@ -132,6 +141,8 @@ next: /* write a dependency file as used by kbuild to track dependencies */ int file_write_dep(const char *name) { + const char *str; + char buf[PATH_MAX+1]; struct symbol *sym, *env_sym; struct expr *e; struct file *file; @@ -139,7 +150,16 @@ int file_write_dep(const char *name) if (!name) name = ".kconfig.d"; - out = fopen("..config.tmp", "w"); + + str = strrchr(name, '/'); + memset(buf, 0, PATH_MAX+1); + if(str) + { + strncpy(buf, name, str - name + 1); + } + strcat(buf, "..config.tmp"); + + out = fopen(buf, "w"); if (!out) return 1; fprintf(out, "deps_config := \\\n"); @@ -170,8 +190,7 @@ int file_write_dep(const char *name) fprintf(out, "\n$(deps_config): ;\n"); fclose(out); - rename("..config.tmp", name); - return write_make_deps(NULL); + rename(buf, name); } -- cgit v1.2.3