Forráskód Böngészése

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.
Evan Wilde 3 éve
szülő
commit
3fc971c38b
1 módosított fájl, 6 hozzáadás és 2 törlés
  1. 6 2
      Modules/Internal/CheckSourceCompiles.cmake

+ 6 - 2
Modules/Internal/CheckSourceCompiles.cmake

@@ -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}