X-Git-Url: http://git.ozlabs.org/?p=ccan;a=blobdiff_plain;f=tools%2Fccanlint%2Fccanlint.c;h=81f9614739b2242410bb7524634101ddb1e191da;hp=5180368b3dda56c080f4eb97ed83fb5875168b13;hb=c2d60644d2c00fb32258b380bb25ce0a26b87026;hpb=3b200f895cb7884c72d9e2409f047284027abc68 diff --git a/tools/ccanlint/ccanlint.c b/tools/ccanlint/ccanlint.c index 5180368b..81f96147 100644 --- a/tools/ccanlint/ccanlint.c +++ b/tools/ccanlint/ccanlint.c @@ -32,6 +32,7 @@ #include #include #include +#include int verbose = 0; static LIST_HEAD(compulsory_tests); @@ -43,8 +44,8 @@ static struct btree *info_exclude; static unsigned int timeout; /* These are overridden at runtime if we can find config.h */ -char *compiler = NULL; -char *cflags = NULL; +const char *compiler = NULL; +const char *cflags = NULL; const char *config_header; @@ -160,9 +161,9 @@ static bool run_test(struct ccanlint *i, printf("%s%s", score->error, strends(score->error, "\n") ? "" : "\n"); } - if (!quiet && !score->pass && i->handle) - i->handle(m, score); } + if (!quiet && score->score < score->total && i->handle) + i->handle(m, score); *running_score += score->score; *running_total += score->total; @@ -284,24 +285,29 @@ static void init_tests(void) } btree_delete(keys); btree_delete(names); +} - if (!verbose) - return; +static void print_test_depends(void) +{ + struct list_head *list; foreach_ptr(list, &compulsory_tests, &normal_tests) { + struct ccanlint *c; printf("\%s Tests\n", list == &compulsory_tests ? "Compulsory" : "Normal"); - if (!list_empty(&c->dependencies)) { - const struct dependent *d; - printf("These depend on us:\n"); - list_for_each(&c->dependencies, d, node) - printf("\t%s\n", d->dependent->name); + list_for_each(list, c, list) { + if (!list_empty(&c->dependencies)) { + const struct dependent *d; + printf("These depend on %s:\n", c->key); + list_for_each(&c->dependencies, d, node) + printf("\t%s\n", d->dependent->key); + } } } } -static int show_tmpdir(char *dir) +static int show_tmpdir(const char *dir) { printf("You can find ccanlint working files in '%s'\n", dir); return 0; @@ -576,9 +582,14 @@ static void read_config_header(void) compiler = CCAN_CFLAGS; } +static char *opt_set_const_charp(const char *arg, const char **p) +{ + return opt_set_charp(arg, cast_const2(char **, p)); +} + int main(int argc, char *argv[]) { - bool summary = false; + bool summary = false, pass = true; unsigned int score = 0, total_score = 0; struct manifest *m; struct ccanlint *i; @@ -613,9 +624,9 @@ int main(int argc, char *argv[]) opt_register_arg("--target ", opt_set_charp, NULL, &target, "only run one test (and its prerequisites)"); - opt_register_arg("--compiler ", opt_set_charp, + opt_register_arg("--compiler ", opt_set_const_charp, NULL, &compiler, "set the compiler"); - opt_register_arg("--cflags ", opt_set_charp, + opt_register_arg("--cflags ", opt_set_const_charp, NULL, &cflags, "set the compiler flags"); opt_register_noarg("-?|-h|--help", opt_usage_and_exit, "\nA program for checking and guiding development" @@ -634,8 +645,10 @@ int main(int argc, char *argv[]) dir[strlen(dir)-1] = '\0'; if (dir != base_dir) prefix = talloc_append_string(talloc_basename(NULL, dir), ": "); - if (verbose >= 3) + if (verbose >= 3) { compile_verbose = true; + print_test_depends(); + } if (verbose >= 4) tools_verbose = true; @@ -669,8 +682,8 @@ int main(int argc, char *argv[]) add_info_options(m->info_file, !target); while ((i = get_next_test(&normal_tests)) != NULL) - run_test(i, summary, &score, &total_score, m); + pass &= run_test(i, summary, &score, &total_score, m); printf("%sTotal score: %u/%u\n", prefix, score, total_score); - return 0; + return pass ? 0 : 1; }