]> git.sur5r.net Git - u-boot/blobdiff - scripts/basic/fixdep.c
nvme: Remove useless defines
[u-boot] / scripts / basic / fixdep.c
index b30406860b7397881e4e6ffeedcda1f5b2959cc0..9bd0de2490748730e750dbf8797a3ae19c431c95 100644 (file)
 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,29 @@ 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/BUILTIN/MODULE} */
+               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))) {
+                       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 +296,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 +334,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 +463,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();