#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include "build.h" static const char *can_build(struct manifest *m) { if (safe_mode) return "Safe mode enabled"; return NULL; } void build_objects(struct manifest *m, struct score *score, const char *flags, enum compile_type ctype) { struct ccan_file *i; bool errors = false, warnings = false; if (list_empty(&m->c_files)) score->total = 0; else score->total = 2; list_for_each(&m->c_files, i, list) { char *output; char *fullfile = path_join(m, m->dir, i->name); i->compiled[ctype] = temp_file(m, "", fullfile); if (!compile_object(score, fullfile, ccan_dir, compiler, flags, i->compiled[ctype], &output)) { tal_free(i->compiled[ctype]); score_file_error(score, i, 0, "Compiling object files:\n%s", output); errors = true; } else if (!streq(output, "")) { score_file_error(score, i, 0, "Compiling object files gave" " warnings:\n%s", output); warnings = true; } } if (!errors) { score->pass = true; score->score = score->total - warnings; } else build_failed = true; } static void check_objs_build(struct manifest *m, unsigned int *timeleft, struct score *score) { build_objects(m, score, cflags, COMPILE_NORMAL); } struct ccanlint objects_build = { .key = "objects_build", .name = "Module object files can be built", .compulsory = true, .check = check_objs_build, .can_run = can_build, .needs = "depends_exist" }; REGISTER_TEST(objects_build);