#include <tools/tools.h>
#include <ccan/talloc/talloc.h>
#include <ccan/str/str.h>
+#include <ccan/foreach/foreach.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
char *fullfile = talloc_asprintf(m, "%s/%s", m->dir, i->name);
i->cov_compiled = maybe_temp_file(m, "", keep, fullfile);
- if (!compile_object(m, fullfile, ccan_dir, "",
+ if (!compile_object(m, fullfile, ccan_dir, compiler, cflags,
i->cov_compiled, &err)) {
- score_file_error(score, i, 0, err);
+ score_file_error(score, i, 0, "%s", err);
talloc_free(i->cov_compiled);
i->cov_compiled = NULL;
return false;
/* Objects from any other C files. */
list_for_each(&m->other_test_c_files, i, list)
- list = talloc_asprintf_append(list, " %s", i->compiled);
+ list = talloc_asprintf_append(list, " %s",
+ i->compiled[COMPILE_NORMAL]);
if (modobjs)
list = talloc_append_string(list, modobjs);
/* Other ccan modules (don't need coverage versions of those). */
list_for_each(&m->deps, subm, list) {
- if (subm->compiled)
+ if (subm->compiled[COMPILE_NORMAL])
list = talloc_asprintf_append(list, " %s",
- subm->compiled);
+ subm->compiled
+ [COMPILE_NORMAL]);
}
return list;
static char *lib_list(const struct manifest *m)
{
unsigned int i, num;
- char **libs = get_libs(m, m->dir, &num, &m->info_file->compiled);
+ char **libs = get_libs(m, m->dir, &num,
+ &m->info_file->compiled[COMPILE_NORMAL]);
char *ret = talloc_strdup(m, "");
for (i = 0; i < num; i++)
bool keep)
{
char *output;
+ char *f = talloc_asprintf(ctx, "%s %s", cflags, COVERAGE_CFLAGS);
file->cov_compiled = maybe_temp_file(ctx, "", keep, file->fullname);
if (!compile_and_link(ctx, file->fullname, ccan_dir,
obj_list(m, modobjs),
- COVERAGE_CFLAGS,
+ compiler, f,
lib_list(m), file->cov_compiled, &output)) {
talloc_free(file->cov_compiled);
file->cov_compiled = NULL;
{
char *cmdout, *modobjs = NULL;
struct ccan_file *i;
+ struct list_head *h;
if (!list_empty(&m->api_tests)
&& !build_module_objs_with_coverage(m, keep, score, &modobjs)) {
- score->error = "Failed to compile module objects with coverage";
+ score->error = talloc_strdup(score,
+ "Failed to compile module objects with coverage");
return;
}
- list_for_each(&m->run_tests, i, list) {
- cmdout = cov_compile(m, m, i, NULL, keep);
- if (cmdout) {
- score->error = "Failed to compile test with coverage";
- score_file_error(score, i, 0, cmdout);
- }
- }
-
- list_for_each(&m->api_tests, i, list) {
- cmdout = cov_compile(m, m, i, modobjs, keep);
- if (cmdout) {
- score->error = "Failed to compile test with coverage";
- score_file_error(score, i, 0, cmdout);
+ foreach_ptr(h, &m->run_tests, &m->api_tests) {
+ list_for_each(h, i, list) {
+ cmdout = cov_compile(m, m, i,
+ h == &m->api_tests
+ ? modobjs : NULL,
+ keep);
+ if (cmdout) {
+ score_file_error(score, i, 0,
+ "Failed to compile test with coverage: %s",
+ cmdout);
+ }
}
}
if (!score->error) {