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:
commit
4113f67187
|
@ -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()
|
||||||
|
|
|
@ -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()
|
|
@ -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()
|
|
@ -0,0 +1,4 @@
|
||||||
|
-- Detecting C compiler ABI info
|
||||||
|
-- Detecting C compiler ABI info - failed
|
||||||
|
-- Configuring done
|
||||||
|
-- Generating done
|
|
@ -0,0 +1,2 @@
|
||||||
|
set(CMAKE_USER_MAKE_RULES_OVERRIDE_C ${CMAKE_CURRENT_SOURCE_DIR}/FailCopyFileABI-override.cmake)
|
||||||
|
enable_language(C)
|
|
@ -1,3 +1,4 @@
|
||||||
include(RunCMake)
|
include(RunCMake)
|
||||||
|
|
||||||
run_cmake(ErrorLogs)
|
run_cmake(ErrorLogs)
|
||||||
|
run_cmake(FailCopyFileABI)
|
||||||
|
|
Loading…
Reference in New Issue