X-Git-Url: http://git.ozlabs.org/?a=blobdiff_plain;f=tools%2Fconfigurator%2Fconfigurator.c;h=7b2adbaa94c45f76f4eca35c71f6ab51c00100aa;hb=5cd7a0eacf97f9e8d112223e5908dab25d7a6faa;hp=b8cb6f7a7cd4c42f2fd9701bd1d84a71ceba2ee0;hpb=33a9e4536e542bf1829e3c0c856d3d36fcb7236d;p=ccan diff --git a/tools/configurator/configurator.c b/tools/configurator/configurator.c index b8cb6f7a..7b2adbaa 100644 --- a/tools/configurator/configurator.c +++ b/tools/configurator/configurator.c @@ -32,6 +32,7 @@ #include #include #include +#include #ifdef _MSC_VER #define popen _popen @@ -65,6 +66,7 @@ static const char *progname = ""; static int verbose; +static bool like_a_libtool = false; struct test { const char *name; @@ -437,6 +439,20 @@ static void c12r_errx(int eval, const char *fmt, ...) exit(eval); } +static void start_test(const char *what, const char *why) +{ + if (like_a_libtool) { + printf("%s%s... ", what, why); + fflush(stdout); + } +} + +static void end_test(bool result) +{ + if (like_a_libtool) + printf("%s\n", result ? "yes" : "no"); +} + static size_t fcopy(FILE *fsrc, FILE *fdst) { char buffer[BUFSIZ]; @@ -634,6 +650,7 @@ static bool run_test(const char *cmd, struct test *test) printf("Extra link line: %s", newcmd); } + start_test("checking for ", test->name); output = run(newcmd, &status); free(newcmd); @@ -666,6 +683,7 @@ static bool run_test(const char *cmd, struct test *test) test->answer = (status == 0); } test->done = true; + end_test(test->answer); if (test->answer && test->overrides) { struct test *override = find_test(test->overrides); @@ -684,13 +702,14 @@ int main(int argc, const char *argv[]) const char *outflag = DEFAULT_OUTPUT_EXE_FLAG; const char *configurator_cc = NULL; const char *orig_cc; + const char *varfile = NULL; if (argc > 0) progname = argv[0]; while (argc > 1) { if (strcmp(argv[1], "--help") == 0) { - printf("Usage: configurator [-v] [-O] [--configurator-cc=] [ ...]\n" + printf("Usage: configurator [-v] [--var-file=] [-O] [--configurator-cc=] [--autotools-style] [ ...]\n" " will have \" \" appended\n" "Default: %s %s %s\n", DEFAULT_COMPILER, DEFAULT_FLAGS, @@ -719,6 +738,14 @@ int main(int argc, const char *argv[]) configurator_cc = argv[1] + 18; argc--; argv++; + } else if (strncmp(argv[1], "--var-file=", 11) == 0) { + varfile = argv[1] + 11; + argc--; + argv++; + } else if (strcmp(argv[1], "--autotools-style") == 0) { + like_a_libtool = true; + argc--; + argv++; } else { break; } @@ -732,6 +759,11 @@ int main(int argc, const char *argv[]) argv[1] = configurator_cc; cmd = connect_args(argv, outflag, OUTPUT_FILE " " INPUT_FILE); + if (like_a_libtool) { + start_test("Making autoconf users comfortable", ""); + sleep(1); + end_test(1); + } for (i = 0; i < sizeof(tests)/sizeof(tests[0]); i++) run_test(cmd, &tests[i]); free(cmd); @@ -739,6 +771,26 @@ int main(int argc, const char *argv[]) remove(OUTPUT_FILE); remove(INPUT_FILE); + if (varfile) { + FILE *vars; + + if (strcmp(varfile, "-") == 0) + vars = stdout; + else { + start_test("Writing variables to ", varfile); + vars = fopen(varfile, "a"); + if (!vars) + c12r_err(2, "Could not open %s", varfile); + } + for (i = 0; i < sizeof(tests)/sizeof(tests[0]); i++) + fprintf(vars, "%s=%u\n", tests[i].name, tests[i].answer); + if (vars != stdout) { + if (fclose(vars) != 0) + c12r_err(2, "Closing %s", varfile); + end_test(1); + } + } + printf("/* Generated by CCAN configurator */\n" "#ifndef CCAN_CONFIG_H\n" "#define CCAN_CONFIG_H\n");