Browse Source

Make manifest code do chdir into appropriate directory.

Rusty Russell 16 years ago
parent
commit
32a31d9e4f

+ 3 - 2
tools/ccanlint/ccanlint.c

@@ -244,13 +244,14 @@ 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 = "";
+	const char *prefix = "", *dir = ".";
 
 
 	/* I'd love to use long options, but that's not standard. */
 	/* I'd love to use long options, but that's not standard. */
 	/* FIXME: getopt_long ccan package? */
 	/* FIXME: getopt_long ccan package? */
 	while ((c = getopt(argc, argv, "sd:vn")) != -1) {
 	while ((c = getopt(argc, argv, "sd:vn")) != -1) {
 		switch (c) {
 		switch (c) {
 		case 'd':
 		case 'd':
+			dir = optarg;
 			prefix = talloc_append_string(talloc_basename(NULL,
 			prefix = talloc_append_string(talloc_basename(NULL,
 								      optarg),
 								      optarg),
 						      ": ");
 						      ": ");
@@ -274,7 +275,7 @@ int main(int argc, char *argv[])
 	if (optind < argc)
 	if (optind < argc)
 		usage(argv[0]);
 		usage(argv[0]);
 
 
-	m = get_manifest(talloc_autofree_context());
+	m = get_manifest(talloc_autofree_context(), dir);
 
 
 	init_tests();
 	init_tests();
 
 

+ 1 - 1
tools/ccanlint/ccanlint.h

@@ -34,7 +34,7 @@ struct manifest {
 	struct list_head dep_objs;
 	struct list_head dep_objs;
 };
 };
 
 
-struct manifest *get_manifest(const void *ctx);
+struct manifest *get_manifest(const void *ctx, const char *dir);
 
 
 struct ccanlint {
 struct ccanlint {
 	struct list_node list;
 	struct list_node list;

+ 1 - 13
tools/ccanlint/compulsory_tests/check_depends_built.c

@@ -24,22 +24,10 @@ static const char *can_build(struct manifest *m)
 /* FIXME: recursive ccanlint if they ask for it. */
 /* FIXME: recursive ccanlint if they ask for it. */
 static bool expect_obj_file(const char *dir)
 static bool expect_obj_file(const char *dir)
 {
 {
-	char *olddir;
 	struct manifest *dep_man;
 	struct manifest *dep_man;
 	bool has_c_files;
 	bool has_c_files;
 
 
-	olddir = talloc_getcwd(dir);
-	if (!olddir)
-		err(1, "Getting current directory");
-
-	/* We will fail below if this doesn't exist. */
-	if (chdir(dir) != 0)
-		return false;
-
-	dep_man = get_manifest(dir);
-	if (chdir(olddir) != 0)
-		err(1, "Returning to original directory '%s'", olddir);
-	talloc_free(olddir);
+	dep_man = get_manifest(dir, dir);
 
 
 	/* If it has C files, we expect an object file built from them. */
 	/* If it has C files, we expect an object file built from them. */
 	has_c_files = !list_empty(&dep_man->c_files);
 	has_c_files = !list_empty(&dep_man->c_files);

+ 14 - 1
tools/ccanlint/file_analysis.c

@@ -151,9 +151,10 @@ char *report_on_lines(struct list_head *files,
 	return sofar;
 	return sofar;
 }
 }
 
 
-struct manifest *get_manifest(const void *ctx)
+struct manifest *get_manifest(const void *ctx, const char *dir)
 {
 {
 	struct manifest *m = talloc(ctx, struct manifest);
 	struct manifest *m = talloc(ctx, struct manifest);
+	char *olddir;
 	unsigned int len;
 	unsigned int len;
 
 
 	m->info_file = NULL;
 	m->info_file = NULL;
@@ -169,6 +170,13 @@ struct manifest *get_manifest(const void *ctx)
 	list_head_init(&m->dep_dirs);
 	list_head_init(&m->dep_dirs);
 	list_head_init(&m->dep_objs);
 	list_head_init(&m->dep_objs);
 
 
+	olddir = talloc_getcwd(NULL);
+	if (!olddir)
+		err(1, "Getting current directory");
+
+	if (chdir(dir) != 0)
+		err(1, "Failed to chdir to %s", dir);
+
 	m->basename = talloc_getcwd(m);
 	m->basename = talloc_getcwd(m);
 	if (!m->basename)
 	if (!m->basename)
 		err(1, "Getting current directory");
 		err(1, "Getting current directory");
@@ -182,6 +190,11 @@ struct manifest *get_manifest(const void *ctx)
 	m->basename++;
 	m->basename++;
 
 
 	add_files(m, "");
 	add_files(m, "");
+
+	if (chdir(olddir) != 0)
+		err(1, "Returning to original directory '%s'", olddir);
+	talloc_free(olddir);
+
 	return m;
 	return m;
 }
 }