mirror of
https://github.com/Kitware/CMake.git
synced 2026-03-06 06:38:37 -06:00
Swift: Default to Swift 3.0 with Xcode 8.3 and later
Xcode 8.3 has dropped support for Swift 2.3 so that compiler and feature detection failed. Closes #16742
This commit is contained in:
@@ -269,7 +269,13 @@ Id flags: ${testflags} ${CMAKE_${lang}_COMPILER_ID_FLAGS_ALWAYS}
|
|||||||
set(id_toolset "")
|
set(id_toolset "")
|
||||||
endif()
|
endif()
|
||||||
if("${lang}" STREQUAL "Swift")
|
if("${lang}" STREQUAL "Swift")
|
||||||
set(id_lang_version "SWIFT_VERSION = 2.3;")
|
if(CMAKE_Swift_LANGUAGE_VERSION)
|
||||||
|
set(id_lang_version "SWIFT_VERSION = ${CMAKE_Swift_LANGUAGE_VERSION};")
|
||||||
|
elseif(XCODE_VERSION VERSION_GREATER_EQUAL 8.3)
|
||||||
|
set(id_lang_version "SWIFT_VERSION = 3.0;")
|
||||||
|
else()
|
||||||
|
set(id_lang_version "SWIFT_VERSION = 2.3;")
|
||||||
|
endif()
|
||||||
else()
|
else()
|
||||||
set(id_lang_version "")
|
set(id_lang_version "")
|
||||||
endif()
|
endif()
|
||||||
|
|||||||
@@ -3075,10 +3075,14 @@ bool cmGlobalXCodeGenerator::CreateXCodeObjects(
|
|||||||
this->CreateString(this->GeneratorToolset));
|
this->CreateString(this->GeneratorToolset));
|
||||||
}
|
}
|
||||||
if (this->GetLanguageEnabled("Swift")) {
|
if (this->GetLanguageEnabled("Swift")) {
|
||||||
std::string swiftVersion = "2.3";
|
std::string swiftVersion;
|
||||||
if (const char* vers = this->CurrentMakefile->GetDefinition(
|
if (const char* vers = this->CurrentMakefile->GetDefinition(
|
||||||
"CMAKE_Swift_LANGUAGE_VERSION")) {
|
"CMAKE_Swift_LANGUAGE_VERSION")) {
|
||||||
swiftVersion = vers;
|
swiftVersion = vers;
|
||||||
|
} else if (this->XcodeVersion >= 83) {
|
||||||
|
swiftVersion = "3.0";
|
||||||
|
} else {
|
||||||
|
swiftVersion = "2.3";
|
||||||
}
|
}
|
||||||
buildSettings->AddAttribute("SWIFT_VERSION",
|
buildSettings->AddAttribute("SWIFT_VERSION",
|
||||||
this->CreateString(swiftVersion));
|
this->CreateString(swiftVersion));
|
||||||
|
|||||||
@@ -1,4 +1,10 @@
|
|||||||
#import "SwiftMix-Swift.h"
|
#import "SwiftMix-Swift.h"
|
||||||
int ObjCMain(int argc, char const* const argv[]) {
|
int ObjCMain(int argc, char const* const argv[]) {
|
||||||
return [SwiftMainClass SwiftMain:argc argv:argv];
|
if ([SwiftMainClass respondsToSelector:@selector(SwiftMain:argv:)]) {
|
||||||
|
return [SwiftMainClass SwiftMain:argc argv:argv];
|
||||||
|
}
|
||||||
|
if ([SwiftMainClass respondsToSelector:@selector(SwiftMainWithArgc:argv:)]) {
|
||||||
|
return [SwiftMainClass SwiftMainWithArgc:argc argv:argv];
|
||||||
|
}
|
||||||
|
return -1;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,10 +3,17 @@ import Foundation
|
|||||||
@objc class SwiftMainClass : NSObject {
|
@objc class SwiftMainClass : NSObject {
|
||||||
class func SwiftMain(argc:Int, argv:UnsafePointer<UnsafePointer<CChar>>) -> Int32 {
|
class func SwiftMain(argc:Int, argv:UnsafePointer<UnsafePointer<CChar>>) -> Int32 {
|
||||||
dump("argc: \(argc)")
|
dump("argc: \(argc)")
|
||||||
|
#if swift(>=3.0)
|
||||||
|
for i in 0 ..< argc {
|
||||||
|
let argi = String(cString:argv[i]);
|
||||||
|
dump("arg[\(i)]: \(argi)");
|
||||||
|
}
|
||||||
|
#else
|
||||||
for (var i = 0; i < argc; ++i) {
|
for (var i = 0; i < argc; ++i) {
|
||||||
let argi = String.fromCString(argv[i])
|
let argi = String.fromCString(argv[i])
|
||||||
dump("arg[\(i)]: \(argi)");
|
dump("arg[\(i)]: \(argi)");
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user