Skip to content

Commit 96eeb1d

Browse files
authored
Use OrderedDictionary for PIF.BuildSettings internal properties (#8032)
Resolves #4564.
1 parent ee50121 commit 96eeb1d

File tree

2 files changed

+9
-13
lines changed

2 files changed

+9
-13
lines changed

Sources/XCBuildSupport/PIF.swift

+9-8
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212

1313
import Basics
1414
import Foundation
15+
import OrderedCollections
1516
import PackageModel
1617

1718
import struct TSCBasic.ByteString
@@ -1011,10 +1012,10 @@ public enum PIF {
10111012
}
10121013
}
10131014

1014-
public private(set) var platformSpecificSingleValueSettings = [Platform: [SingleValueSetting: String]]()
1015-
public private(set) var platformSpecificMultipleValueSettings = [Platform: [MultipleValueSetting: [String]]]()
1016-
public private(set) var singleValueSettings: [SingleValueSetting: String] = [:]
1017-
public private(set) var multipleValueSettings: [MultipleValueSetting: [String]] = [:]
1015+
public private(set) var platformSpecificSingleValueSettings = OrderedDictionary<Platform, OrderedDictionary<SingleValueSetting, String>>()
1016+
public private(set) var platformSpecificMultipleValueSettings = OrderedDictionary<Platform, OrderedDictionary<MultipleValueSetting, [String]>>()
1017+
public private(set) var singleValueSettings: OrderedDictionary<SingleValueSetting, String> = [:]
1018+
public private(set) var multipleValueSettings: OrderedDictionary<MultipleValueSetting, [String]> = [:]
10181019

10191020
public subscript(_ setting: SingleValueSetting) -> String? {
10201021
get { singleValueSettings[setting] }
@@ -1108,10 +1109,10 @@ public enum PIF {
11081109
public init(from decoder: Decoder) throws {
11091110
let container = try decoder.container(keyedBy: CodingKeys.self)
11101111

1111-
platformSpecificSingleValueSettings = try container.decodeIfPresent([Platform: [SingleValueSetting: String]].self, forKey: .platformSpecificSingleValueSettings) ?? .init()
1112-
platformSpecificMultipleValueSettings = try container.decodeIfPresent([Platform: [MultipleValueSetting: [String]]].self, forKey: .platformSpecificMultipleValueSettings) ?? .init()
1113-
singleValueSettings = try container.decodeIfPresent([SingleValueSetting: String].self, forKey: .singleValueSettings) ?? [:]
1114-
multipleValueSettings = try container.decodeIfPresent([MultipleValueSetting: [String]] .self, forKey: .multipleValueSettings) ?? [:]
1112+
platformSpecificSingleValueSettings = try container.decodeIfPresent(OrderedDictionary<Platform, OrderedDictionary<SingleValueSetting, String>>.self, forKey: .platformSpecificSingleValueSettings) ?? .init()
1113+
platformSpecificMultipleValueSettings = try container.decodeIfPresent(OrderedDictionary<Platform, OrderedDictionary<MultipleValueSetting, [String]>>.self, forKey: .platformSpecificMultipleValueSettings) ?? .init()
1114+
singleValueSettings = try container.decodeIfPresent(OrderedDictionary<SingleValueSetting, String>.self, forKey: .singleValueSettings) ?? [:]
1115+
multipleValueSettings = try container.decodeIfPresent(OrderedDictionary<MultipleValueSetting, [String]>.self, forKey: .multipleValueSettings) ?? [:]
11151116
}
11161117
}
11171118
}

Tests/XCBuildSupportTests/PIFTests.swift

-5
Original file line numberDiff line numberDiff line change
@@ -213,10 +213,6 @@ class PIFTests: XCTestCase {
213213
)
214214

215215
func testRoundTrip() throws {
216-
// FIXME: Disabled because we need to store build settings in
217-
// sorted dictionary in order to get deterministic output
218-
// when encoding (SR-12587).
219-
#if false
220216
let encoder = JSONEncoder.makeWithDefaults()
221217
if #available(macOS 10.13, *) {
222218
encoder.outputFormatting = [.sortedKeys, .prettyPrinted]
@@ -233,7 +229,6 @@ class PIFTests: XCTestCase {
233229
let decodedString = String(decoding: decodedPIF, as: UTF8.self)
234230

235231
XCTAssertEqual(originalString, decodedString)
236-
#endif
237232
}
238233

239234
func testEncodable() throws {

0 commit comments

Comments
 (0)