+/* FIXME: This is O(n^2), which is dumb. */
+static char **uniquify_deps(char **deps)
+{
+ unsigned int i, j, num;
+
+ if (!deps)
+ return NULL;
+
+ num = tal_count(deps) - 1;
+ for (i = 0; i < num; i++) {
+ for (j = i + 1; j < num; j++) {
+ if (streq(deps[i], deps[j])) {
+ memmove(&deps[j], &deps[j+1],
+ (num - j - 1) * sizeof(char *));
+ num--;
+ }
+ }
+ }
+ deps[num] = NULL;
+ /* Make sure tal_count() works */
+ tal_resize(&deps, num + 1);
+ return deps;
+}
+
+char **get_deps(const void *ctx, const char *dir, const char *style,
+ bool recurse,
+ char *(*get_info)(const void *ctx, const char *dir))
+{
+ char **ret;
+
+ if (!recurse) {
+ ret = get_one_deps(ctx, dir, style, get_info);
+ } else
+ ret = get_all_deps(ctx, dir, style, get_info, get_one_deps);
+
+ return uniquify_deps(ret);
+}
+
+char **get_safe_ccan_deps(const void *ctx, const char *dir, const char *style,
+ bool recurse)
+{
+ char **ret;
+ if (!recurse) {
+ ret = get_one_safe_deps(ctx, dir, style, NULL);
+ } else {
+ ret = get_all_deps(ctx, dir, style, NULL, get_one_safe_deps);
+ }
+ return uniquify_deps(ret);
+}