ccanlint: Add cflags support to _info
[ccan] / tools / ccanlint / tests / objects_build.c
index 8fc11266be6cef94199f4ef30e4de92bf47a6805..5e6daf7827a1c5104d5e9dd81c49f671e834ea5f 100644 (file)
@@ -1,7 +1,7 @@
 #include <tools/ccanlint/ccanlint.h>
 #include <tools/tools.h>
-#include <ccan/talloc/talloc.h>
 #include <ccan/str/str.h>
+#include <ccan/tal/path/path.h>
 #include <sys/types.h>
 #include <sys/stat.h>
 #include <fcntl.h>
@@ -22,8 +22,19 @@ static const char *can_build(struct manifest *m)
        return NULL;
 }
 
+static char *cflags_list(const struct manifest *m)
+{
+       unsigned int i;
+       char *ret = tal_strdup(m, cflags);
+
+       char **flags = get_cflags(m, m->dir, get_or_compile_info);
+       for (i = 0; flags[i]; i++)
+               tal_append_fmt(&ret, " %s", flags[i]);
+       return ret;
+}
+
 void build_objects(struct manifest *m,
-                  bool keep, struct score *score, const char *flags,
+                  struct score *score, const char *flags,
                   enum compile_type ctype)
 {
        struct ccan_file *i;
@@ -36,12 +47,12 @@ void build_objects(struct manifest *m,
 
        list_for_each(&m->c_files, i, list) {
                char *output;
-               char *fullfile = talloc_asprintf(m, "%s/%s", m->dir, i->name);
+               char *fullfile = path_join(m, m->dir, i->name);
 
-               i->compiled[ctype] = maybe_temp_file(m, "", keep, fullfile);
+               i->compiled[ctype] = temp_file(m, "", fullfile);
                if (!compile_object(score, fullfile, ccan_dir, compiler, flags,
                                    i->compiled[ctype], &output)) {
-                       talloc_free(i->compiled[ctype]);
+                       tal_free(i->compiled[ctype]);
                        score_file_error(score, i, 0,
                                         "Compiling object files:\n%s",
                                         output);
@@ -58,14 +69,17 @@ void build_objects(struct manifest *m,
        if (!errors) {
                score->pass = true;
                score->score = score->total - warnings;
-       }
+       } else
+               build_failed = true;
 }
 
 static void check_objs_build(struct manifest *m,
-                            bool keep,
                             unsigned int *timeleft, struct score *score)
 {
-       build_objects(m, keep, score, cflags, COMPILE_NORMAL);
+       const char *flags;
+
+       flags = cflags_list(m);
+       build_objects(m, score, flags, COMPILE_NORMAL);
 }
 
 struct ccanlint objects_build = {