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)
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
......@@ -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,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.
......
......@@ -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);
......@@ -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"
};
......@@ -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);
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