From b7b501bbe8fa7a1a5ee5b342341c5512e7e604ca Mon Sep 17 00:00:00 2001 From: Bill Hoffman Date: Wed, 9 Feb 2005 23:00:16 -0500 Subject: ENH: fix for 1450 --- Modules/TestBigEndian.cmake | 3 +++ Source/cmTryRunCommand.cxx | 25 +++++++++++++++++-------- Source/cmTryRunCommand.h | 5 ++++- 3 files changed, 24 insertions(+), 9 deletions(-) diff --git a/Modules/TestBigEndian.cmake b/Modules/TestBigEndian.cmake index 3f6d719..f121bdf 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 47f1d26..a5d5599 100644 --- a/Source/cmTryRunCommand.cxx +++ b/Source/cmTryRunCommand.cxx @@ -61,7 +61,7 @@ bool cmTryRunCommand::InitialPass(std::vector 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 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 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 a10000b..43f1318 100644 --- a/Source/cmTryRunCommand.h +++ b/Source/cmTryRunCommand.h @@ -66,7 +66,10 @@ public: " ...>)\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); -- cgit v0.12