summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Modules/TestBigEndian.cmake3
-rw-r--r--Source/cmTryRunCommand.cxx25
-rw-r--r--Source/cmTryRunCommand.h5
3 files changed, 24 insertions, 9 deletions
diff --git a/Modules/TestBigEndian.cmake b/Modules/TestBigEndian.cmake
index 3f6d719bdd..f121bdff5c 100644
--- a/Modules/TestBigEndian.cmake
+++ b/Modules/TestBigEndian.cmake
@@ -10,6 +10,9 @@ MACRO(TEST_BIG_ENDIAN VARIABLE)
${CMAKE_BINARY_DIR}
${CMAKE_ROOT}/Modules/TestBigEndian.c
OUTPUT_VARIABLE OUTPUT)
+ IF(${VARIABLE} STREQUAL "FAILED_TO_RUN")
+ MESSAGE(SEND_ERROR "TestBigEndian Failed to run with output: ${OUTPUT}")
+ ENDIF(${VARIABLE} STREQUAL "FAILED_TO_RUN")
MESSAGE(STATUS "Check if the system is big endian")
IF(HAVE_${VARIABLE})
FILE(APPEND ${CMAKE_BINARY_DIR}/CMakeError.log
diff --git a/Source/cmTryRunCommand.cxx b/Source/cmTryRunCommand.cxx
index 47f1d267b3..a5d5599210 100644
--- a/Source/cmTryRunCommand.cxx
+++ b/Source/cmTryRunCommand.cxx
@@ -61,7 +61,7 @@ bool cmTryRunCommand::InitialPass(std::vector<std::string> const& argv)
if ( argv.size() <= (i+1) )
{
cmSystemTools::Error(
- "OUTPUT_VARIABLE specified but there is no variable");
+ "OUTPUT_VARIABLE specified but there is no variable");
return false;
}
outputVariable = argv[i+1];
@@ -75,7 +75,7 @@ bool cmTryRunCommand::InitialPass(std::vector<std::string> const& argv)
std::string binaryDirectory = argv[2] + "/CMakeTmp";
if (!res)
{
- int retVal;
+ int retVal = -1;
std::string output;
std::string command;
command = binaryDirectory;
@@ -110,25 +110,34 @@ bool cmTryRunCommand::InitialPass(std::vector<std::string> const& argv)
finalCommand += runArgs;
}
int timeout = 0;
- cmSystemTools::RunSingleCommand(finalCommand.c_str(), &output, &retVal,
- 0, false, timeout);
+ bool worked = cmSystemTools::RunSingleCommand(finalCommand.c_str(),
+ &output, &retVal,
+ 0, false, timeout);
if(outputVariable.size())
{
// if the TryCompileCore saved output in this outputVariable then
// prepend that output to this output
- const char* compileOutput = m_Makefile->GetDefinition(outputVariable.c_str());
+ const char* compileOutput
+ = m_Makefile->GetDefinition(outputVariable.c_str());
if(compileOutput)
{
output = std::string(compileOutput) + output;
}
m_Makefile->AddDefinition(outputVariable.c_str(), output.c_str());
}
-
// set the run var
char retChar[1000];
- sprintf(retChar,"%i",retVal);
+ if(worked)
+ {
+ sprintf(retChar,"%i",retVal);
+ }
+ else
+ {
+ strcpy(retChar, "FAILED_TO_RUN");
+ }
m_Makefile->AddCacheDefinition(argv[0].c_str(), retChar,
- "Result of TRY_RUN", cmCacheManager::INTERNAL);
+ "Result of TRY_RUN",
+ cmCacheManager::INTERNAL);
}
}
diff --git a/Source/cmTryRunCommand.h b/Source/cmTryRunCommand.h
index a10000bd50..43f1318ed6 100644
--- a/Source/cmTryRunCommand.h
+++ b/Source/cmTryRunCommand.h
@@ -66,7 +66,10 @@ public:
" <ARGUMENTS <arg1> <arg2>...>)\n"
"Try compiling a srcfile. Return the success or failure in "
"COMPILE_RESULT_VAR. Then if the compile succeeded, run the "
- "executable and return the result in RUN_RESULT_VAR.";
+ "executable and return the result in RUN_RESULT_VAR."
+ "If the executable was built, but failed for to run for some "
+ "reason, then RUN_RESULT_VAR will be set to FAILED_TO_RUN, and "
+ "the output will be in the COMPILE_RESULT_VAR.";
}
cmTypeMacro(cmTryRunCommand, cmCommand);