Browse Source

ccanlint: use ccan/autodata

Gets rid of generated file.
Rusty Russell 14 years ago
parent
commit
0621cac3bf

+ 3 - 9
tools/ccanlint/Makefile

@@ -3,6 +3,7 @@ TEST_OBJS := $(TEST_CFILES:.c=.o)
 
 CORE_OBJS := \
 	ccan/asort/asort.o \
+	ccan/autodata/autodata.o \
 	ccan/dgraph/dgraph.o \
 	ccan/foreach/foreach.o \
 	ccan/grab_file/grab_file.o \
@@ -14,6 +15,7 @@ CORE_OBJS := \
 	ccan/opt/opt.o \
 	ccan/opt/parse.o \
 	ccan/opt/usage.o \
+	ccan/ptr_valid/ptr_valid.o \
 	ccan/read_write_all/read_write_all.o \
 	ccan/str/str.o ccan/str/debug.o \
 	ccan/str_talloc/str_talloc.o \
@@ -32,17 +34,9 @@ CORE_OBJS := \
 
 OBJS := $(CORE_OBJS) $(TEST_OBJS)
 
-# FIXME: write a trivial C program to do this
-tools/ccanlint/generated-testlist: $(TEST_CFILES)
-	cat $^ | grep ^REGISTER_TEST > $@
-
-$(TEST_OBJS): tools/ccanlint/generated-testlist
-
-# Otherwise, ccanlint.c et al. may fail to build
-$(CORE_OBJS): tools/ccanlint/generated-testlist config.h
+$(CORE_OBJS): config.h
 
 tools/ccanlint/ccanlint: $(OBJS)
 
 ccanlint-clean:
-	$(RM) tools/ccanlint/generated-testlist
 	$(RM) tools/ccanlint/ccanlint

+ 6 - 7
tools/ccanlint/ccanlint.c

@@ -279,19 +279,18 @@ static bool check_names(const char *member, struct ccanlint *c,
 	return true;
 }
 
-#undef REGISTER_TEST
-#define REGISTER_TEST(name, ...) extern struct ccanlint name
-#include "generated-testlist"
-
 static void init_tests(void)
 {
 	struct ccanlint_map names;
+	struct ccanlint **table;
+	size_t i, num;
 
 	strmap_init(&tests);
 
-#undef REGISTER_TEST
-#define REGISTER_TEST(name) register_test(&name)
-#include "generated-testlist"
+	table = autodata_get(ccanlint_tests, &num);
+	for (i = 0; i < num; i++)
+		register_test(table[i]);
+	autodata_free(table);
 
 	strmap_iterate(&tests, init_deps, NULL);
 

+ 3 - 1
tools/ccanlint/ccanlint.h

@@ -3,11 +3,13 @@
 #include "config.h"
 #include <ccan/list/list.h>
 #include <ccan/dgraph/dgraph.h>
+#include <ccan/autodata/autodata.h>
 #include <stdbool.h>
 #include "../doc_extract.h"
 #include "licenses.h"
 
-#define REGISTER_TEST(name, ...) extern struct ccanlint name
+AUTODATA_TYPE(ccanlint_tests, struct ccanlint);
+#define REGISTER_TEST(test) AUTODATA(ccanlint_tests, &test)
 
 /* 0 == Describe failed tests.
    1 == Describe results for partial failures.

+ 11 - 7
tools/ccanlint/tests/info_documentation_exists.c

@@ -15,7 +15,16 @@
 #include <ccan/noerr/noerr.h>
 #include <ccan/grab_file/grab_file.h>
 
-REGISTER_TEST(info_documentation_exists);
+static void check_info_documentation_exists(struct manifest *m,
+					    unsigned int *timeleft,
+					    struct score *score);
+
+static struct ccanlint info_documentation_exists = {
+	.key = "info_documentation_exists",
+	.name = "Module has documentation in _info",
+	.check = check_info_documentation_exists,
+	.needs = "info_exists"
+};
 
 static void create_info_template_doc(struct manifest *m, struct score *score)
 {
@@ -95,10 +104,5 @@ static void check_info_documentation_exists(struct manifest *m,
 	}
 }
 
-struct ccanlint info_documentation_exists = {
-	.key = "info_documentation_exists",
-	.name = "Module has documentation in _info",
-	.check = check_info_documentation_exists,
-	.needs = "info_exists"
-};
+REGISTER_TEST(info_documentation_exists);
 

+ 9 - 8
tools/ccanlint/tests/tests_exist.c

@@ -10,6 +10,15 @@
 #include <err.h>
 #include <ccan/talloc/talloc.h>
 
+static void check_tests_exist(struct manifest *m,
+			      unsigned int *timeleft, struct score *score);
+
+static struct ccanlint tests_exist = {
+	.key = "tests_exist",
+	.name = "Module has test directory with tests in it",
+	.check = check_tests_exist,
+	.needs = "info_exists"
+};
 REGISTER_TEST(tests_exist);
 
 static void handle_no_tests(struct manifest *m, struct score *score)
@@ -126,11 +135,3 @@ static void check_tests_exist(struct manifest *m,
 	score->pass = true;
 	score->score = score->total;
 }
-
-struct ccanlint tests_exist = {
-	.key = "tests_exist",
-	.name = "Module has test directory with tests in it",
-	.check = check_tests_exist,
-	.needs = "info_exists"
-};
-

+ 15 - 12
tools/ccanlint/tests/tests_pass_valgrind.c

@@ -18,9 +18,6 @@
 #include <string.h>
 #include <ctype.h>
 
-REGISTER_TEST(tests_pass_valgrind);
-REGISTER_TEST(tests_pass_valgrind_noleaks);
-
 /* Note: we already test safe_mode in run_tests.c */
 static const char *can_run_vg(struct manifest *m)
 {
@@ -29,6 +26,20 @@ static const char *can_run_vg(struct manifest *m)
 	return NULL;
 }
 
+static void do_leakcheck_vg(struct manifest *m,
+			    unsigned int *timeleft,
+			    struct score *score);
+
+static struct ccanlint tests_pass_valgrind_noleaks = {
+	.key = "tests_pass_valgrind_noleaks",
+	.name = "Module's run and api tests have no memory leaks",
+	.check = do_leakcheck_vg,
+	.takes_options = true,
+	.needs = "tests_pass_valgrind"
+};
+REGISTER_TEST(tests_pass_valgrind_noleaks);
+
+
 /* Example output:
 ==2749== Conditional jump or move depends on uninitialised value(s)
 ==2749==    at 0x4026C60: strnlen (mc_replace_strmem.c:263)
@@ -257,12 +268,4 @@ struct ccanlint tests_pass_valgrind = {
 	.takes_options = true,
 	.needs = "tests_pass"
 };
-
-struct ccanlint tests_pass_valgrind_noleaks = {
-	.key = "tests_pass_valgrind_noleaks",
-	.name = "Module's run and api tests have no memory leaks",
-	.check = do_leakcheck_vg,
-	.takes_options = true,
-	.needs = "tests_pass_valgrind"
-};
-
+REGISTER_TEST(tests_pass_valgrind);