X-Git-Url: http://git.ozlabs.org/?p=ccan;a=blobdiff_plain;f=tools%2Fccanlint%2Fcompulsory_tests%2Fcompile_tests.c;h=e633facd794a74389d52e8e4b41baa1a417e4799;hp=57c257a2d828de68c1306dcfd1bcfbf2fe22097d;hb=fb4c4c3ddc24772f71a64ec02d2c9ddaeb6e9f6b;hpb=5f44c8ca0eb66503db51e0df1b65ff173eb42f57 diff --git a/tools/ccanlint/compulsory_tests/compile_tests.c b/tools/ccanlint/compulsory_tests/compile_tests.c index 57c257a2..e633facd 100644 --- a/tools/ccanlint/compulsory_tests/compile_tests.c +++ b/tools/ccanlint/compulsory_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, ""); @@ -37,11 +37,13 @@ static char *obj_list(const struct manifest *m, bool link_with_module) list = talloc_asprintf_append(list, " %s", i->compiled); if (link_with_module) - list = talloc_asprintf_append(list, " ../%s.o", m->basename); + list = talloc_asprintf_append(list, " %s.o", m->dir); /* Other ccan modules. */ - list_for_each(&m->dep_objs, i, list) - list = talloc_asprintf_append(list, " %s", i->name); + list_for_each(&m->dep_dirs, i, list) { + if (i->compiled) + list = talloc_asprintf_append(list, " %s", i->compiled); + } return list; } @@ -49,7 +51,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++) @@ -58,18 +60,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; } @@ -80,7 +87,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; @@ -91,7 +100,7 @@ static void *do_compile_tests(struct manifest *m) 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; @@ -103,7 +112,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; @@ -115,7 +124,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; @@ -127,7 +136,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; @@ -135,7 +144,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; @@ -182,7 +191,8 @@ 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, .check = do_compile_tests, .describe = describe_compile_tests,