|
|
@@ -227,7 +227,7 @@ get_all_deps(const void *ctx, const char *dir, const char *style,
|
|
|
return deps;
|
|
|
}
|
|
|
|
|
|
-/* Can return NULL: _info may not support 'libs'. */
|
|
|
+/* Can return NULL: _info may not support prop. */
|
|
|
static char **get_one_prop(const void *ctx, const char *dir, const char *prop,
|
|
|
char *(*get_info)(const void *ctx, const char *dir))
|
|
|
{
|
|
|
@@ -282,6 +282,48 @@ char **get_cflags(const void *ctx, const char *dir,
|
|
|
return flags;
|
|
|
}
|
|
|
|
|
|
+static bool get_one_ported(const void *ctx, const char *dir,
|
|
|
+ char *(*get_info)(const void *ctx, const char *dir))
|
|
|
+{
|
|
|
+ char **ported = get_one_prop(ctx, dir, "ported", get_info);
|
|
|
+
|
|
|
+ /* No news is good news. */
|
|
|
+ if (!ported || tal_count(ported) == 0)
|
|
|
+ return true;
|
|
|
+
|
|
|
+ if (tal_count(ported) != 1)
|
|
|
+ errx(1, "%s/_info ported gave %zu lines, not one",
|
|
|
+ dir, tal_count(ported));
|
|
|
+
|
|
|
+ if (streq(ported[0], "1"))
|
|
|
+ return true;
|
|
|
+ else if (streq(ported[0], "0"))
|
|
|
+ return false;
|
|
|
+ errx(1, "%s/_info ported gave invalid output '%s'", dir, ported[0]);
|
|
|
+}
|
|
|
+
|
|
|
+bool get_ported(const void *ctx, const char *dir, bool recurse,
|
|
|
+ char *(*get_info)(const void *ctx, const char *dir))
|
|
|
+{
|
|
|
+ if (!get_one_ported(ctx, dir, get_info))
|
|
|
+ return false;
|
|
|
+
|
|
|
+ if (recurse) {
|
|
|
+ size_t i;
|
|
|
+ char **deps = get_deps(ctx, dir, "depends", true, get_info);
|
|
|
+ for (i = 0; deps[i]; i++) {
|
|
|
+ char *subdir;
|
|
|
+ if (!strstarts(deps[i], "ccan/"))
|
|
|
+ continue;
|
|
|
+
|
|
|
+ subdir = path_join(ctx, find_ccan_dir(dir), deps[i]);
|
|
|
+ if (!get_one_ported(ctx, subdir, get_info))
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return true;
|
|
|
+}
|
|
|
+
|
|
|
char **get_libs(const void *ctx, const char *dir, const char *style,
|
|
|
char *(*get_info)(const void *ctx, const char *dir))
|
|
|
{
|