Skip to content

Commit

Permalink
Support Swift toolchains that report a prerelease version
Browse files Browse the repository at this point in the history
  • Loading branch information
tonyarnold committed Jan 8, 2018
1 parent e744541 commit e5db82b
Show file tree
Hide file tree
Showing 5 changed files with 149 additions and 1 deletion.
4 changes: 4 additions & 0 deletions Carthage.xcodeproj/project.pbxproj
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@
89A8F1781C24AB3C00C0E75A /* FrameworkExtensionsSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = 89A8F1771C24AB3C00C0E75A /* FrameworkExtensionsSpec.swift */; };
8AC381441FC3AA4A007CF7E8 /* Alamofire.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8AC381421FC3A900007CF7E8 /* Alamofire.framework */; settings = {ATTRIBUTES = (Required, ); }; };
8AC381451FC3AAE4007CF7E8 /* Alamofire.framework in Resources */ = {isa = PBXBuildFile; fileRef = 8AC381421FC3A900007CF7E8 /* Alamofire.framework */; };
90CDE7BE2003252C00D98F37 /* FakeOSSSwift.framework in Resources */ = {isa = PBXBuildFile; fileRef = 90CDE7BC2003249C00D98F37 /* FakeOSSSwift.framework */; };
98400F5E1BD24DFA008C5DDE /* carthage-bash-completion in Copy Scripts */ = {isa = PBXBuildFile; fileRef = 98400F5A1BD24DC5008C5DDE /* carthage-bash-completion */; };
98400F5F1BD24DFA008C5DDE /* carthage-zsh-completion in Copy Scripts */ = {isa = PBXBuildFile; fileRef = 98400F5B1BD24DC5008C5DDE /* carthage-zsh-completion */; };
A1411ED61EFC1BFD0060461F /* Constants.swift in Sources */ = {isa = PBXBuildFile; fileRef = A1411ED51EFC1BFD0060461F /* Constants.swift */; };
Expand Down Expand Up @@ -190,6 +191,7 @@
88ED56D519ECE34900CBF5C4 /* Git.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Git.swift; sourceTree = "<group>"; };
89A8F1771C24AB3C00C0E75A /* FrameworkExtensionsSpec.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FrameworkExtensionsSpec.swift; sourceTree = "<group>"; };
8AC381421FC3A900007CF7E8 /* Alamofire.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = Alamofire.framework; sourceTree = "<group>"; };
90CDE7BC2003249C00D98F37 /* FakeOSSSwift.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = FakeOSSSwift.framework; sourceTree = "<group>"; };
98400F5A1BD24DC5008C5DDE /* carthage-bash-completion */ = {isa = PBXFileReference; lastKnownFileType = text; path = "carthage-bash-completion"; sourceTree = "<group>"; };
98400F5B1BD24DC5008C5DDE /* carthage-zsh-completion */ = {isa = PBXFileReference; lastKnownFileType = text; path = "carthage-zsh-completion"; sourceTree = "<group>"; };
A1411ED51EFC1BFD0060461F /* Constants.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Constants.swift; sourceTree = "<group>"; };
Expand Down Expand Up @@ -360,6 +362,7 @@
8AC381421FC3A900007CF7E8 /* Alamofire.framework */,
3B19041C1E4CFE3900A866AD /* FakeOldObjc.framework */,
3B19041D1E4CFE3900A866AD /* FakeOldSwift.framework */,
90CDE7BC2003249C00D98F37 /* FakeOSSSwift.framework */,
CD09E2881F0E3F1400A0378A /* FakeSwift.framework */,
D0AAAB5419FB1062007B24B3 /* TestCartfile */,
D0F551DB1A0D71AB0093311F /* TestCartfile.resolved */,
Expand Down Expand Up @@ -714,6 +717,7 @@
CD9A779B1EDD7FEB00A77B00 /* BinaryOnly in Resources */,
3B19041E1E4CFE4A00A866AD /* FakeOldObjc.framework in Resources */,
3B19041F1E4CFE4A00A866AD /* FakeOldSwift.framework in Resources */,
90CDE7BE2003252C00D98F37 /* FakeOSSSwift.framework in Resources */,
CD09E28B1F0E3FFB00A0378A /* FakeSwift.framework in Resources */,
BE624F491E13424400EAEFC9 /* DuplicateDependenciesCartfile in Resources */,
2190FA981FD5B2F0008D8A79 /* OutdatedDependencies in Resources */,
Expand Down
2 changes: 1 addition & 1 deletion Source/CarthageKit/Xcode.swift
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ private func compilerVersionArguments(usingToolchain toolchain: String?) -> [Str
private func parseSwiftVersionCommand(output: String?) -> String? {
guard
let output = output,
let regex = try? NSRegularExpression(pattern: "Apple Swift version ([0-9.]+) .*\\((.+)\\)", options: []),
let regex = try? NSRegularExpression(pattern: "Apple Swift version ([^\\s]+) .*\\((.+)\\)", options: []),
let match = regex.firstMatch(in: output, options: [], range: NSRange(output.startIndex..., in: output))
else
{
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,136 @@
// Generated by Apple Swift version 4.1-dev (LLVM 0fcc19c0d8, Clang 1696f82ad2, Swift 691139445e)
#pragma clang diagnostic push

#if defined(__has_include) && __has_include(<swift/objc-prologue.h>)
#include <swift/objc-prologue.h>
#endif

#pragma clang diagnostic ignored "-Wauto-import"
#include <objc/NSObject.h>
#include <stdint.h>
#include <stddef.h>
#include <stdbool.h>

#if !defined(SWIFT_TYPEDEFS)
#define SWIFT_TYPEDEFS 1
#if defined(__has_include) && __has_include(<uchar.h>)
#include <uchar.h>
#elif !defined(__cplusplus) || __cplusplus < 201103L
typedef uint_least16_t char16_t;
typedef uint_least32_t char32_t;
#endif
typedef float swift_float2 __attribute__((__ext_vector_type__(2)));
typedef float swift_float3 __attribute__((__ext_vector_type__(3)));
typedef float swift_float4 __attribute__((__ext_vector_type__(4)));
typedef double swift_double2 __attribute__((__ext_vector_type__(2)));
typedef double swift_double3 __attribute__((__ext_vector_type__(3)));
typedef double swift_double4 __attribute__((__ext_vector_type__(4)));
typedef int swift_int2 __attribute__((__ext_vector_type__(2)));
typedef int swift_int3 __attribute__((__ext_vector_type__(3)));
typedef int swift_int4 __attribute__((__ext_vector_type__(4)));
typedef unsigned int swift_uint2 __attribute__((__ext_vector_type__(2)));
typedef unsigned int swift_uint3 __attribute__((__ext_vector_type__(3)));
typedef unsigned int swift_uint4 __attribute__((__ext_vector_type__(4)));
#endif

#if !defined(SWIFT_PASTE)
#define SWIFT_PASTE_HELPER(x, y) x##y
#define SWIFT_PASTE(x, y) SWIFT_PASTE_HELPER(x, y)
#endif
#if !defined(SWIFT_METATYPE)
#define SWIFT_METATYPE(X) Class
#endif
#if !defined(SWIFT_CLASS_PROPERTY)
#if __has_feature(objc_class_property)
#define SWIFT_CLASS_PROPERTY(...) __VA_ARGS__
#else
#define SWIFT_CLASS_PROPERTY(...)
#endif
#endif

#if defined(__has_attribute) && __has_attribute(objc_runtime_name)
#define SWIFT_RUNTIME_NAME(X) __attribute__((objc_runtime_name(X)))
#else
#define SWIFT_RUNTIME_NAME(X)
#endif
#if defined(__has_attribute) && __has_attribute(swift_name)
#define SWIFT_COMPILE_NAME(X) __attribute__((swift_name(X)))
#else
#define SWIFT_COMPILE_NAME(X)
#endif
#if defined(__has_attribute) && __has_attribute(objc_method_family)
#define SWIFT_METHOD_FAMILY(X) __attribute__((objc_method_family(X)))
#else
#define SWIFT_METHOD_FAMILY(X)
#endif
#if defined(__has_attribute) && __has_attribute(noescape)
#define SWIFT_NOESCAPE __attribute__((noescape))
#else
#define SWIFT_NOESCAPE
#endif
#if !defined(SWIFT_CLASS_EXTRA)
#define SWIFT_CLASS_EXTRA
#endif
#if !defined(SWIFT_PROTOCOL_EXTRA)
#define SWIFT_PROTOCOL_EXTRA
#endif
#if !defined(SWIFT_ENUM_EXTRA)
#define SWIFT_ENUM_EXTRA
#endif
#if !defined(SWIFT_CLASS)
#if defined(__has_attribute) && __has_attribute(objc_subclassing_restricted)
#define SWIFT_CLASS(SWIFT_NAME) \
SWIFT_RUNTIME_NAME(SWIFT_NAME) \
__attribute__((objc_subclassing_restricted)) SWIFT_CLASS_EXTRA
#define SWIFT_CLASS_NAMED(SWIFT_NAME) __attribute__((objc_subclassing_restricted)) SWIFT_COMPILE_NAME(SWIFT_NAME) SWIFT_CLASS_EXTRA
#else
#define SWIFT_CLASS(SWIFT_NAME) \
SWIFT_RUNTIME_NAME(SWIFT_NAME) \
SWIFT_CLASS_EXTRA
#define SWIFT_CLASS_NAMED(SWIFT_NAME) \
SWIFT_COMPILE_NAME(SWIFT_NAME) \
SWIFT_CLASS_EXTRA
#endif
#endif

#if !defined(SWIFT_PROTOCOL)
#define SWIFT_PROTOCOL(SWIFT_NAME) \
SWIFT_RUNTIME_NAME(SWIFT_NAME) \
SWIFT_PROTOCOL_EXTRA
#define SWIFT_PROTOCOL_NAMED(SWIFT_NAME) \
SWIFT_COMPILE_NAME(SWIFT_NAME) \
SWIFT_PROTOCOL_EXTRA
#endif

#if !defined(SWIFT_EXTENSION)
#define SWIFT_EXTENSION(M) SWIFT_PASTE(M##_Swift_, __LINE__)
#endif

#if !defined(OBJC_DESIGNATED_INITIALIZER)
#if defined(__has_attribute) && __has_attribute(objc_designated_initializer)
#define OBJC_DESIGNATED_INITIALIZER __attribute__((objc_designated_initializer))
#else
#define OBJC_DESIGNATED_INITIALIZER
#endif
#endif
#if !defined(SWIFT_ENUM)
#define SWIFT_ENUM(_type, _name) \
enum _name : _type _name; \
enum SWIFT_ENUM_EXTRA _name : _type
#if defined(__has_feature) && __has_feature(generalized_swift_name)
#define SWIFT_ENUM_NAMED(_type, _name, SWIFT_NAME) \
enum _name : _type _name SWIFT_COMPILE_NAME(SWIFT_NAME); \
enum SWIFT_COMPILE_NAME(SWIFT_NAME) SWIFT_ENUM_EXTRA _name : _type
#else
#define SWIFT_ENUM_NAMED(_type, _name, SWIFT_NAME) SWIFT_ENUM(_type, _name)
#endif
#endif
#if !defined(SWIFT_UNAVAILABLE)
#define SWIFT_UNAVAILABLE __attribute__((unavailable))
#endif
#if defined(__has_feature) && __has_feature(modules)
#endif

#pragma clang diagnostic ignored "-Wproperty-attribute-mismatch"
#pragma clang diagnostic ignored "-Wduplicate-method-arg"
#pragma clang diagnostic pop
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@

7 changes: 7 additions & 0 deletions Tests/CarthageKitTests/XcodeSpec.swift
Original file line number Diff line number Diff line change
Expand Up @@ -82,6 +82,13 @@ class XcodeSpec: QuickSpec {
expect(result?.value).to(beNil())
expect(result?.error) == .incompatibleFrameworkSwiftVersions(local: currentSwiftVersion ?? "", framework: "0.0.0 (swiftlang-800.0.63 clang-800.0.42.1)")
}

it("should determine a framework's Swift version for OSS toolchains from Swift.org") {
let frameworkURL = Bundle(for: type(of: self)).url(forResource: "FakeOSSSwift.framework", withExtension: nil)!
let result = frameworkSwiftVersion(frameworkURL).single()

expect(result?.value) == "4.1-dev (LLVM 0fcc19c0d8, Clang 1696f82ad2, Swift 691139445e)"
}
}

describe("locateProjectsInDirectory:") {
Expand Down

0 comments on commit e5db82b

Please sign in to comment.