Commit 19902365 authored by Rusty Russell's avatar Rusty Russell

tools: enhance get_libs to get libraries for tests, too.

Signed-off-by: default avatarRusty Russell <rusty@rustcorp.com.au>
parent 1842f551
...@@ -120,7 +120,7 @@ static char *example_lib_list(const void *ctx, struct manifest **deps) ...@@ -120,7 +120,7 @@ static char *example_lib_list(const void *ctx, struct manifest **deps)
/* FIXME: This doesn't uniquify. */ /* FIXME: This doesn't uniquify. */
for (i = 0; i < talloc_array_length(deps); i++) { for (i = 0; i < talloc_array_length(deps); i++) {
libs = get_libs(ctx, deps[i]->dir, false, get_or_compile_info); libs = get_libs(ctx, deps[i]->dir, NULL, get_or_compile_info);
for (j = 0; libs[j]; j++) for (j = 0; libs[j]; j++)
list = talloc_asprintf_append(list, "-l%s ", libs[j]); list = talloc_asprintf_append(list, "-l%s ", libs[j]);
} }
......
...@@ -47,7 +47,7 @@ static char *lib_list(const struct manifest *m) ...@@ -47,7 +47,7 @@ static char *lib_list(const struct manifest *m)
char **libs; char **libs;
char *ret = talloc_strdup(m, ""); char *ret = talloc_strdup(m, "");
libs = get_libs(m, m->dir, true, get_or_compile_info); libs = get_libs(m, m->dir, "depends", get_or_compile_info);
for (i = 0; libs[i]; i++) for (i = 0; libs[i]; i++)
ret = talloc_asprintf_append(ret, "-l%s ", libs[i]); ret = talloc_asprintf_append(ret, "-l%s ", libs[i]);
return ret; return ret;
......
...@@ -58,7 +58,7 @@ char *lib_list(const struct manifest *m, enum compile_type ctype) ...@@ -58,7 +58,7 @@ char *lib_list(const struct manifest *m, enum compile_type ctype)
char **libs; char **libs;
char *ret = talloc_strdup(m, ""); char *ret = talloc_strdup(m, "");
libs = get_libs(m, m->dir, true, get_or_compile_info); libs = get_libs(m, m->dir, "depends", get_or_compile_info);
for (i = 0; libs[i]; i++) for (i = 0; libs[i]; i++)
ret = talloc_asprintf_append(ret, "-l%s ", libs[i]); ret = talloc_asprintf_append(ret, "-l%s ", libs[i]);
return ret; return ret;
......
...@@ -244,7 +244,24 @@ static char **get_one_libs(const void *ctx, const char *dir, ...@@ -244,7 +244,24 @@ static char **get_one_libs(const void *ctx, const char *dir,
return lines; return lines;
} }
char **get_libs(const void *ctx, const char *dir, bool recurse, /* O(n^2) but n is small. */
static char **add_deps(char **deps1, char **deps2)
{
unsigned int i, len;
len = talloc_array_length(deps1);
for (i = 0; deps2[i]; i++) {
if (have_dep(deps1, deps2[i]))
continue;
deps1 = talloc_realloc(NULL, deps1, char *, len + 1);
deps1[len-1] = talloc_steal(deps1, deps2[i]);
deps1[len++] = NULL;
}
return deps1;
}
char **get_libs(const void *ctx, const char *dir, const char *style,
char *(*get_info)(const void *ctx, const char *dir)) char *(*get_info)(const void *ctx, const char *dir))
{ {
char **deps, **libs; char **deps, **libs;
...@@ -253,8 +270,13 @@ char **get_libs(const void *ctx, const char *dir, bool recurse, ...@@ -253,8 +270,13 @@ char **get_libs(const void *ctx, const char *dir, bool recurse,
libs = get_one_libs(ctx, dir, get_info); libs = get_one_libs(ctx, dir, get_info);
len = talloc_array_length(libs); len = talloc_array_length(libs);
if (recurse) { if (style) {
deps = get_deps(ctx, dir, "depends", true, get_info); deps = get_deps(ctx, dir, style, true, get_info);
if (streq(style, "testdepends"))
deps = add_deps(deps,
get_deps(ctx, dir, "depends", true,
get_info));
for (i = 0; deps[i]; i++) { for (i = 0; deps[i]; i++) {
char **newlibs, *subdir; char **newlibs, *subdir;
size_t newlen; size_t newlen;
......
...@@ -31,8 +31,12 @@ char **get_deps(const void *ctx, const char *dir, const char *style, ...@@ -31,8 +31,12 @@ char **get_deps(const void *ctx, const char *dir, const char *style,
char **get_safe_ccan_deps(const void *ctx, const char *dir, const char *style, char **get_safe_ccan_deps(const void *ctx, const char *dir, const char *style,
bool recurse); bool recurse);
/* This also needs to compile the info file. */ /* This also needs to compile the info file:
char **get_libs(const void *ctx, const char *dir, bool recurse, * style == NULL: don't recurse.
* style == depends: recurse dependencies.
* style == testdepends: recurse testdepends and depends.
*/
char **get_libs(const void *ctx, const char *dir, const char *style,
char *(*get_info)(const void *ctx, const char *dir)); char *(*get_info)(const void *ctx, const char *dir));
/* From tools.c */ /* From tools.c */
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment