X-Git-Url: https://git.ozlabs.org/?a=blobdiff_plain;f=tools%2Fccanlint%2Fcompulsory_tests%2Fbuild.c;h=9d697a303a57399a1754da32db7dfc0c20d1ffa0;hb=2926cafb52b9d95646d9dafa877d53f2368d8b2c;hp=ec9e6de173aa6a8f040981f73dd051d1bbb7cf23;hpb=304652023042670b3173de0ad5dc0eb7c836618c;p=ccan diff --git a/tools/ccanlint/compulsory_tests/build.c b/tools/ccanlint/compulsory_tests/build.c index ec9e6de1..9d697a30 100644 --- a/tools/ccanlint/compulsory_tests/build.c +++ b/tools/ccanlint/compulsory_tests/build.c @@ -13,6 +13,7 @@ #include #include #include +#include "build.h" static const char *can_build(struct manifest *m) { @@ -33,41 +34,51 @@ static char *obj_list(const struct manifest *m) return list; } -static void *do_build(struct manifest *m, unsigned int *timeleft) +char *build_module(struct manifest *m, bool keep, char **errstr) { - char *filename, *err; + char *name = link_objects(m, m->basename, false, obj_list(m), errstr); + if (name) { + if (keep) { + char *realname = talloc_asprintf(m, "%s.o", m->dir); + /* We leave this object file around, all built. */ + if (!move_file(name, realname)) + err(1, "Renaming %s to %s", name, realname); + name = realname; + } + } + return name; +} + +static void do_build(struct manifest *m, + bool keep, + unsigned int *timeleft, + struct score *score) +{ + char *errstr; if (list_empty(&m->c_files)) { /* No files? No score, but we "pass". */ - build.total_score = 0; - return NULL; + score->total = 0; + score->pass = true; + return; } - filename = link_objects(m, obj_list(m), &err); - if (filename) { - char *realname = talloc_asprintf(m, "%s.o", m->dir); - /* We leave this object file around, all built. */ - if (!move_file(filename, realname)) - return talloc_asprintf(m, "Failed to rename %s to %s", - filename, realname); - return NULL; + + m->compiled = build_module(m, keep, &errstr); + if (!m->compiled) { + score_file_error(score, NULL, 0, errstr); + return; } - return err; -} -static const char *describe_build(struct manifest *m, void *check_result) -{ - return talloc_asprintf(check_result, - "The object file for the module didn't build:\n" - "%s", (char *)check_result); + score->pass = true; + score->score = score->total; } -struct ccanlint build = { - .key = "build", +struct ccanlint module_builds = { + .key = "module_builds", .name = "Module can be built from object files", - .total_score = 1, .check = do_build, - .describe = describe_build, .can_run = can_build, + .needs = "objects_build" }; -REGISTER_TEST(build, &depends_built, NULL); +REGISTER_TEST(module_builds);