X-Git-Url: http://git.ozlabs.org/?p=ccan;a=blobdiff_plain;f=tools%2Fconfigurator%2Fconfigurator.c;h=dae15446e67417ef8f02d3d07b259dbe33925963;hp=bc55de5992e10cf2ea749a30be500b27ca3f749d;hb=1239aa28828e86658f003ce4ef5a5fa023c42711;hpb=374c57f7e8c12fa315764e68e627f9ab8abd051b diff --git a/tools/configurator/configurator.c b/tools/configurator/configurator.c index bc55de59..dae15446 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); @@ -685,13 +703,15 @@ int main(int argc, const char *argv[]) const char *configurator_cc = NULL; const char *orig_cc; const char *varfile = NULL; + const char *headerfile = NULL; + FILE *outf; if (argc > 0) progname = argv[0]; while (argc > 1) { if (strcmp(argv[1], "--help") == 0) { - printf("Usage: configurator [-v] [--var-file=] [-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, @@ -724,6 +744,14 @@ int main(int argc, const char *argv[]) varfile = argv[1] + 11; argc--; argv++; + } else if (strcmp(argv[1], "--autotools-style") == 0) { + like_a_libtool = true; + argc--; + argv++; + } else if (strncmp(argv[1], "--header-file=", 14) == 0) { + headerfile = argv[1] + 14; + argc--; + argv++; } else { break; } @@ -737,6 +765,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); @@ -750,6 +783,7 @@ int main(int argc, const char *argv[]) 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); @@ -759,24 +793,40 @@ int main(int argc, const char *argv[]) if (vars != stdout) { if (fclose(vars) != 0) c12r_err(2, "Closing %s", varfile); + end_test(1); } } - printf("/* Generated by CCAN configurator */\n" + if (headerfile) { + start_test("Writing header to ", headerfile); + outf = fopen(headerfile, "w"); + if (!outf) + c12r_err(2, "Could not open %s", headerfile); + } else + outf = stdout; + + fprintf(outf, "/* Generated by CCAN configurator */\n" "#ifndef CCAN_CONFIG_H\n" "#define CCAN_CONFIG_H\n"); - printf("#ifndef _GNU_SOURCE\n"); - printf("#define _GNU_SOURCE /* Always use GNU extensions. */\n"); - printf("#endif\n"); - printf("#define CCAN_COMPILER \"%s\"\n", orig_cc); + fprintf(outf, "#ifndef _GNU_SOURCE\n"); + fprintf(outf, "#define _GNU_SOURCE /* Always use GNU extensions. */\n"); + fprintf(outf, "#endif\n"); + fprintf(outf, "#define CCAN_COMPILER \"%s\"\n", orig_cc); cmd = connect_args(argv + 1, "", ""); - printf("#define CCAN_CFLAGS \"%s\"\n", cmd); + fprintf(outf, "#define CCAN_CFLAGS \"%s\"\n", cmd); free(cmd); - printf("#define CCAN_OUTPUT_EXE_CFLAG \"%s\"\n\n", outflag); + fprintf(outf, "#define CCAN_OUTPUT_EXE_CFLAG \"%s\"\n\n", outflag); /* This one implies "#include