Merge topic 'abi-check-tolerate-COPY_FILE-failure'

4dc4018 Teach compiler ABI check to tolerate try_compile COPY_FILE failure
This commit is contained in:
Brad King 2013-07-18 10:12:20 -04:00 committed by CMake Topic Stage
commit 4113f67187
6 changed files with 29 additions and 2 deletions

View File

@ -41,6 +41,7 @@ function(CMAKE_DETERMINE_COMPILER_ABI lang src)
"--no-warn-unused-cli" "--no-warn-unused-cli"
OUTPUT_VARIABLE OUTPUT OUTPUT_VARIABLE OUTPUT
COPY_FILE "${BIN}" COPY_FILE "${BIN}"
COPY_FILE_ERROR _copy_error
) )
# Move result from cache to normal variable. # Move result from cache to normal variable.
set(CMAKE_${lang}_ABI_COMPILED ${CMAKE_${lang}_ABI_COMPILED}) set(CMAKE_${lang}_ABI_COMPILED ${CMAKE_${lang}_ABI_COMPILED})
@ -48,7 +49,7 @@ function(CMAKE_DETERMINE_COMPILER_ABI lang src)
set(CMAKE_${lang}_ABI_COMPILED ${CMAKE_${lang}_ABI_COMPILED} PARENT_SCOPE) set(CMAKE_${lang}_ABI_COMPILED ${CMAKE_${lang}_ABI_COMPILED} PARENT_SCOPE)
# Load the resulting information strings. # Load the resulting information strings.
if(CMAKE_${lang}_ABI_COMPILED) if(CMAKE_${lang}_ABI_COMPILED AND NOT _copy_error)
message(STATUS "Detecting ${lang} compiler ABI info - done") message(STATUS "Detecting ${lang} compiler ABI info - done")
file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeOutput.log file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeOutput.log
"Detecting ${lang} compiler ABI info compiled with the following output:\n${OUTPUT}\n\n") "Detecting ${lang} compiler ABI info compiled with the following output:\n${OUTPUT}\n\n")
@ -131,7 +132,7 @@ function(CMAKE_DETERMINE_COMPILER_ABI lang src)
else() else()
message(STATUS "Detecting ${lang} compiler ABI info - failed") message(STATUS "Detecting ${lang} compiler ABI info - failed")
file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeError.log file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeError.log
"Detecting ${lang} compiler ABI info failed to compile with the following output:\n${OUTPUT}\n\n") "Detecting ${lang} compiler ABI info failed to compile with the following output:\n${OUTPUT}\n${_copy_error}\n\n")
endif() endif()
endif() endif()
endfunction() endfunction()

View File

@ -0,0 +1,13 @@
set(log "${RunCMake_TEST_BINARY_DIR}/CMakeFiles/CMakeError.log")
if(EXISTS "${log}")
file(READ "${log}" error_log)
else()
set(error_log "")
endif()
if(NOT error_log MATCHES "Cannot copy output executable.*
to destination specified by COPY_FILE:.*
Unable to find the executable at any of:
.*\\.missing")
string(REGEX REPLACE "\n" "\n " error_log " ${error_log}")
set(RunCMake_TEST_FAILED "Log file:\n ${log}\ndoes not have expected COPY_FILE failure message:\n${error_log}")
endif()

View File

@ -0,0 +1,6 @@
# Change the executable suffix that try_compile will use for
# COPY_FILE but not inside the test project. This forces failure.
get_property(in_try_compile GLOBAL PROPERTY IN_TRY_COMPILE)
if(NOT in_try_compile)
set(CMAKE_EXECUTABLE_SUFFIX .missing)
endif()

View File

@ -0,0 +1,4 @@
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - failed
-- Configuring done
-- Generating done

View File

@ -0,0 +1,2 @@
set(CMAKE_USER_MAKE_RULES_OVERRIDE_C ${CMAKE_CURRENT_SOURCE_DIR}/FailCopyFileABI-override.cmake)
enable_language(C)

View File

@ -1,3 +1,4 @@
include(RunCMake) include(RunCMake)
run_cmake(ErrorLogs) run_cmake(ErrorLogs)
run_cmake(FailCopyFileABI)