]> git.ozlabs.org Git - ccan/blobdiff - tools/ccanlint/compulsory_tests/check_build.c
ccanlint: rename structures to match keys
[ccan] / tools / ccanlint / compulsory_tests / check_build.c
index eb968e11e36d65052ce3d647e88093da16a33c8e..83b1c780e067046cc715fc479f7e79c64e22cdda 100644 (file)
@@ -24,19 +24,21 @@ static const char *can_build(struct manifest *m)
 static char *obj_list(const struct manifest *m)
 {
        char *list = talloc_strdup(m, "");
-       struct ccan_file *i;
+       struct manifest *i;
 
        /* Other CCAN deps. */
-       list_for_each(&m->dep_objs, i, list)
-               list = talloc_asprintf_append(list, "%s ", i->name);
-
+       list_for_each(&m->deps, i, list) {
+               if (i->compiled)
+                       list = talloc_asprintf_append(list, "%s ",
+                                                     i->compiled);
+       }
        return list;
 }
 
 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++)
@@ -44,18 +46,20 @@ static char *lib_list(const struct manifest *m)
        return ret;
 }
 
-static void *check_use_build(struct manifest *m)
+static void check_use_build(struct manifest *m,
+                           bool keep,
+                           unsigned int *timeleft, struct score *score)
 {
        char *contents;
-       char *tmpfile, *err;
+       char *tmpfile, *cmdout;
+       char *basename = talloc_asprintf(m, "%s/example.c", m->dir);
        int fd;
 
-       tmpfile = temp_file(m, ".c");
+       tmpfile = maybe_temp_file(m, ".c", keep, basename);
 
        fd = open(tmpfile, 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", tmpfile);
 
        contents = talloc_asprintf(tmpfile,
                                   "#include <ccan/%s/%s.h>\n"
@@ -64,30 +68,27 @@ static void *check_use_build(struct manifest *m)
                                   "    return 0;\n"
                                   "}\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, "Failure writing to temporary file %s", tmpfile);
        close(fd);
 
-       if (!compile_and_link(m, tmpfile, obj_list(m), "", lib_list(m), &err))
-               return err;
-       return NULL;
-}
-
-static const char *describe_use_build(struct manifest *m, void *check_result)
-{
-       return talloc_asprintf(check_result, 
-                              "Linking against module:\n"
-                              "%s", (char *)check_result);
+       if (compile_and_link(score, tmpfile, ccan_dir, obj_list(m), "",
+                            lib_list(m),
+                            maybe_temp_file(m, "", keep, tmpfile),
+                            &cmdout)) {
+               score->pass = true;
+               score->score = score->total;
+       } else {
+               score->error = cmdout;
+       }
 }
 
-struct ccanlint check_build = {
-       .name = "Module can be used",
-       .total_score = 1,
+struct ccanlint module_links = {
+       .key = "module_links",
+       .name = "Module can be linked against trivial program",
        .check = check_use_build,
-       .describe = describe_use_build,
        .can_run = can_build,
+       .needs = "module_builds depends_build"
 };
 
-REGISTER_TEST(check_build, &build, NULL);
+REGISTER_TEST(module_links);