X-Git-Url: https://git.librecmc.org/?a=blobdiff_plain;ds=sidebyside;f=scripts%2Fbasic%2Ffixdep.c;h=da7fb2cd4dde9cd1ca52e8981628fdb9e3ad05f7;hb=f9b0b8d4ee6d5515305470eeb909506c90b5d331;hp=b30406860b7397881e4e6ffeedcda1f5b2959cc0;hpb=45f0ad9545578b4436fdf04ba25a10173bcb75ef;p=oweals%2Fu-boot.git diff --git a/scripts/basic/fixdep.c b/scripts/basic/fixdep.c index b30406860b..da7fb2cd4d 100644 --- a/scripts/basic/fixdep.c +++ b/scripts/basic/fixdep.c @@ -123,6 +123,7 @@ char *target; char *depfile; char *cmdline; +int is_spl_build = 0; /* hack for U-Boot */ static void usage(void) { @@ -191,23 +192,6 @@ static void define_config(const char *name, int len, unsigned int hash) hashtab[hash % HASHSZ] = aux; } -/* - * Clear the set of configuration strings. - */ -static void clear_config(void) -{ - struct item *aux, *next; - unsigned int i; - - for (i = 0; i < HASHSZ; i++) { - for (aux = hashtab[i]; aux; aux = next) { - next = aux->next; - free(aux); - } - hashtab[i] = NULL; - } -} - /* * Record the use of a CONFIG_* word. */ @@ -239,6 +223,7 @@ static void parse_config_file(const char *map, size_t len) /* start at +1, so that p can never be < map */ const int *m = (const int *) map + 1; const char *p, *q; + char tmp_buf[256] = "SPL_"; /* hack for U-Boot */ for (; m < end; m++) { if (*m == INT_CONF) { p = (char *) m ; goto conf; } @@ -251,7 +236,8 @@ static void parse_config_file(const char *map, size_t len) continue; if (memcmp(p, "CONFIG_", 7)) continue; - for (q = p + 7; q < map + len; q++) { + p += 7; + for (q = p; q < map + len; q++) { if (!(isalnum(*q) || *q == '_')) goto found; } @@ -260,9 +246,36 @@ static void parse_config_file(const char *map, size_t len) found: if (!memcmp(q - 7, "_MODULE", 7)) q -= 7; - if( (q-p-7) < 0 ) + if (q - p < 0) + continue; + + /* + * U-Boot also handles + * CONFIG_IS_ENABLED(...) + * CONFIG_IS_BUILTIN(...) + * CONFIG_IS_MODULE(...) + * CONFIG_VAL(...) + */ + if ((q - p == 10 && !memcmp(p, "IS_ENABLED(", 11)) || + (q - p == 10 && !memcmp(p, "IS_BUILTIN(", 11)) || + (q - p == 9 && !memcmp(p, "IS_MODULE(", 10)) || + (q - p == 3 && !memcmp(p, "VAL(", 4))) { + p = q + 1; + for (q = p; q < map + len; q++) + if (*q == ')') + goto found2; continue; - use_config(p+7, q-p-7); + + found2: + if (is_spl_build) { + memcpy(tmp_buf + 4, p, q - p); + q = tmp_buf + 4 + (q - p); + p = tmp_buf; + } + } + /* end U-Boot hack */ + + use_config(p, q - p); } } @@ -290,7 +303,11 @@ static void do_config_file(const char *filename) perror(filename); exit(2); } - fstat(fd, &st); + if (fstat(fd, &st) < 0) { + fprintf(stderr, "fixdep: error fstat'ing config file: "); + perror(filename); + exit(2); + } if (st.st_size == 0) { close(fd); return; @@ -324,8 +341,6 @@ static void parse_dep_file(void *map, size_t len) int saw_any_target = 0; int is_first_dep = 0; - clear_config(); - while (m < end) { /* Skip any "white space" */ while (m < end && (*m == ' ' || *m == '\\' || *m == '\n')) @@ -455,6 +470,10 @@ int main(int argc, char *argv[]) target = argv[2]; cmdline = argv[3]; + /* hack for U-Boot */ + if (!strncmp(target, "spl/", 4) || !strncmp(target, "tpl/", 4)) + is_spl_build = 1; + print_cmdline(); print_deps();