From 0621cac3bf1b5cf4c90de56e0e43b0acde0c94f1 Mon Sep 17 00:00:00 2001 From: Rusty Russell Date: Mon, 5 Dec 2011 23:18:50 +1030 Subject: [PATCH] ccanlint: use ccan/autodata Gets rid of generated file. --- tools/ccanlint/Makefile | 12 +++------ tools/ccanlint/ccanlint.c | 13 +++++---- tools/ccanlint/ccanlint.h | 4 ++- .../tests/info_documentation_exists.c | 18 ++++++++----- tools/ccanlint/tests/tests_exist.c | 17 ++++++------ tools/ccanlint/tests/tests_pass_valgrind.c | 27 ++++++++++--------- 6 files changed, 47 insertions(+), 44 deletions(-) diff --git a/tools/ccanlint/Makefile b/tools/ccanlint/Makefile index f079f8da..c263d0d6 100644 --- a/tools/ccanlint/Makefile +++ b/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 diff --git a/tools/ccanlint/ccanlint.c b/tools/ccanlint/ccanlint.c index d31ef940..8c6ee1e4 100644 --- a/tools/ccanlint/ccanlint.c +++ b/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); diff --git a/tools/ccanlint/ccanlint.h b/tools/ccanlint/ccanlint.h index fc92cd78..b0acc910 100644 --- a/tools/ccanlint/ccanlint.h +++ b/tools/ccanlint/ccanlint.h @@ -3,11 +3,13 @@ #include "config.h" #include #include +#include #include #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. diff --git a/tools/ccanlint/tests/info_documentation_exists.c b/tools/ccanlint/tests/info_documentation_exists.c index 6d914648..7be0b797 100644 --- a/tools/ccanlint/tests/info_documentation_exists.c +++ b/tools/ccanlint/tests/info_documentation_exists.c @@ -15,7 +15,16 @@ #include #include -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); diff --git a/tools/ccanlint/tests/tests_exist.c b/tools/ccanlint/tests/tests_exist.c index 2fc1664f..efa99753 100644 --- a/tools/ccanlint/tests/tests_exist.c +++ b/tools/ccanlint/tests/tests_exist.c @@ -10,6 +10,15 @@ #include #include +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" -}; - diff --git a/tools/ccanlint/tests/tests_pass_valgrind.c b/tools/ccanlint/tests/tests_pass_valgrind.c index 8ccdad96..773a85e6 100644 --- a/tools/ccanlint/tests/tests_pass_valgrind.c +++ b/tools/ccanlint/tests/tests_pass_valgrind.c @@ -18,9 +18,6 @@ #include #include -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); -- 2.39.2