Commit c9d946d0 authored by Rusty Russell's avatar Rusty Russell

tools/ccanlint: detect more unmentioned dependencies.

Signed-off-by: default avatarRusty Russell <rusty@rustcorp.com.au>
parent 925a9a86
......@@ -53,10 +53,9 @@ static bool check_dep_includes(struct manifest *m,
if (has_dep(m, deps, used, mod))
continue;
/* FIXME: we can't be sure about
* conditional includes, so don't
* complain. */
if (!li[i].cond) {
/* FIXME: we can't be sure about conditional includes,
* so don't complain (handle common case of idempotent wrap) */
if (!li[i].cond || li[i].cond == f->idempotent_cond) {
score_file_error(score, f, i+1,
"%s not listed in _info", mod);
ok = false;
......@@ -138,7 +137,7 @@ struct ccanlint depends_accurate = {
.key = "depends_accurate",
.name = "Module's CCAN dependencies are the only CCAN files #included",
.check = check_depends_accurate,
.needs = "depends_exist test_depends_exist"
.needs = "depends_exist test_depends_exist headers_idempotent"
};
REGISTER_TEST(depends_accurate);
......@@ -125,9 +125,10 @@ static void check_idem(struct ccan_file *f, struct score *score)
if (!f->lines[i])
return;
/* We expect a condition on this line. */
/* We expect a condition around this line. */
if (!line_info[i].cond) {
score_file_error(score, f, i+1, "Expected #ifndef");
score_file_error(score, f, first_preproc_line+1,
"Expected #ifndef");
return;
}
......@@ -136,7 +137,8 @@ static void check_idem(struct ccan_file *f, struct score *score)
/* We expect the condition to be ! IFDEF <symbol>. */
if (line_info[i].cond->type != PP_COND_IFDEF
|| !line_info[i].cond->inverse) {
score_file_error(score, f, i+1, "Expected #ifndef");
score_file_error(score, f, first_preproc_line+1,
"Expected #ifndef");
return;
}
......@@ -157,6 +159,9 @@ static void check_idem(struct ccan_file *f, struct score *score)
return;
}
/* Record this for use in depends_accurate */
f->idempotent_cond = line_info[i].cond;
/* Rest of code should all be covered by that conditional. */
for (i++; f->lines[i]; i++) {
unsigned int val = 0;
......
......@@ -78,6 +78,8 @@ struct ccan_file *new_ccan_file(const void *ctx, const char *dir,
f->fullname = path_join(f, dir, f->name);
f->contents = NULL;
f->simplified = NULL;
f->idempotent_cond = NULL;
return f;
}
......
......@@ -80,6 +80,9 @@ struct ccan_file {
/* Simplified stream (lowercase letters and single spaces) */
char *simplified;
/* Condition for idempotent wrapper (filled by headers_idempotent) */
struct pp_conditions *idempotent_cond;
};
/* A new ccan_file, with the given dir and name (either can be take()). */
......
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