Commit 0621cac3 authored by Rusty Russell's avatar Rusty Russell

ccanlint: use ccan/autodata

Gets rid of generated file.
parent 446eaa5f
...@@ -3,6 +3,7 @@ TEST_OBJS := $(TEST_CFILES:.c=.o) ...@@ -3,6 +3,7 @@ TEST_OBJS := $(TEST_CFILES:.c=.o)
CORE_OBJS := \ CORE_OBJS := \
ccan/asort/asort.o \ ccan/asort/asort.o \
ccan/autodata/autodata.o \
ccan/dgraph/dgraph.o \ ccan/dgraph/dgraph.o \
ccan/foreach/foreach.o \ ccan/foreach/foreach.o \
ccan/grab_file/grab_file.o \ ccan/grab_file/grab_file.o \
...@@ -14,6 +15,7 @@ CORE_OBJS := \ ...@@ -14,6 +15,7 @@ CORE_OBJS := \
ccan/opt/opt.o \ ccan/opt/opt.o \
ccan/opt/parse.o \ ccan/opt/parse.o \
ccan/opt/usage.o \ ccan/opt/usage.o \
ccan/ptr_valid/ptr_valid.o \
ccan/read_write_all/read_write_all.o \ ccan/read_write_all/read_write_all.o \
ccan/str/str.o ccan/str/debug.o \ ccan/str/str.o ccan/str/debug.o \
ccan/str_talloc/str_talloc.o \ ccan/str_talloc/str_talloc.o \
...@@ -32,17 +34,9 @@ CORE_OBJS := \ ...@@ -32,17 +34,9 @@ CORE_OBJS := \
OBJS := $(CORE_OBJS) $(TEST_OBJS) OBJS := $(CORE_OBJS) $(TEST_OBJS)
# FIXME: write a trivial C program to do this $(CORE_OBJS): config.h
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
tools/ccanlint/ccanlint: $(OBJS) tools/ccanlint/ccanlint: $(OBJS)
ccanlint-clean: ccanlint-clean:
$(RM) tools/ccanlint/generated-testlist
$(RM) tools/ccanlint/ccanlint $(RM) tools/ccanlint/ccanlint
...@@ -279,19 +279,18 @@ static bool check_names(const char *member, struct ccanlint *c, ...@@ -279,19 +279,18 @@ static bool check_names(const char *member, struct ccanlint *c,
return true; return true;
} }
#undef REGISTER_TEST
#define REGISTER_TEST(name, ...) extern struct ccanlint name
#include "generated-testlist"
static void init_tests(void) static void init_tests(void)
{ {
struct ccanlint_map names; struct ccanlint_map names;
struct ccanlint **table;
size_t i, num;
strmap_init(&tests); strmap_init(&tests);
#undef REGISTER_TEST table = autodata_get(ccanlint_tests, &num);
#define REGISTER_TEST(name) register_test(&name) for (i = 0; i < num; i++)
#include "generated-testlist" register_test(table[i]);
autodata_free(table);
strmap_iterate(&tests, init_deps, NULL); strmap_iterate(&tests, init_deps, NULL);
......
...@@ -3,11 +3,13 @@ ...@@ -3,11 +3,13 @@
#include "config.h" #include "config.h"
#include <ccan/list/list.h> #include <ccan/list/list.h>
#include <ccan/dgraph/dgraph.h> #include <ccan/dgraph/dgraph.h>
#include <ccan/autodata/autodata.h>
#include <stdbool.h> #include <stdbool.h>
#include "../doc_extract.h" #include "../doc_extract.h"
#include "licenses.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. /* 0 == Describe failed tests.
1 == Describe results for partial failures. 1 == Describe results for partial failures.
......
...@@ -15,7 +15,16 @@ ...@@ -15,7 +15,16 @@
#include <ccan/noerr/noerr.h> #include <ccan/noerr/noerr.h>
#include <ccan/grab_file/grab_file.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) 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, ...@@ -95,10 +104,5 @@ static void check_info_documentation_exists(struct manifest *m,
} }
} }
struct ccanlint info_documentation_exists = { REGISTER_TEST(info_documentation_exists);
.key = "info_documentation_exists",
.name = "Module has documentation in _info",
.check = check_info_documentation_exists,
.needs = "info_exists"
};
...@@ -10,6 +10,15 @@ ...@@ -10,6 +10,15 @@
#include <err.h> #include <err.h>
#include <ccan/talloc/talloc.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); REGISTER_TEST(tests_exist);
static void handle_no_tests(struct manifest *m, struct score *score) static void handle_no_tests(struct manifest *m, struct score *score)
...@@ -126,11 +135,3 @@ static void check_tests_exist(struct manifest *m, ...@@ -126,11 +135,3 @@ static void check_tests_exist(struct manifest *m,
score->pass = true; score->pass = true;
score->score = score->total; 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"
};
...@@ -18,9 +18,6 @@ ...@@ -18,9 +18,6 @@
#include <string.h> #include <string.h>
#include <ctype.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 */ /* Note: we already test safe_mode in run_tests.c */
static const char *can_run_vg(struct manifest *m) static const char *can_run_vg(struct manifest *m)
{ {
...@@ -29,6 +26,20 @@ static const char *can_run_vg(struct manifest *m) ...@@ -29,6 +26,20 @@ static const char *can_run_vg(struct manifest *m)
return NULL; 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: /* Example output:
==2749== Conditional jump or move depends on uninitialised value(s) ==2749== Conditional jump or move depends on uninitialised value(s)
==2749== at 0x4026C60: strnlen (mc_replace_strmem.c:263) ==2749== at 0x4026C60: strnlen (mc_replace_strmem.c:263)
...@@ -257,12 +268,4 @@ struct ccanlint tests_pass_valgrind = { ...@@ -257,12 +268,4 @@ struct ccanlint tests_pass_valgrind = {
.takes_options = true, .takes_options = true,
.needs = "tests_pass" .needs = "tests_pass"
}; };
REGISTER_TEST(tests_pass_valgrind);
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"
};
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment