|
|
@ -33,7 +33,8 @@ int cmTryCompileCommand::CoreTryCompileCode( |
|
|
|
std::string tmpString; |
|
|
|
|
|
|
|
// do we have a srcfile signature
|
|
|
|
if (argv.size() == 3 || argv[3] == "CMAKE_FLAGS" || argv[3] == "COMPILE_DEFINITIONS") |
|
|
|
if (argv.size() == 3 || argv[3] == "CMAKE_FLAGS" || argv[3] == "COMPILE_DEFINITIONS" || |
|
|
|
argv[3] == "OUTPUT_VARIABLE") |
|
|
|
{ |
|
|
|
srcFileSignature = true; |
|
|
|
} |
|
|
@ -44,7 +45,8 @@ int cmTryCompileCommand::CoreTryCompileCode( |
|
|
|
{ |
|
|
|
if (argv[i] == "CMAKE_FLAGS") |
|
|
|
{ |
|
|
|
for (; i < argv.size() && argv[i] != "COMPILE_DEFINITIONS"; |
|
|
|
for (; i < argv.size() && argv[i] != "COMPILE_DEFINITIONS" && |
|
|
|
argv[i] != "OUTPUT_VARIABLE"; |
|
|
|
++i) |
|
|
|
{ |
|
|
|
cmakeFlags.push_back(argv[i]); |
|
|
@ -53,6 +55,23 @@ int cmTryCompileCommand::CoreTryCompileCode( |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
// look for OUTPUT_VARIABLE and store them
|
|
|
|
std::string outputVariable; |
|
|
|
for (i = 3; i < argv.size(); ++i) |
|
|
|
{ |
|
|
|
if (argv[i] == "OUTPUT_VARIABLE") |
|
|
|
{ |
|
|
|
if ( argv.size() <= (i+1) ) |
|
|
|
{ |
|
|
|
cmSystemTools::Error( |
|
|
|
"OUTPUT_VARIABLE specified but there is no variable"); |
|
|
|
return -1; |
|
|
|
} |
|
|
|
outputVariable = argv[i+1]; |
|
|
|
break; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
// look for COMPILE_DEFINITIONS and store them
|
|
|
|
std::vector<std::string> compileFlags; |
|
|
|
for (i = 3; i < argv.size(); ++i) |
|
|
@ -66,7 +85,8 @@ int cmTryCompileCommand::CoreTryCompileCode( |
|
|
|
"COMPILE_FLAGS specified on a srcdir type TRY_COMPILE"); |
|
|
|
return -1; |
|
|
|
} |
|
|
|
for (i = i + 1; i < argv.size() && argv[i] != "CMAKE_FLAGS"; |
|
|
|
for (i = i + 1; i < argv.size() && argv[i] != "CMAKE_FLAGS" && |
|
|
|
argv[i] != "OUTPUT_VARIABLE"; |
|
|
|
++i) |
|
|
|
{ |
|
|
|
compileFlags.push_back(argv[i]); |
|
|
@ -144,12 +164,18 @@ int cmTryCompileCommand::CoreTryCompileCode( |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
std::string output; |
|
|
|
// actually do the try compile now that everything is setup
|
|
|
|
int res = mf->TryCompile(sourceDirectory, binaryDirectory, |
|
|
|
projectName, targetName, &cmakeFlags); |
|
|
|
projectName, targetName, &cmakeFlags, &output); |
|
|
|
|
|
|
|
// set the result var to the return value to indicate success or failure
|
|
|
|
mf->AddDefinition(argv[0].c_str(), (res == 0 ? "TRUE" : "FALSE")); |
|
|
|
|
|
|
|
if ( outputVariable.size() > 0 ) |
|
|
|
{ |
|
|
|
mf->AddDefinition(outputVariable.c_str(), output.c_str()); |
|
|
|
} |
|
|
|
|
|
|
|
// if They specified clean then we clean up what we can
|
|
|
|
if (srcFileSignature && clean) |
|
|
|