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