X-Git-Url: https://git.ozlabs.org/?p=ccan;a=blobdiff_plain;f=tools%2Fccanlint%2Fccanlint.c;h=5180368b3dda56c080f4eb97ed83fb5875168b13;hp=231ae7c05c45e0b1050b834b096b48ddb634f23d;hb=3b200f895cb7884c72d9e2409f047284027abc68;hpb=104125b2dd0a044fb3d68f9bc3b1b18c9f32ae2b diff --git a/tools/ccanlint/ccanlint.c b/tools/ccanlint/ccanlint.c index 231ae7c0..5180368b 100644 --- a/tools/ccanlint/ccanlint.c +++ b/tools/ccanlint/ccanlint.c @@ -43,8 +43,8 @@ static struct btree *info_exclude; static unsigned int timeout; /* These are overridden at runtime if we can find config.h */ -const char *compiler = CCAN_COMPILER; -const char *cflags = CCAN_CFLAGS; +char *compiler = NULL; +char *cflags = NULL; const char *config_header; @@ -499,7 +499,7 @@ static char *demangle_string(char *string) if (string[i] == '\\') { char repl; unsigned len = 0; - char *p = strchr(mapfrom, string[i+1]); + const char *p = strchr(mapfrom, string[i+1]); if (p) { repl = mapto[p - mapfrom]; len = 1; @@ -508,7 +508,7 @@ static char *demangle_string(char *string) repl = (string[i+2]-'0')*16 + string[i+3]-'0'; len = 3; - } else if (isdigit(string[i+1])) { + } else if (cisdigit(string[i+1])) { repl = (string[i+2]-'0')*8*8 + (string[i+3]-'0')*8 + (string[i+4]-'0'); @@ -552,20 +552,28 @@ static void read_config_header(void) if (!get_token(line, "define")) continue; sym = get_symbol_token(lines, line); - if (streq(sym, "CCAN_COMPILER")) { + if (streq(sym, "CCAN_COMPILER") && !compiler) { compiler = demangle_string(lines[i]); + if (!compiler) + errx(1, "%s:%u:could not parse CCAN_COMPILER", + fname, i+1); if (verbose > 1) printf("%s: compiler set to '%s'\n", fname, compiler); - } else if (streq(sym, "CCAN_CFLAGS")) { + } else if (streq(sym, "CCAN_CFLAGS") && !cflags) { cflags = demangle_string(lines[i]); + if (!cflags) + errx(1, "%s:%u:could not parse CCAN_CFLAGS", + fname, i+1); if (verbose > 1) printf("%s: compiler flags set to '%s'\n", fname, cflags); } } - if (!compiler || !cflags) - errx(1, "Problem parsing %s", fname); + if (!compiler) + compiler = CCAN_COMPILER; + if (!cflags) + compiler = CCAN_CFLAGS; } int main(int argc, char *argv[]) @@ -605,6 +613,10 @@ 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, + NULL, &compiler, "set the compiler"); + opt_register_arg("--cflags ", opt_set_charp, + NULL, &cflags, "set the compiler flags"); opt_register_noarg("-?|-h|--help", opt_usage_and_exit, "\nA program for checking and guiding development" " of CCAN modules.", @@ -653,7 +665,8 @@ int main(int argc, char *argv[]) } /* --target overrides known FAIL from _info */ - add_info_options(m->info_file, !target); + if (m->info_file) + add_info_options(m->info_file, !target); while ((i = get_next_test(&normal_tests)) != NULL) run_test(i, summary, &score, &total_score, m);