浏览代码

Xcode: Update default Swift language version for Xcode 10.2

Xcode 10.2 no longer supports Swift language versions before 4.0.

Fixes: #18871
Brad King 6 年之前
父节点
当前提交
96dece6dc1

+ 6 - 2
Help/variable/CMAKE_Swift_LANGUAGE_VERSION.rst

@@ -1,5 +1,9 @@
 CMAKE_Swift_LANGUAGE_VERSION
 ----------------------------
 
-Set to the Swift language version number.  If not set, the legacy "2.3"
-version is assumed.
+Set to the Swift language version number.  If not set, the oldest legacy
+version known to be available in the host Xcode version is assumed:
+
+* Swift ``4.0`` for Xcode 10.2 and above.
+* Swift ``3.0`` for Xcode 8.3 and above.
+* Swift ``2.3`` for Xcode 8.2 and below.

+ 2 - 0
Modules/CMakeDetermineCompilerId.cmake

@@ -332,6 +332,8 @@ Id flags: ${testflags} ${CMAKE_${lang}_COMPILER_ID_FLAGS_ALWAYS}
     if("${lang}" STREQUAL "Swift")
       if(CMAKE_Swift_LANGUAGE_VERSION)
         set(id_lang_version "SWIFT_VERSION = ${CMAKE_Swift_LANGUAGE_VERSION};")
+      elseif(XCODE_VERSION VERSION_GREATER_EQUAL 10.2)
+        set(id_lang_version "SWIFT_VERSION = 4.0;")
       elseif(XCODE_VERSION VERSION_GREATER_EQUAL 8.3)
         set(id_lang_version "SWIFT_VERSION = 3.0;")
       else()

+ 2 - 0
Source/cmGlobalXCodeGenerator.cxx

@@ -3142,6 +3142,8 @@ bool cmGlobalXCodeGenerator::CreateXCodeObjects(
     if (const char* vers = this->CurrentMakefile->GetDefinition(
           "CMAKE_Swift_LANGUAGE_VERSION")) {
       swiftVersion = vers;
+    } else if (this->XcodeVersion >= 102) {
+      swiftVersion = "4.0";
     } else if (this->XcodeVersion >= 83) {
       swiftVersion = "3.0";
     } else {

+ 3 - 1
Tests/SwiftOnly/CMakeLists.txt

@@ -1,7 +1,9 @@
 cmake_minimum_required(VERSION 3.3)
 project(SwiftOnly Swift)
 
-if(NOT XCODE_VERSION VERSION_LESS 8.0)
+if(NOT XCODE_VERSION VERSION_LESS 10.2)
+  set(CMAKE_Swift_LANGUAGE_VERSION 5.0)
+elseif(NOT XCODE_VERSION VERSION_LESS 8.0)
   set(CMAKE_Swift_LANGUAGE_VERSION 3.0)
 endif()