mirror of
https://github.com/adulau/aha.git
synced 2024-12-27 19:26:25 +00:00
kconfig: KCONFIG_OVERWRITECONFIG
If you set KCONFIG_OVERWRITECONFIG in environment, Kconfig will not break symlinks when .config is a symlink to somewhere else. Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Sam Ravnborg <sam@ravnborg.org>
This commit is contained in:
parent
250725aa13
commit
14cdd3c402
3 changed files with 33 additions and 21 deletions
6
Makefile
6
Makefile
|
@ -178,6 +178,8 @@ CROSS_COMPILE ?=
|
||||||
# Architecture as present in compile.h
|
# Architecture as present in compile.h
|
||||||
UTS_MACHINE := $(ARCH)
|
UTS_MACHINE := $(ARCH)
|
||||||
|
|
||||||
|
KCONFIG_CONFIG ?= .config
|
||||||
|
|
||||||
# SHELL used by kbuild
|
# SHELL used by kbuild
|
||||||
CONFIG_SHELL := $(shell if [ -x "$$BASH" ]; then echo $$BASH; \
|
CONFIG_SHELL := $(shell if [ -x "$$BASH" ]; then echo $$BASH; \
|
||||||
else if [ -x /bin/bash ]; then echo /bin/bash; \
|
else if [ -x /bin/bash ]; then echo /bin/bash; \
|
||||||
|
@ -437,13 +439,13 @@ ifeq ($(dot-config),1)
|
||||||
-include include/config/auto.conf
|
-include include/config/auto.conf
|
||||||
|
|
||||||
# To avoid any implicit rule to kick in, define an empty command
|
# To avoid any implicit rule to kick in, define an empty command
|
||||||
.config include/config/auto.conf.cmd: ;
|
$(KCONFIG_CONFIG) include/config/auto.conf.cmd: ;
|
||||||
|
|
||||||
# If .config is newer than include/config/auto.conf, someone tinkered
|
# If .config is newer than include/config/auto.conf, someone tinkered
|
||||||
# with it and forgot to run make oldconfig.
|
# with it and forgot to run make oldconfig.
|
||||||
# if auto.conf.cmd is missing then we are probarly in a cleaned tree so
|
# if auto.conf.cmd is missing then we are probarly in a cleaned tree so
|
||||||
# we execute the config step to be sure to catch updated Kconfig files
|
# we execute the config step to be sure to catch updated Kconfig files
|
||||||
include/config/auto.conf: .config include/config/auto.conf.cmd
|
include/config/auto.conf: $(KCONFIG_CONFIG) include/config/auto.conf.cmd
|
||||||
$(Q)$(MAKE) -f $(srctree)/Makefile silentoldconfig
|
$(Q)$(MAKE) -f $(srctree)/Makefile silentoldconfig
|
||||||
|
|
||||||
else
|
else
|
||||||
|
|
|
@ -21,8 +21,6 @@ static void conf_warning(const char *fmt, ...)
|
||||||
static const char *conf_filename;
|
static const char *conf_filename;
|
||||||
static int conf_lineno, conf_warnings, conf_unsaved;
|
static int conf_lineno, conf_warnings, conf_unsaved;
|
||||||
|
|
||||||
const char conf_def_filename[] = ".config";
|
|
||||||
|
|
||||||
const char conf_defname[] = "arch/$ARCH/defconfig";
|
const char conf_defname[] = "arch/$ARCH/defconfig";
|
||||||
|
|
||||||
static void conf_warning(const char *fmt, ...)
|
static void conf_warning(const char *fmt, ...)
|
||||||
|
@ -36,6 +34,13 @@ static void conf_warning(const char *fmt, ...)
|
||||||
conf_warnings++;
|
conf_warnings++;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const char *conf_get_configname(void)
|
||||||
|
{
|
||||||
|
char *name = getenv("KCONFIG_CONFIG");
|
||||||
|
|
||||||
|
return name ? name : ".config";
|
||||||
|
}
|
||||||
|
|
||||||
static char *conf_expand_value(const char *in)
|
static char *conf_expand_value(const char *in)
|
||||||
{
|
{
|
||||||
struct symbol *sym;
|
struct symbol *sym;
|
||||||
|
@ -91,7 +96,7 @@ int conf_read_simple(const char *name, int def)
|
||||||
} else {
|
} else {
|
||||||
struct property *prop;
|
struct property *prop;
|
||||||
|
|
||||||
name = conf_def_filename;
|
name = conf_get_configname();
|
||||||
in = zconf_fopen(name);
|
in = zconf_fopen(name);
|
||||||
if (in)
|
if (in)
|
||||||
goto load;
|
goto load;
|
||||||
|
@ -381,7 +386,7 @@ int conf_write(const char *name)
|
||||||
if (!stat(name, &st) && S_ISDIR(st.st_mode)) {
|
if (!stat(name, &st) && S_ISDIR(st.st_mode)) {
|
||||||
strcpy(dirname, name);
|
strcpy(dirname, name);
|
||||||
strcat(dirname, "/");
|
strcat(dirname, "/");
|
||||||
basename = conf_def_filename;
|
basename = conf_get_configname();
|
||||||
} else if ((slash = strrchr(name, '/'))) {
|
} else if ((slash = strrchr(name, '/'))) {
|
||||||
int size = slash - name + 1;
|
int size = slash - name + 1;
|
||||||
memcpy(dirname, name, size);
|
memcpy(dirname, name, size);
|
||||||
|
@ -389,16 +394,24 @@ int conf_write(const char *name)
|
||||||
if (slash[1])
|
if (slash[1])
|
||||||
basename = slash + 1;
|
basename = slash + 1;
|
||||||
else
|
else
|
||||||
basename = conf_def_filename;
|
basename = conf_get_configname();
|
||||||
} else
|
} else
|
||||||
basename = name;
|
basename = name;
|
||||||
} else
|
} else
|
||||||
basename = conf_def_filename;
|
basename = conf_get_configname();
|
||||||
|
|
||||||
sprintf(newname, "%s.tmpconfig.%d", dirname, (int)getpid());
|
sprintf(newname, "%s%s", dirname, basename);
|
||||||
out = fopen(newname, "w");
|
env = getenv("KCONFIG_OVERWRITECONFIG");
|
||||||
|
if (!env || !*env) {
|
||||||
|
sprintf(tmpname, "%s.tmpconfig.%d", dirname, (int)getpid());
|
||||||
|
out = fopen(tmpname, "w");
|
||||||
|
} else {
|
||||||
|
*tmpname = 0;
|
||||||
|
out = fopen(newname, "w");
|
||||||
|
}
|
||||||
if (!out)
|
if (!out)
|
||||||
return 1;
|
return 1;
|
||||||
|
|
||||||
sym = sym_lookup("KERNELVERSION", 0);
|
sym = sym_lookup("KERNELVERSION", 0);
|
||||||
sym_calc_value(sym);
|
sym_calc_value(sym);
|
||||||
time(&now);
|
time(&now);
|
||||||
|
@ -498,19 +511,18 @@ int conf_write(const char *name)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
fclose(out);
|
fclose(out);
|
||||||
if (!name || basename != conf_def_filename) {
|
|
||||||
if (!name)
|
if (*tmpname) {
|
||||||
name = conf_def_filename;
|
strcat(dirname, name ? name : conf_get_configname());
|
||||||
sprintf(tmpname, "%s.old", name);
|
strcat(dirname, ".old");
|
||||||
rename(name, tmpname);
|
rename(newname, dirname);
|
||||||
|
if (rename(tmpname, newname))
|
||||||
|
return 1;
|
||||||
}
|
}
|
||||||
sprintf(tmpname, "%s%s", dirname, basename);
|
|
||||||
if (rename(newname, tmpname))
|
|
||||||
return 1;
|
|
||||||
|
|
||||||
printf(_("#\n"
|
printf(_("#\n"
|
||||||
"# configuration written to %s\n"
|
"# configuration written to %s\n"
|
||||||
"#\n"), tmpname);
|
"#\n"), newname);
|
||||||
|
|
||||||
sym_change_count = 0;
|
sym_change_count = 0;
|
||||||
|
|
||||||
|
|
|
@ -64,8 +64,6 @@ int zconf_lineno(void);
|
||||||
char *zconf_curname(void);
|
char *zconf_curname(void);
|
||||||
|
|
||||||
/* confdata.c */
|
/* confdata.c */
|
||||||
extern const char conf_def_filename[];
|
|
||||||
|
|
||||||
char *conf_get_default_confname(void);
|
char *conf_get_default_confname(void);
|
||||||
|
|
||||||
/* kconfig_load.c */
|
/* kconfig_load.c */
|
||||||
|
|
Loading…
Reference in a new issue