X-Git-Url: https://git.ozlabs.org/?a=blobdiff_plain;f=tools%2Fccanlint%2Fcompulsory_tests%2Fcheck_depends_built.c;h=41e5d8885e52aea5026d73d426c10eee9c592e99;hb=83cfe17fd85efb7f5d8e8b1edb1f3c28b180a2ce;hp=1392be910a3400c04d83744843c109023f1f3e96;hpb=5f44c8ca0eb66503db51e0df1b65ff173eb42f57;p=ccan diff --git a/tools/ccanlint/compulsory_tests/check_depends_built.c b/tools/ccanlint/compulsory_tests/check_depends_built.c index 1392be91..41e5d888 100644 --- a/tools/ccanlint/compulsory_tests/check_depends_built.c +++ b/tools/ccanlint/compulsory_tests/check_depends_built.c @@ -24,22 +24,10 @@ static const char *can_build(struct manifest *m) /* FIXME: recursive ccanlint if they ask for it. */ static bool expect_obj_file(const char *dir) { - char *olddir; struct manifest *dep_man; bool has_c_files; - olddir = talloc_getcwd(dir); - if (!olddir) - err(1, "Getting current directory"); - - /* We will fail below if this doesn't exist. */ - if (chdir(dir) != 0) - return false; - - dep_man = get_manifest(dir); - if (chdir(olddir) != 0) - err(1, "Returning to original directory '%s'", olddir); - talloc_free(olddir); + dep_man = get_manifest(dir, dir); /* If it has C files, we expect an object file built from them. */ has_c_files = !list_empty(&dep_man->c_files); @@ -47,56 +35,48 @@ static bool expect_obj_file(const char *dir) return has_c_files; } -static void *check_depends_built(struct manifest *m) +static void check_depends_built(struct manifest *m, + bool keep, + unsigned int *timeleft, struct score *score) { struct ccan_file *i; struct stat st; - char *report = NULL; list_for_each(&m->dep_dirs, i, list) { - char *objfile; - - if (!expect_obj_file(i->name)) + if (!expect_obj_file(i->fullname)) continue; - objfile = talloc_asprintf(m, "%s.o", i->name); - if (stat(objfile, &st) != 0) { - report = talloc_asprintf_append(report, - "object file %s\n", - objfile); - } else { - struct ccan_file *f = new_ccan_file(m, objfile); - list_add_tail(&m->dep_objs, &f->list); - } - + i->compiled = talloc_asprintf(i, "%s.o", i->fullname); + if (stat(i->compiled, &st) != 0) { + score->error = "Dependencies are not built"; + score_file_error(score, i, 0, + talloc_asprintf(score, + "object file %s", + i->compiled)); + i->compiled = NULL; + } } /* We may need libtap for testing, unless we're "tap" */ if (!streq(m->basename, "tap") && (!list_empty(&m->run_tests) || !list_empty(&m->api_tests))) { - if (stat("../tap.o", &st) != 0) { - report = talloc_asprintf_append(report, - "object file ../tap.o" - " (for tests)\n"); + char *tapobj = talloc_asprintf(m, "%s/ccan/tap.o", ccan_dir); + if (stat(tapobj, &st) != 0) { + score->error = talloc_asprintf(score, + "tap object file not built"); } } - return talloc_steal(m, report); -} - -static const char *describe_depends_built(struct manifest *m, - void *check_result) -{ - return talloc_asprintf(check_result, - "The following dependencies are not built:\n" - "%s", (char *)check_result); + if (!score->error) { + score->pass = true; + score->score = score->total; + } } struct ccanlint depends_built = { - .name = "CCAN dependencies are built", - .total_score = 1, + .key = "depends-built", + .name = "Module's CCAN dependencies are already built", .check = check_depends_built, - .describe = describe_depends_built, .can_run = can_build, };