mirror of
https://github.com/Kitware/CMake.git
synced 2026-01-11 08:20:18 -06:00
CheckSourceCompiles: For Swift executable, name source 'main.swift'
Xcode uses its own heuristics to determine whether or not to accept top-level code in a source file while Ninja uses the swift driver heuristics. With the Swift driver, if the module contains a single file, that file will be parsed as a top-level code context. With Xcode, the single file will only be parsed as top-level code if the name of that file is 'main.swift'. To ensure more consistent behavior between the two generators, if we're building Swift and the try-compile target type is executable or undefined, we name the file `main.swift` to ensure that both will handle the single file as top-level code.
This commit is contained in:
@@ -9,7 +9,7 @@ cmake_policy(SET CMP0057 NEW) # if() supports IN_LIST
|
||||
|
||||
function(CMAKE_CHECK_SOURCE_COMPILES _lang _source _var)
|
||||
if(NOT DEFINED "${_var}")
|
||||
|
||||
set(_lang_filename "src")
|
||||
if(_lang STREQUAL "C")
|
||||
set(_lang_textual "C")
|
||||
set(_lang_ext "c")
|
||||
@@ -37,6 +37,10 @@ function(CMAKE_CHECK_SOURCE_COMPILES _lang _source _var)
|
||||
elseif(_lang STREQUAL "Swift")
|
||||
set(_lang_textual "Swift")
|
||||
set(_lang_ext "swift")
|
||||
if (NOT DEFINED CMAKE_TRY_COMPILE_TARGET_TYPE
|
||||
OR CMAKE_TRY_COMPILE_TARGET_TYPE STREQUAL "EXECUTABLE")
|
||||
set(_lang_filename "main")
|
||||
endif()
|
||||
else()
|
||||
message (SEND_ERROR "check_source_compiles: ${_lang}: unknown language.")
|
||||
return()
|
||||
@@ -95,7 +99,7 @@ function(CMAKE_CHECK_SOURCE_COMPILES _lang _source _var)
|
||||
endif()
|
||||
string(APPEND _source "\n")
|
||||
try_compile(${_var}
|
||||
SOURCE_FROM_VAR "src.${_SRC_EXT}" _source
|
||||
SOURCE_FROM_VAR "${_lang_filename}.${_SRC_EXT}" _source
|
||||
COMPILE_DEFINITIONS -D${_var} ${CMAKE_REQUIRED_DEFINITIONS}
|
||||
${CHECK_${LANG}_SOURCE_COMPILES_ADD_LINK_OPTIONS}
|
||||
${CHECK_${LANG}_SOURCE_COMPILES_ADD_LIBRARIES}
|
||||
|
||||
Reference in New Issue
Block a user