diff options
Diffstat (limited to 'payloads/libpayload/util/kconfig/util.c')
-rw-r--r-- | payloads/libpayload/util/kconfig/util.c | 36 |
1 files changed, 30 insertions, 6 deletions
diff --git a/payloads/libpayload/util/kconfig/util.c b/payloads/libpayload/util/kconfig/util.c index aea8d56ce4..a47d5e0fdc 100644 --- a/payloads/libpayload/util/kconfig/util.c +++ b/payloads/libpayload/util/kconfig/util.c @@ -29,6 +29,8 @@ struct file *file_lookup(const char *name) /* write a dependency file as used by kbuild to track dependencies */ int file_write_dep(const char *name) { + struct symbol *sym, *env_sym; + struct expr *e; struct file *file; FILE *out; @@ -44,7 +46,26 @@ int file_write_dep(const char *name) else fprintf(out, "\t%s\n", file->name); } - fprintf(out, "\n.config include/autoconf.h: $(deps_config)\n\n$(deps_config):\n"); + fprintf(out, "\nbuild/auto.conf: \\\n" + "\t$(deps_config)\n\n"); + + expr_list_for_each_sym(sym_env_list, e, sym) { + struct property *prop; + const char *value; + + prop = sym_get_env_prop(sym); + env_sym = prop_get_symbol(prop); + if (!env_sym) + continue; + value = getenv(env_sym->name); + if (!value) + value = ""; + fprintf(out, "ifneq \"$(%s)\" \"%s\"\n", env_sym->name, value); + fprintf(out, "build/auto.conf: FORCE\n"); + fprintf(out, "endif\n"); + } + + fprintf(out, "\n$(deps_config): ;\n"); fclose(out); rename("..config.tmp", name); return 0; @@ -82,12 +103,15 @@ void str_free(struct gstr *gs) /* Append to growable string */ void str_append(struct gstr *gs, const char *s) { - size_t l = strlen(gs->s) + strlen(s) + 1; - if (l > gs->len) { - gs->s = realloc(gs->s, l); - gs->len = l; + size_t l; + if (s) { + l = strlen(gs->s) + strlen(s) + 1; + if (l > gs->len) { + gs->s = realloc(gs->s, l); + gs->len = l; + } + strcat(gs->s, s); } - strcat(gs->s, s); } /* Append printf formatted string to growable string */ |