X-Git-Url: https://git.ozlabs.org/?a=blobdiff_plain;f=tools%2Fccanlint%2Fcompulsory_tests%2Fcheck_includes_build.c;h=296b0a3961c10b93d2109ada855d21d2a570fddf;hb=2926cafb52b9d95646d9dafa877d53f2368d8b2c;hp=7e0ab945f290dfaaa83e373b3255520a4e61fc20;hpb=5f44c8ca0eb66503db51e0df1b65ff173eb42f57;p=ccan diff --git a/tools/ccanlint/compulsory_tests/check_includes_build.c b/tools/ccanlint/compulsory_tests/check_includes_build.c index 7e0ab945..296b0a39 100644 --- a/tools/ccanlint/compulsory_tests/check_includes_build.c +++ b/tools/ccanlint/compulsory_tests/check_includes_build.c @@ -22,46 +22,57 @@ static const char *can_build(struct manifest *m) return NULL; } -static void *check_includes_build(struct manifest *m) +static struct ccan_file *main_header(struct manifest *m) +{ + struct ccan_file *f; + + list_for_each(&m->h_files, f, list) { + if (strstarts(f->name, m->basename) + && strlen(f->name) == strlen(m->basename) + 2) + return f; + } + /* Should not happen: we depend on has_main_header */ + abort(); +} + +static void check_includes_build(struct manifest *m, + bool keep, + unsigned int *timeleft, struct score *score) { char *contents; - char *tmpfile, *err; + char *tmpsrc, *tmpobj, *cmdout; int fd; + struct ccan_file *mainh = main_header(m); - tmpfile = temp_file(m, ".c"); + tmpsrc = maybe_temp_file(m, "-included.c", keep, mainh->fullname); + tmpobj = maybe_temp_file(m, ".o", keep, tmpsrc); - fd = open(tmpfile, O_WRONLY | O_CREAT | O_EXCL, 0600); + fd = open(tmpsrc, O_WRONLY | O_CREAT | O_EXCL, 0600); if (fd < 0) - return talloc_asprintf(m, "Creating temporary file: %s", - strerror(errno)); + err(1, "Creating temporary file %s", tmpsrc); - contents = talloc_asprintf(tmpfile, "#include \n", + contents = talloc_asprintf(tmpsrc, "#include \n", m->basename, m->basename); - if (write(fd, contents, strlen(contents)) != strlen(contents)) { - close(fd); - return "Failure writing to temporary file"; - } + if (write(fd, contents, strlen(contents)) != strlen(contents)) + err(1, "writing to temporary file %s", tmpsrc); close(fd); - if (compile_object(m, tmpfile, &err)) - return NULL; - return err; -} - -static const char *describe_includes_build(struct manifest *m, - void *check_result) -{ - return talloc_asprintf(check_result, - "#include of the main header file:\n" - "%s", (char *)check_result); + if (compile_object(score, tmpsrc, ccan_dir, "", tmpobj, &cmdout)) { + score->pass = true; + score->score = score->total; + } else { + score->error = talloc_asprintf(score, + "#include of the main header file:\n%s", + cmdout); + } } -struct ccanlint includes_build = { - .name = "Can compile against main header", - .total_score = 1, +struct ccanlint main_header_compiles = { + .key = "main_header_compiles", + .name = "Modules main header compiles", .check = check_includes_build, - .describe = describe_includes_build, .can_run = can_build, + .needs = "depends_exist main_header_exists" }; -REGISTER_TEST(includes_build, &depends_exist, NULL); +REGISTER_TEST(main_header_compiles);