Browse Source

configurator: Add OpenMP detection

Andrew Jeffery 10 years ago
parent
commit
8d9d288e9a
1 changed files with 26 additions and 6 deletions
  1. 26 6
      tools/configurator/configurator.c

+ 26 - 6
tools/configurator/configurator.c

@@ -55,6 +55,7 @@ struct test {
 	const char *depends;
 	const char *link;
 	const char *fragment;
+	const char *flags;
 	const char *overrides; /* On success, force this to '1' */
 	bool done;
 	bool answer;
@@ -310,6 +311,12 @@ static struct test tests[] = {
 	  "static __attribute__((warn_unused_result)) int func(int i) {\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)
@@ -415,7 +422,7 @@ static struct test *find_test(const char *name)
 
 static bool run_test(const char *cmd, struct test *test)
 {
-	char *output;
+	char *output, *newcmd;
 	FILE *outf;
 	int status;
 
@@ -490,17 +497,30 @@ static bool run_test(const char *cmd, struct test *test)
 	if (verbose > 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) {
-		char *newcmd;
-		newcmd = malloc(strlen(cmd) + strlen(" ")
+		newcmd = realloc(newcmd, strlen(newcmd) + strlen(" ")
 				+ strlen(test->link) + 1);
-		sprintf(newcmd, "%s %s", cmd, test->link);
+		strcat(newcmd, " ");
+		strcat(newcmd, test->link);
 		if (verbose > 1)
 			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 (verbose)
 			printf("Compile %s for %s, status %i: %s\n",