Gets rid of generated file.
CORE_OBJS := \
ccan/asort/asort.o \
+ ccan/autodata/autodata.o \
ccan/dgraph/dgraph.o \
ccan/foreach/foreach.o \
ccan/grab_file/grab_file.o \
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 \
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
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);
#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.
#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)
{
}
}
-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);
#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)
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"
-};
-
#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)
{
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)
.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);