char *target;
char *depfile;
char *cmdline;
+int is_spl_build = 0; /* hack for U-Boot */
static void usage(void)
{
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.
*/
/* 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; }
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;
}
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);
}
}
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;
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'))
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();