+static bool have_dep(char **deps, unsigned int num, const char *dep)
+{
+ unsigned int i;
+
+ for (i = 0; i < num; i++)
+ if (streq(deps[i], dep))
+ return true;
+ return false;
+}
+
+/* Gets all the dependencies, recursively. */
+char **get_deps(const void *ctx, const char *dir)
+{
+ char **deps;
+ unsigned int i, num;
+
+ deps = get_one_deps(ctx, dir, &num);
+ for (i = 0; i < num; i++) {
+ char **newdeps;
+ unsigned int j, newnum;
+
+ if (!strstarts(deps[i], "ccan/"))
+ continue;
+
+ newdeps = get_one_deps(ctx, deps[i], &newnum);
+
+ /* Should be short, so brute-force out dups. */
+ for (j = 0; j < newnum; j++) {
+ if (have_dep(deps, num, newdeps[j]))
+ continue;
+
+ deps = talloc_realloc(NULL, deps, char *, num + 2);
+ deps[num++] = newdeps[j];
+ deps[num] = NULL;
+ }
+ }
+ return deps;
+}