X-Git-Url: http://git.ozlabs.org/?p=ccan;a=blobdiff_plain;f=tools%2Fccanlint%2Fcompulsory_tests%2Fbuild.c;h=21fbdcdee80e6bb8e29258f867f94656dc2d4b69;hp=ec9e6de173aa6a8f040981f73dd051d1bbb7cf23;hb=9cca4b73c96adeb39ab89027eca9ea5323a3a598;hpb=304652023042670b3173de0ad5dc0eb7c836618c diff --git a/tools/ccanlint/compulsory_tests/build.c b/tools/ccanlint/compulsory_tests/build.c index ec9e6de1..21fbdcde 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,50 @@ 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", .name = "Module can be built from object files", - .total_score = 1, .check = do_build, - .describe = describe_build, .can_run = can_build, }; -REGISTER_TEST(build, &depends_built, NULL); +REGISTER_TEST(build, &depends_built, &build_objs, NULL);