summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRusty Russell <rusty@rustcorp.com.au>2011-12-05 23:18:50 +1030
committerRusty Russell <rusty@rustcorp.com.au>2011-12-05 23:18:50 +1030
commit0621cac3bf1b5cf4c90de56e0e43b0acde0c94f1 (patch)
tree039f01e287ad0f1d2fe53d4f83c4badd307c0077
parent446eaa5f66db385d89357ba43aa5886f8b906ff0 (diff)
ccanlint: use ccan/autodata
Gets rid of generated file.
-rw-r--r--tools/ccanlint/Makefile12
-rw-r--r--tools/ccanlint/ccanlint.c13
-rw-r--r--tools/ccanlint/ccanlint.h4
-rw-r--r--tools/ccanlint/tests/info_documentation_exists.c18
-rw-r--r--tools/ccanlint/tests/tests_exist.c17
-rw-r--r--tools/ccanlint/tests/tests_pass_valgrind.c27
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 <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.
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 <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);
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 <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"
-};
-
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 <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);