This means parallel "make check" works again.
unsigned int score = 0, total_score = 0;
struct manifest *m;
struct ccanlint *i;
- const char *prefix = "", *dir = ".";
+ const char *prefix = "", *dir = talloc_getcwd(NULL);
init_tests();
while ((c = getopt(argc, argv, "sd:vnlx:t:k:")) != -1) {
switch (c) {
case 'd':
- dir = optarg;
+ if (optarg[0] != '/')
+ dir = talloc_asprintf_append(NULL, "%s/%s",
+ dir, optarg);
+ else
+ dir = optarg;
prefix = talloc_append_string(talloc_basename(NULL,
optarg),
": ");
if (optind < argc)
usage(argv[0]);
+ /* We move into temporary directory, so gcov dumps its files there. */
+ if (chdir(temp_dir(talloc_autofree_context())) != 0)
+ err(1, "Error changing to %s temporary dir", temp_dir(NULL));
+
m = get_manifest(talloc_autofree_context(), dir);
/* If you don't pass the compulsory tests, you don't even get a score */
#include <err.h>
#include <string.h>
#include <ctype.h>
-#include "build-coverage.h"
/* Note: we already test safe_mode in run_tests.c */
static const char *can_run_coverage(struct manifest *m)
return ret;
}
-/* Grrr... gcov drops a turd in the current directory. */
-void move_gcov_turd(const char *dir,
- struct ccan_file *file, const char *extension)
-{
- char *base, *gcovfile, *gcovdest;
-
- base = talloc_basename(file, file->name);
- gcovfile = talloc_asprintf(file, "%s/%.*s%s",
- dir, strlen(base)-2, base, extension);
- gcovdest = talloc_asprintf(file, "%s/%.*s%s",
- talloc_dirname(base, file->cov_compiled),
- strlen(base)-2, base, extension);
- if (!move_file(gcovfile, gcovdest))
- err(1, "Could not move %s to %s", gcovfile, gcovdest);
- talloc_free(base);
-}
-
static char *cov_compile(const void *ctx,
struct manifest *m,
struct ccan_file *file,
bool keep)
{
char *errmsg;
- char path[PATH_MAX];
file->cov_compiled = maybe_temp_file(ctx, "", keep, file->fullname);
errmsg = compile_and_link(ctx, file->fullname, ccan_dir,
return errmsg;
}
- move_gcov_turd(getcwd(path, sizeof(path)), file, ".gcno");
return NULL;
}
+++ /dev/null
-#ifndef CCANLINT_BUILD_COVERAGE_H
-#define CCANLINT_BUILD_COVERAGE_H
-
-/* FIXME: gcov dumps a file into a random dir. */
-void move_gcov_turd(const char *dir,
- struct ccan_file *file, const char *extension);
-
-#endif /* CCANLINT_BUILD_COVERAGE_H */
#include <err.h>
#include <string.h>
#include <ctype.h>
-#include "build-coverage.h"
struct coverage_result {
float uncovered;
return res;
}
covcmd = talloc_asprintf_append(covcmd, " %s", i->name);
- move_gcov_turd(olddir, i, ".gcda");
}
list_for_each(&m->api_tests, i, list) {
return res;
}
covcmd = talloc_asprintf_append(covcmd, " %s", i->name);
- move_gcov_turd(olddir, i, ".gcda");
}
/* Now run gcov: we want output even if it succeeds. */
return 0;
}
-char *temp_file(const void *ctx, const char *extension)
+char *temp_dir(const void *ctx)
{
/* For first call, create dir. */
while (!tmpdir) {
}
talloc_set_destructor(tmpdir, unlink_all);
}
+ return tmpdir;
+}
- return talloc_asprintf(ctx, "%s/%u%s", tmpdir, count++, extension);
+char *temp_file(const void *ctx, const char *extension)
+{
+ return talloc_asprintf(ctx, "%s/%u%s",
+ temp_dir(ctx), count++, extension);
}
char *maybe_temp_file(const void *ctx, const char *extension, bool keep,
char *run_command(const void *ctx, unsigned int *time_ms, const char *fmt, ...);
char *run_with_timeout(const void *ctx, const char *cmd,
bool *ok, unsigned *timeout_ms);
+char *temp_dir(const void *ctx);
char *temp_file(const void *ctx, const char *extension);
bool move_file(const char *oldname, const char *newname);