diff --git a/Sources/Basics/Triple+Basics.swift b/Sources/Basics/Triple+Basics.swift index 7da68ca29ac..115b502a0f2 100644 --- a/Sources/Basics/Triple+Basics.swift +++ b/Sources/Basics/Triple+Basics.swift @@ -183,6 +183,19 @@ extension Triple { return ".resources" } } + + public func isRuntimeCompatible(with triple: Triple) -> Bool { + if + self.arch == triple.arch && + self.vendor == triple.vendor && + self.os == triple.os && + self.environment == triple.environment + { + return self.osVersion >= triple.osVersion + } else { + return false + } + } } extension Triple: CustomStringConvertible { diff --git a/Sources/PackageModel/SwiftSDKBundle.swift b/Sources/PackageModel/SwiftSDKBundle.swift index 14d34b94d4d..129b3c22eb5 100644 --- a/Sources/PackageModel/SwiftSDKBundle.swift +++ b/Sources/PackageModel/SwiftSDKBundle.swift @@ -429,16 +429,7 @@ extension [SwiftSDKBundle] { for (artifactID, variants) in bundle.artifacts { for variant in variants { guard variant.metadata.supportedTriples.contains(where: { variantTriple in - if - hostTriple.arch == variantTriple.arch && - hostTriple.vendor == variantTriple.vendor && - hostTriple.os == variantTriple.os && - hostTriple.environment == variantTriple.environment - { - return hostTriple.osVersion >= variantTriple.osVersion - } else { - return false - } + hostTriple.isRuntimeCompatible(with: variantTriple) }) else { continue } diff --git a/Tests/BasicsTests/TripleTests.swift b/Tests/BasicsTests/TripleTests.swift index aa392c0c5ee..b7909a6a2c3 100644 --- a/Tests/BasicsTests/TripleTests.swift +++ b/Tests/BasicsTests/TripleTests.swift @@ -165,4 +165,11 @@ final class TripleTests: XCTestCase { XCTAssertTriple("x86_64-unknown-windows-msvc", matches: (.x86_64, nil, nil, .win32, .msvc, .coff)) XCTAssertTriple("wasm32-unknown-wasi", matches: (.wasm32, nil, nil, .wasi, nil, .wasm)) } + + func testIsRuntimeCompatibleWith() throws { + try XCTAssertTrue(Triple("x86_64-apple-macosx").isRuntimeCompatible(with: Triple("x86_64-apple-macosx"))) + try XCTAssertTrue(Triple("x86_64-unknown-linux").isRuntimeCompatible(with: Triple("x86_64-unknown-linux"))) + try XCTAssertFalse(Triple("x86_64-apple-macosx").isRuntimeCompatible(with: Triple("x86_64-apple-linux"))) + try XCTAssertTrue(Triple("x86_64-apple-macosx14.0").isRuntimeCompatible(with: Triple("x86_64-apple-macosx13.0"))) + } }