Browse Source

ccanlint: chdir to temporary dir so gcov files land there.

This means parallel "make check" works again.
Rusty Russell 15 years ago
parent
commit
9825390596

+ 10 - 2
tools/ccanlint/ccanlint.c

@@ -333,7 +333,7 @@ int main(int argc, char *argv[])
 	unsigned int score = 0, total_score = 0;
 	unsigned int score = 0, total_score = 0;
 	struct manifest *m;
 	struct manifest *m;
 	struct ccanlint *i;
 	struct ccanlint *i;
-	const char *prefix = "", *dir = ".";
+	const char *prefix = "", *dir = talloc_getcwd(NULL);
 	
 	
 	init_tests();
 	init_tests();
 
 
@@ -344,7 +344,11 @@ int main(int argc, char *argv[])
 	while ((c = getopt(argc, argv, "sd:vnlx:t:k:")) != -1) {
 	while ((c = getopt(argc, argv, "sd:vnlx:t:k:")) != -1) {
 		switch (c) {
 		switch (c) {
 		case 'd':
 		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,
 			prefix = talloc_append_string(talloc_basename(NULL,
 								      optarg),
 								      optarg),
 						      ": ");
 						      ": ");
@@ -383,6 +387,10 @@ int main(int argc, char *argv[])
 	if (optind < argc)
 	if (optind < argc)
 		usage(argv[0]);
 		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);
 	m = get_manifest(talloc_autofree_context(), dir);
 
 
 	/* If you don't pass the compulsory tests, you don't even get a score */
 	/* If you don't pass the compulsory tests, you don't even get a score */

+ 0 - 20
tools/ccanlint/tests/build-coverage.c

@@ -13,7 +13,6 @@
 #include <err.h>
 #include <err.h>
 #include <string.h>
 #include <string.h>
 #include <ctype.h>
 #include <ctype.h>
-#include "build-coverage.h"
 
 
 /* Note: we already test safe_mode in run_tests.c */
 /* Note: we already test safe_mode in run_tests.c */
 static const char *can_run_coverage(struct manifest *m)
 static const char *can_run_coverage(struct manifest *m)
@@ -87,23 +86,6 @@ static char *lib_list(const struct manifest *m)
 	return ret;
 	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,
 static char *cov_compile(const void *ctx,
 			 struct manifest *m,
 			 struct manifest *m,
 			 struct ccan_file *file,
 			 struct ccan_file *file,
@@ -111,7 +93,6 @@ static char *cov_compile(const void *ctx,
 			 bool keep)
 			 bool keep)
 {
 {
 	char *errmsg;
 	char *errmsg;
-	char path[PATH_MAX];
 
 
 	file->cov_compiled = maybe_temp_file(ctx, "", keep, file->fullname);
 	file->cov_compiled = maybe_temp_file(ctx, "", keep, file->fullname);
 	errmsg = compile_and_link(ctx, file->fullname, ccan_dir,
 	errmsg = compile_and_link(ctx, file->fullname, ccan_dir,
@@ -123,7 +104,6 @@ static char *cov_compile(const void *ctx,
 		return errmsg;
 		return errmsg;
 	}
 	}
 
 
-	move_gcov_turd(getcwd(path, sizeof(path)), file, ".gcno");
 	return NULL;
 	return NULL;
 }
 }
 
 

+ 0 - 8
tools/ccanlint/tests/build-coverage.h

@@ -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 */

+ 0 - 3
tools/ccanlint/tests/run-coverage.c

@@ -14,7 +14,6 @@
 #include <err.h>
 #include <err.h>
 #include <string.h>
 #include <string.h>
 #include <ctype.h>
 #include <ctype.h>
-#include "build-coverage.h"
 
 
 struct coverage_result {
 struct coverage_result {
 	float uncovered;
 	float uncovered;
@@ -118,7 +117,6 @@ static void *do_run_coverage_tests(struct manifest *m,
 			return res;
 			return res;
 		}
 		}
 		covcmd = talloc_asprintf_append(covcmd, " %s", i->name);
 		covcmd = talloc_asprintf_append(covcmd, " %s", i->name);
-		move_gcov_turd(olddir, i, ".gcda");
 	}
 	}
 
 
 	list_for_each(&m->api_tests, i, list) {
 	list_for_each(&m->api_tests, i, list) {
@@ -129,7 +127,6 @@ static void *do_run_coverage_tests(struct manifest *m,
 			return res;
 			return res;
 		}
 		}
 		covcmd = talloc_asprintf_append(covcmd, " %s", i->name);
 		covcmd = talloc_asprintf_append(covcmd, " %s", i->name);
-		move_gcov_turd(olddir, i, ".gcda");
 	}
 	}
 
 
 	/* Now run gcov: we want output even if it succeeds. */
 	/* Now run gcov: we want output even if it succeeds. */

+ 7 - 2
tools/tools.c

@@ -172,7 +172,7 @@ static int unlink_all(char *dir)
 	return 0;
 	return 0;
 }
 }
 
 
-char *temp_file(const void *ctx, const char *extension)
+char *temp_dir(const void *ctx)
 {
 {
 	/* For first call, create dir. */
 	/* For first call, create dir. */
 	while (!tmpdir) {
 	while (!tmpdir) {
@@ -192,8 +192,13 @@ char *temp_file(const void *ctx, const char *extension)
 		}
 		}
 		talloc_set_destructor(tmpdir, unlink_all);
 		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 *maybe_temp_file(const void *ctx, const char *extension, bool keep,

+ 1 - 0
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_command(const void *ctx, unsigned int *time_ms, const char *fmt, ...);
 char *run_with_timeout(const void *ctx, const char *cmd,
 char *run_with_timeout(const void *ctx, const char *cmd,
 		       bool *ok, unsigned *timeout_ms);
 		       bool *ok, unsigned *timeout_ms);
+char *temp_dir(const void *ctx);
 char *temp_file(const void *ctx, const char *extension);
 char *temp_file(const void *ctx, const char *extension);
 bool move_file(const char *oldname, const char *newname);
 bool move_file(const char *oldname, const char *newname);