From 982539059656e4bbe6684e281140b3bb723deaa8 Mon Sep 17 00:00:00 2001 From: Rusty Russell Date: Fri, 27 Aug 2010 13:57:23 +0930 Subject: [PATCH] ccanlint: chdir to temporary dir so gcov files land there. This means parallel "make check" works again. --- tools/ccanlint/ccanlint.c | 12 ++++++++++-- tools/ccanlint/tests/build-coverage.c | 20 -------------------- tools/ccanlint/tests/build-coverage.h | 8 -------- tools/ccanlint/tests/run-coverage.c | 3 --- tools/tools.c | 9 +++++++-- tools/tools.h | 1 + 6 files changed, 18 insertions(+), 35 deletions(-) delete mode 100644 tools/ccanlint/tests/build-coverage.h diff --git a/tools/ccanlint/ccanlint.c b/tools/ccanlint/ccanlint.c index 3555ad2a..d65a4a43 100644 --- a/tools/ccanlint/ccanlint.c +++ b/tools/ccanlint/ccanlint.c @@ -333,7 +333,7 @@ int main(int argc, char *argv[]) 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(); @@ -344,7 +344,11 @@ int main(int argc, char *argv[]) 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), ": "); @@ -383,6 +387,10 @@ int main(int argc, char *argv[]) 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 */ diff --git a/tools/ccanlint/tests/build-coverage.c b/tools/ccanlint/tests/build-coverage.c index f1010204..7f750642 100644 --- a/tools/ccanlint/tests/build-coverage.c +++ b/tools/ccanlint/tests/build-coverage.c @@ -13,7 +13,6 @@ #include #include #include -#include "build-coverage.h" /* Note: we already test safe_mode in run_tests.c */ static const char *can_run_coverage(struct manifest *m) @@ -87,23 +86,6 @@ static char *lib_list(const 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, @@ -111,7 +93,6 @@ static char *cov_compile(const void *ctx, 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, @@ -123,7 +104,6 @@ static char *cov_compile(const void *ctx, return errmsg; } - move_gcov_turd(getcwd(path, sizeof(path)), file, ".gcno"); return NULL; } diff --git a/tools/ccanlint/tests/build-coverage.h b/tools/ccanlint/tests/build-coverage.h deleted file mode 100644 index 0bbac2be..00000000 --- a/tools/ccanlint/tests/build-coverage.h +++ /dev/null @@ -1,8 +0,0 @@ -#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 */ diff --git a/tools/ccanlint/tests/run-coverage.c b/tools/ccanlint/tests/run-coverage.c index 74247e32..9e976990 100644 --- a/tools/ccanlint/tests/run-coverage.c +++ b/tools/ccanlint/tests/run-coverage.c @@ -14,7 +14,6 @@ #include #include #include -#include "build-coverage.h" struct coverage_result { float uncovered; @@ -118,7 +117,6 @@ static void *do_run_coverage_tests(struct manifest *m, return res; } covcmd = talloc_asprintf_append(covcmd, " %s", i->name); - move_gcov_turd(olddir, i, ".gcda"); } list_for_each(&m->api_tests, i, list) { @@ -129,7 +127,6 @@ static void *do_run_coverage_tests(struct manifest *m, 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. */ diff --git a/tools/tools.c b/tools/tools.c index 7de02e3b..eacfbf9c 100644 --- a/tools/tools.c +++ b/tools/tools.c @@ -172,7 +172,7 @@ static int unlink_all(char *dir) return 0; } -char *temp_file(const void *ctx, const char *extension) +char *temp_dir(const void *ctx) { /* For first call, create dir. */ while (!tmpdir) { @@ -192,8 +192,13 @@ char *temp_file(const void *ctx, const char *extension) } 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, diff --git a/tools/tools.h b/tools/tools.h index 35f6bd8c..fe3a3aed 100644 --- a/tools/tools.h +++ b/tools/tools.h @@ -32,6 +32,7 @@ char *talloc_getcwd(const void *ctx); 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); -- 2.39.2