X-Git-Url: https://git.ozlabs.org/?p=ccan;a=blobdiff_plain;f=tools%2Fccanlint%2Ftests%2Fcompile_tests.c;h=3d6d3881883d5494bffa504050faea9172ab0ca6;hp=c8f303b797844f2141173c325778243fa855d6be;hb=3953aaa384210378777cc06f5e7d7f40e44a20e8;hpb=687cde2a8c561b68f17609b615eb930ea02f5aac diff --git a/tools/ccanlint/tests/compile_tests.c b/tools/ccanlint/tests/compile_tests.c index c8f303b7..3d6d3881 100644 --- a/tools/ccanlint/tests/compile_tests.c +++ b/tools/ccanlint/tests/compile_tests.c @@ -28,7 +28,7 @@ static char *obj_list(const struct manifest *m, bool link_with_module) /* We expect to be linked with tap, unless that's us. */ if (!streq(m->basename, "tap")) - list = talloc_strdup(m, "../tap.o"); + list = talloc_asprintf(m, "%s/ccan/tap.o", ccan_dir); else list = talloc_strdup(m, ""); @@ -36,8 +36,16 @@ static char *obj_list(const struct manifest *m, bool link_with_module) list_for_each(&m->other_test_c_files, i, list) list = talloc_asprintf_append(list, " %s", i->compiled); + /* Our own object files. */ if (link_with_module) - list = talloc_asprintf_append(list, " ../%s.o", m->basename); + list_for_each(&m->c_files, i, list) + list = talloc_asprintf_append(list, " %s", i->compiled); + + /* Other ccan modules. */ + list_for_each(&m->dep_dirs, i, list) { + if (i->compiled) + list = talloc_asprintf_append(list, " %s", i->compiled); + } return list; } @@ -45,7 +53,7 @@ static char *obj_list(const struct manifest *m, bool link_with_module) static char *lib_list(const struct manifest *m) { unsigned int i, num; - char **libs = get_libs(m, ".", ".", &num, &m->info_file->compiled); + char **libs = get_libs(m, ".", &num, &m->info_file->compiled); char *ret = talloc_strdup(m, ""); for (i = 0; i < num; i++) @@ -54,18 +62,23 @@ static char *lib_list(const struct manifest *m) } static char *compile(const void *ctx, - struct manifest *m, struct ccan_file *file, bool fail, - bool link_with_module) + struct manifest *m, + struct ccan_file *file, + bool fail, + bool link_with_module, + bool keep) { char *errmsg; - file->compiled = compile_and_link(ctx, file->name, - obj_list(m, link_with_module), - fail ? "-DFAIL" : "", - lib_list(m), &errmsg); - if (!file->compiled) + file->compiled = maybe_temp_file(ctx, "", keep, file->fullname); + errmsg = compile_and_link(ctx, file->fullname, ccan_dir, + obj_list(m, link_with_module), + fail ? "-DFAIL" : "", + lib_list(m), file->compiled); + if (errmsg) { + talloc_free(file->compiled); return errmsg; - talloc_steal(ctx, file->compiled); + } return NULL; } @@ -76,7 +89,9 @@ struct compile_tests_result { const char *output; }; -static void *do_compile_tests(struct manifest *m) +static void *do_compile_tests(struct manifest *m, + bool keep, + unsigned int *timeleft) { struct list_head *list = talloc(m, struct list_head); char *cmdout; @@ -85,9 +100,10 @@ static void *do_compile_tests(struct manifest *m) list_head_init(list); + compile_tests.total_score = 0; list_for_each(&m->compile_ok_tests, i, list) { compile_tests.total_score++; - cmdout = compile(list, m, i, false, false); + cmdout = compile(list, m, i, false, false, keep); if (cmdout) { res = talloc(list, struct compile_tests_result); res->filename = i->name; @@ -99,7 +115,7 @@ static void *do_compile_tests(struct manifest *m) list_for_each(&m->run_tests, i, list) { compile_tests.total_score++; - cmdout = compile(m, m, i, false, false); + cmdout = compile(m, m, i, false, false, keep); if (cmdout) { res = talloc(list, struct compile_tests_result); res->filename = i->name; @@ -111,7 +127,7 @@ static void *do_compile_tests(struct manifest *m) list_for_each(&m->api_tests, i, list) { compile_tests.total_score++; - cmdout = compile(m, m, i, false, true); + cmdout = compile(m, m, i, false, true, keep); if (cmdout) { res = talloc(list, struct compile_tests_result); res->filename = i->name; @@ -123,7 +139,7 @@ static void *do_compile_tests(struct manifest *m) list_for_each(&m->compile_fail_tests, i, list) { compile_tests.total_score++; - cmdout = compile(list, m, i, false, false); + cmdout = compile(list, m, i, false, false, false); if (cmdout) { res = talloc(list, struct compile_tests_result); res->filename = i->name; @@ -131,7 +147,7 @@ static void *do_compile_tests(struct manifest *m) res->output = talloc_steal(res, cmdout); list_add_tail(list, &res->list); } else { - cmdout = compile(list, m, i, true, false); + cmdout = compile(list, m, i, true, false, false); if (!cmdout) { res = talloc(list, struct compile_tests_result); res->filename = i->name; @@ -178,11 +194,13 @@ static const char *describe_compile_tests(struct manifest *m, } struct ccanlint compile_tests = { - .name = "Compile tests succeed", + .key = "compile-tests", + .name = "Module tests compile", .score = score_compile_tests, + .total_score = 1, .check = do_compile_tests, .describe = describe_compile_tests, .can_run = can_build, }; -REGISTER_TEST(compile_tests, &compile_test_helpers, NULL); +REGISTER_TEST(compile_tests, &compile_test_helpers, &build_objs, NULL);