X-Git-Url: http://git.ozlabs.org/?p=ccan;a=blobdiff_plain;f=tools%2Fconfigurator%2Fconfigurator.c;h=c7577c0cb661f028585d1aac397af363a6e7cb4e;hp=370170b80c5866acf0151038e59bedcf6d39c787;hb=becfc7c324d821fe135a1ad843c596399ed5068a;hpb=d4c7616d9ef5a55dd89ea878a07eedc7376d6973 diff --git a/tools/configurator/configurator.c b/tools/configurator/configurator.c index 370170b8..c7577c0c 100644 --- a/tools/configurator/configurator.c +++ b/tools/configurator/configurator.c @@ -38,6 +38,12 @@ #define OUTPUT_FILE "configurator.out" #define INPUT_FILE "configuratortest.c" +#ifdef _WIN32 +#define DIR_SEP "\\" +#else +#define DIR_SEP "/" +#endif + static int verbose; enum test_style { @@ -62,7 +68,7 @@ struct test { }; static struct test tests[] = { - { "HAVE_32BIT_OFF_T", DEFINES_EVERYTHING|EXECUTE, NULL, NULL, + { "HAVE_32BIT_OFF_T", DEFINES_EVERYTHING|EXECUTE|MAY_NOT_COMPILE, NULL, NULL, "#include \n" "int main(void) {\n" " return sizeof(off_t) == 4 ? 0 : 1;\n" @@ -167,7 +173,7 @@ static struct test tests[] = { { "HAVE_COMPOUND_LITERALS", INSIDE_MAIN, NULL, NULL, "int *foo = (int[]) { 1, 2, 3, 4 };\n" "return foo[0] ? 0 : 1;" }, - { "HAVE_FCHDIR", DEFINES_EVERYTHING|EXECUTE, NULL, NULL, + { "HAVE_FCHDIR", DEFINES_EVERYTHING|EXECUTE|MAY_NOT_COMPILE, NULL, NULL, "#include \n" "#include \n" "#include \n" @@ -188,7 +194,7 @@ static struct test tests[] = { " if (arg == 4)\n" " warnx(\"warn %u\", arg);\n" "}\n" }, - { "HAVE_FILE_OFFSET_BITS", DEFINES_EVERYTHING|EXECUTE, + { "HAVE_FILE_OFFSET_BITS", DEFINES_EVERYTHING|EXECUTE|MAY_NOT_COMPILE, "HAVE_32BIT_OFF_T", NULL, "#define _FILE_OFFSET_BITS 64\n" "#include \n" @@ -196,8 +202,9 @@ static struct test tests[] = { " return sizeof(off_t) == 8 ? 0 : 1;\n" "}\n" }, { "HAVE_FOR_LOOP_DECLARATION", INSIDE_MAIN, NULL, NULL, - "for (int i = 0; i < argc; i++) { return 0; };\n" - "return 1;" }, + "int ret = 1;\n" + "for (int i = 0; i < argc; i++) { ret = 0; };\n" + "return ret;" }, { "HAVE_FLEXIBLE_ARRAY_MEMBER", OUTSIDE_MAIN, NULL, NULL, "struct foo { unsigned int x; int arr[]; };" }, { "HAVE_GETPAGESIZE", DEFINES_FUNC, NULL, NULL, @@ -234,7 +241,7 @@ static struct test tests[] = { "static void *func(int fd) {\n" " return mmap(0, 65536, PROT_READ, MAP_SHARED, fd, 0);\n" "}" }, - { "HAVE_PROC_SELF_MAPS", DEFINES_EVERYTHING|EXECUTE, NULL, NULL, + { "HAVE_PROC_SELF_MAPS", DEFINES_EVERYTHING|EXECUTE|MAY_NOT_COMPILE, NULL, NULL, "#include \n" "#include \n" "#include \n" @@ -271,7 +278,8 @@ static struct test tests[] = { " return __stop_mysec - __start_mysec;\n" "}\n" }, { "HAVE_STACK_GROWS_UPWARDS", DEFINES_EVERYTHING|EXECUTE, NULL, NULL, - "static long nest(const void *base, unsigned int i)\n" + "#include \n" + "static ptrdiff_t nest(const void *base, unsigned int i)\n" "{\n" " if (i == 0)\n" " return (const char *)&i - (const char *)base;\n" @@ -319,18 +327,18 @@ static struct test tests[] = { "-Werror -fopenmp" }, { "HAVE_VALGRIND_MEMCHECK_H", OUTSIDE_MAIN, NULL, NULL, "#include \n" }, - { "HAVE_UCONTEXT", DEFINES_EVERYTHING|EXECUTE, + { "HAVE_UCONTEXT", DEFINES_EVERYTHING|EXECUTE|MAY_NOT_COMPILE, NULL, NULL, "#include \n" "static int x = 0;\n" - "static char stack[1024];\n" + "static char stack[2048];\n" "static ucontext_t a, b;\n" "static void fn(void) {\n" " x |= 2;\n" " setcontext(&b);\n" " x |= 4;\n" "}\n" - "int main(int argc, char *argv[]) {\n" + "int main(void) {\n" " x |= 1;\n" " getcontext(&a);\n" " a.uc_stack.ss_sp = stack;\n" @@ -340,7 +348,7 @@ static struct test tests[] = { " return (x == 3) ? 0 : 1;\n" "}\n" }, - { "HAVE_POINTER_SAFE_MAKECONTEXT", DEFINES_EVERYTHING|EXECUTE, + { "HAVE_POINTER_SAFE_MAKECONTEXT", DEFINES_EVERYTHING|EXECUTE|MAY_NOT_COMPILE, "HAVE_UCONTEXT", NULL, "#include \n" "#include \n" @@ -354,7 +362,7 @@ static struct test tests[] = { " worked = 1;\n" " setcontext(&b);\n" "}\n" - "int main(int argc, char *argv[]) {\n" + "int main(void) {\n" " void *ap = &worked;\n" " void *aq = (void *)(~((ptrdiff_t)ap));\n" " getcontext(&a);\n" @@ -483,7 +491,7 @@ static bool run_test(const char *cmd, struct test *test) char *dep; /* Space-separated dependencies, could be ! for inverse. */ - while ((len = strcspn(deps, " "))) { + while ((len = strcspn(deps, " ")) != 0) { bool positive = true; if (deps[len]) { dep = strdup(deps); @@ -585,7 +593,7 @@ static bool run_test(const char *cmd, struct test *test) free(output); /* We run INSIDE_MAIN tests for sanity checking. */ if ((test->style & EXECUTE) || (test->style & INSIDE_MAIN)) { - output = run("./" OUTPUT_FILE, &status); + output = run("." DIR_SEP OUTPUT_FILE, &status); if (!(test->style & EXECUTE) && status != 0) errx(1, "Test for %s failed with %i:\n%s", test->name, status, output); @@ -639,8 +647,8 @@ int main(int argc, const char *argv[]) run_test(cmd, &tests[i]); free(cmd); - unlink(OUTPUT_FILE); - unlink(INPUT_FILE); + remove(OUTPUT_FILE); + remove(INPUT_FILE); printf("/* Generated by CCAN configurator */\n" "#ifndef CCAN_CONFIG_H\n"