Commit 8d9d288e authored by Andrew Jeffery's avatar Andrew Jeffery

configurator: Add OpenMP detection

parent 7c7ad8cc
...@@ -55,6 +55,7 @@ struct test { ...@@ -55,6 +55,7 @@ struct test {
const char *depends; const char *depends;
const char *link; const char *link;
const char *fragment; const char *fragment;
const char *flags;
const char *overrides; /* On success, force this to '1' */ const char *overrides; /* On success, force this to '1' */
bool done; bool done;
bool answer; bool answer;
...@@ -310,6 +311,12 @@ static struct test tests[] = { ...@@ -310,6 +311,12 @@ static struct test tests[] = {
"static __attribute__((warn_unused_result)) int func(int i) {\n" "static __attribute__((warn_unused_result)) int func(int i) {\n"
" return i + 1;\n" " return i + 1;\n"
"}" }, "}" },
{ "HAVE_OPENMP", INSIDE_MAIN, NULL, NULL,
"int i;\n"
"#pragma omp parallel for\n"
"for(i = 0; i < 0; i++) {};\n"
"return 0;\n",
"-Werror -fopenmp" },
}; };
static char *grab_fd(int fd) static char *grab_fd(int fd)
...@@ -415,7 +422,7 @@ static struct test *find_test(const char *name) ...@@ -415,7 +422,7 @@ static struct test *find_test(const char *name)
static bool run_test(const char *cmd, struct test *test) static bool run_test(const char *cmd, struct test *test)
{ {
char *output; char *output, *newcmd;
FILE *outf; FILE *outf;
int status; int status;
...@@ -490,17 +497,30 @@ static bool run_test(const char *cmd, struct test *test) ...@@ -490,17 +497,30 @@ static bool run_test(const char *cmd, struct test *test)
if (verbose > 1) if (verbose > 1)
if (system("cat " INPUT_FILE) == -1); if (system("cat " INPUT_FILE) == -1);
newcmd = strdup(cmd);
if (test->flags) {
newcmd = realloc(newcmd, strlen(newcmd) + strlen(" ")
+ strlen(test->flags) + 1);
strcat(newcmd, " ");
strcat(newcmd, test->flags);
if (verbose > 1)
printf("Extra flags line: %s", newcmd);
}
if (test->link) { if (test->link) {
char *newcmd; newcmd = realloc(newcmd, strlen(newcmd) + strlen(" ")
newcmd = malloc(strlen(cmd) + strlen(" ")
+ strlen(test->link) + 1); + strlen(test->link) + 1);
sprintf(newcmd, "%s %s", cmd, test->link); strcat(newcmd, " ");
strcat(newcmd, test->link);
if (verbose > 1) if (verbose > 1)
printf("Extra link line: %s", newcmd); printf("Extra link line: %s", newcmd);
cmd = newcmd;
} }
output = run(cmd, &status); output = run(newcmd, &status);
free(newcmd);
if (status != 0 || strstr(output, "warning")) { if (status != 0 || strstr(output, "warning")) {
if (verbose) if (verbose)
printf("Compile %s for %s, status %i: %s\n", printf("Compile %s for %s, status %i: %s\n",
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment