Skip to content

Commit fdf39fd

Browse files
authored
Remove the version parameter for C++ interop mode build setting (#6583)
The version of C++ interoperability is going to be tied to Swift language version. This change removes the explicit version parameter for the `.interoperabilityMode(.Cxx)` build setting. rdar://109525217
1 parent 20d8187 commit fdf39fd

File tree

6 files changed

+13
-32
lines changed

6 files changed

+13
-32
lines changed

Sources/PackageDescription/BuildSettings.swift

Lines changed: 1 addition & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -377,22 +377,15 @@ public struct SwiftSetting {
377377
///
378378
/// - Parameters:
379379
/// - mode: The language mode, either C or CXX.
380-
/// - version: When using the CXX language mode, pass either the version
381-
/// of Swift and C++ interoperability or `nil`; otherwise, `nil`.
382380
/// - condition: A condition that restricts the application of the build
383381
/// setting.
384382
@available(_PackageDescription, introduced: 5.9)
385383
public static func interoperabilityMode(
386384
_ mode: InteroperabilityMode,
387-
version: String? = nil,
388385
_ condition: BuildSettingCondition? = nil
389386
) -> SwiftSetting {
390-
var values: [String] = [mode.rawValue]
391-
if let version {
392-
values.append(version)
393-
}
394387
return SwiftSetting(
395-
name: "interoperabilityMode", value: values, condition: condition)
388+
name: "interoperabilityMode", value: [mode.rawValue], condition: condition)
396389
}
397390
}
398391

Sources/PackageLoading/ManifestJSONParser.swift

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -685,16 +685,10 @@ extension TargetBuildSettingDescription.Kind {
685685
guard let lang = TargetBuildSettingDescription.InteroperabilityMode(rawValue: rawLang) else {
686686
throw InternalError("unknown interoperability mode: \(rawLang)")
687687
}
688-
if values.count > 2 {
688+
if values.count > 1 {
689689
throw InternalError("invalid build settings value")
690690
}
691-
let version: String?
692-
if values.count == 2 {
693-
version = values[1]
694-
} else {
695-
version = nil
696-
}
697-
return .interoperabilityMode(lang, version)
691+
return .interoperabilityMode(lang)
698692
case "enableUpcomingFeature":
699693
guard let value = values.first else {
700694
throw InternalError("invalid (empty) build settings value")

Sources/PackageLoading/PackageBuilder.swift

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1079,7 +1079,7 @@ public final class PackageBuilder {
10791079
decl = .LINK_FRAMEWORKS
10801080
}
10811081

1082-
case .interoperabilityMode(let lang, let version):
1082+
case .interoperabilityMode(let lang):
10831083
switch setting.tool {
10841084
case .c, .cxx, .linker:
10851085
throw InternalError("only Swift supports interoperability")
@@ -1089,10 +1089,7 @@ public final class PackageBuilder {
10891089
}
10901090

10911091
if lang == .Cxx {
1092-
// `version` is the compatibility version of Swift/C++ interop,
1093-
// which is meant to preserve source compatibility for
1094-
// user projects while Swift/C++ interop is evolving.
1095-
values = ["-cxx-interoperability-mode=\(version ?? "default")"]
1092+
values = ["-cxx-interoperability-mode=default"]
10961093
} else {
10971094
values = []
10981095
}

Sources/PackageModel/Manifest/TargetBuildSettingDescription.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ public enum TargetBuildSettingDescription {
3333
case linkedLibrary(String)
3434
case linkedFramework(String)
3535

36-
case interoperabilityMode(InteroperabilityMode, String?)
36+
case interoperabilityMode(InteroperabilityMode)
3737

3838
case enableUpcomingFeature(String)
3939
case enableExperimentalFeature(String)

Sources/PackageModel/ManifestSourceGeneration.swift

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -513,11 +513,8 @@ fileprivate extension SourceCodeFragment {
513513
params.append(SourceCodeFragment(from: condition))
514514
}
515515
self.init(enum: setting.kind.name, subnodes: params)
516-
case .interoperabilityMode(let lang, let version):
516+
case .interoperabilityMode(let lang):
517517
params.append(SourceCodeFragment(enum: lang.rawValue))
518-
if let version {
519-
params.append(SourceCodeFragment(key: "version", string: version))
520-
}
521518
self.init(enum: setting.kind.name, subnodes: params)
522519
case .unsafeFlags(let values):
523520
params.append(SourceCodeFragment(strings: values))

Tests/BuildTests/BuildPlanTests.swift

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3311,8 +3311,8 @@ final class BuildPlanTests: XCTestCase {
33113311
.init(tool: .swift, kind: .define("RLINUX"), condition: .init(platformNames: ["linux"], config: "release")),
33123312
.init(tool: .swift, kind: .define("DMACOS"), condition: .init(platformNames: ["macos"], config: "debug")),
33133313
.init(tool: .swift, kind: .unsafeFlags(["-Isfoo", "-L", "sbar"])),
3314-
.init(tool: .swift, kind: .interoperabilityMode(.Cxx, "swift-5.9"), condition: .init(platformNames: ["linux"])),
3315-
.init(tool: .swift, kind: .interoperabilityMode(.Cxx, "swift-6.0"), condition: .init(platformNames: ["macos"])),
3314+
.init(tool: .swift, kind: .interoperabilityMode(.Cxx), condition: .init(platformNames: ["linux"])),
3315+
.init(tool: .swift, kind: .interoperabilityMode(.Cxx), condition: .init(platformNames: ["macos"])),
33163316
.init(tool: .swift, kind: .enableUpcomingFeature("BestFeature")),
33173317
.init(tool: .swift, kind: .enableUpcomingFeature("WorstFeature"), condition: .init(platformNames: ["macos"], config: "debug"))
33183318
]
@@ -3321,8 +3321,8 @@ final class BuildPlanTests: XCTestCase {
33213321
name: "exe", dependencies: ["bar"],
33223322
settings: [
33233323
.init(tool: .swift, kind: .define("FOO")),
3324-
.init(tool: .swift, kind: .interoperabilityMode(.C, nil), condition: .init(platformNames: ["linux"])),
3325-
.init(tool: .swift, kind: .interoperabilityMode(.Cxx, nil), condition: .init(platformNames: ["macos"])),
3324+
.init(tool: .swift, kind: .interoperabilityMode(.C), condition: .init(platformNames: ["linux"])),
3325+
.init(tool: .swift, kind: .interoperabilityMode(.Cxx), condition: .init(platformNames: ["macos"])),
33263326
.init(tool: .linker, kind: .linkedLibrary("sqlite3")),
33273327
.init(tool: .linker, kind: .linkedFramework("CoreData"), condition: .init(platformNames: ["macos"])),
33283328
.init(tool: .linker, kind: .unsafeFlags(["-Ilfoo", "-L", "lbar"])),
@@ -3381,7 +3381,7 @@ final class BuildPlanTests: XCTestCase {
33813381
XCTAssertMatch(cbar, [.anySequence, "-DCCC=2", "-I\(A.appending(components: "Sources", "cbar", "Sources", "headers"))", "-I\(A.appending(components: "Sources", "cbar", "Sources", "cppheaders"))", "-Icfoo", "-L", "cbar", "-Icxxfoo", "-L", "cxxbar", .end])
33823382

33833383
let bar = try result.target(for: "bar").swiftTarget().compileArguments()
3384-
XCTAssertMatch(bar, [.anySequence, "-DLINUX", "-Isfoo", "-L", "sbar", "-cxx-interoperability-mode=swift-5.9", "-enable-upcoming-feature", "BestFeature", .end])
3384+
XCTAssertMatch(bar, [.anySequence, "-DLINUX", "-Isfoo", "-L", "sbar", "-cxx-interoperability-mode=default", "-enable-upcoming-feature", "BestFeature", .end])
33853385

33863386
let exe = try result.target(for: "exe").swiftTarget().compileArguments()
33873387
XCTAssertMatch(exe, [.anySequence, "-DFOO", .end])
@@ -3397,7 +3397,7 @@ final class BuildPlanTests: XCTestCase {
33973397
XCTAssertMatch(cbar, [.anySequence, "-DCCC=2", "-I\(A.appending(components: "Sources", "cbar", "Sources", "headers"))", "-I\(A.appending(components: "Sources", "cbar", "Sources", "cppheaders"))", "-Icfoo", "-L", "cbar", "-Icxxfoo", "-L", "cxxbar", .end])
33983398

33993399
let bar = try result.target(for: "bar").swiftTarget().compileArguments()
3400-
XCTAssertMatch(bar, [.anySequence, "-DDMACOS", "-Isfoo", "-L", "sbar", "-cxx-interoperability-mode=swift-6.0", "-enable-upcoming-feature", "BestFeature", "-enable-upcoming-feature", "WorstFeature", .end])
3400+
XCTAssertMatch(bar, [.anySequence, "-DDMACOS", "-Isfoo", "-L", "sbar", "-cxx-interoperability-mode=default", "-enable-upcoming-feature", "BestFeature", "-enable-upcoming-feature", "WorstFeature", .end])
34013401

34023402
let exe = try result.target(for: "exe").swiftTarget().compileArguments()
34033403
XCTAssertMatch(exe, [.anySequence, "-DFOO", "-cxx-interoperability-mode=default", .end])

0 commit comments

Comments
 (0)