extract and cache XCConfig loading

This commit is contained in:
Yonas Kolb 2017-11-03 14:58:05 +01:00
parent 050ce8630d
commit a092dafec1

View File

@ -81,16 +81,12 @@ extension ProjectSpec {
var buildSettings: BuildSettings = [:] var buildSettings: BuildSettings = [:]
if includeProject { if includeProject {
if let configFilePath = configFiles[config.name] { if let configFilePath = configFiles[config.name] {
if let configFile = try? XCConfig(path: basePath + configFilePath) { buildSettings += loadConfigFileBuildSettings(path: configFilePath)
buildSettings += configFile.flattenedBuildSettings()
}
} }
buildSettings += getProjectBuildSettings(config: config) buildSettings += getProjectBuildSettings(config: config)
} }
if let configFilePath = target.configFiles[config.name] { if let configFilePath = target.configFiles[config.name] {
if let configFile = try? XCConfig(path: basePath + configFilePath) { buildSettings += loadConfigFileBuildSettings(path: configFilePath)
buildSettings += configFile.flattenedBuildSettings()
}
} }
buildSettings += getTargetBuildSettings(target: target, config: config) buildSettings += getTargetBuildSettings(target: target, config: config)
return buildSettings return buildSettings
@ -105,9 +101,7 @@ extension ProjectSpec {
private func removeConfigFileSettings(from buildSettings: BuildSettings, configPath: String) -> BuildSettings { private func removeConfigFileSettings(from buildSettings: BuildSettings, configPath: String) -> BuildSettings {
var buildSettings = buildSettings var buildSettings = buildSettings
if let configFile = try? XCConfig(path: basePath + configPath) { if let configSettings = loadConfigFileBuildSettings(path: configPath) {
let configSettings = configFile.flattenedBuildSettings()
for key in configSettings.keys { for key in configSettings.keys {
// FIXME: Catch platform specifier. e.g. LD_RUNPATH_SEARCH_PATHS[sdk=iphone*] // FIXME: Catch platform specifier. e.g. LD_RUNPATH_SEARCH_PATHS[sdk=iphone*]
buildSettings.removeValue(forKey: key) buildSettings.removeValue(forKey: key)
@ -117,14 +111,31 @@ extension ProjectSpec {
return buildSettings return buildSettings
} }
/// Returns cached build settings from a config file
private func loadConfigFileBuildSettings(path: String) -> BuildSettings? {
let configFilePath = basePath + path
if let settings = configFileSettings[configFilePath.string] {
return settings
} else {
guard let configFile = try? XCConfig(path:configFilePath) else { return nil }
let settings = configFile.flattenedBuildSettings()
configFileSettings[configFilePath.string] = settings
return settings
}
}
} }
private var buildSettingFiles: [String: BuildSettings] = [:] // cached flattened xcconfig file settings
private var configFileSettings: [String: BuildSettings] = [:]
// cached setting preset settings
private var settingPresetSettings: [String: BuildSettings] = [:]
extension SettingsPresetFile { extension SettingsPresetFile {
public func getBuildSettings() -> BuildSettings? { public func getBuildSettings() -> BuildSettings? {
if let group = buildSettingFiles[path] { if let group = settingPresetSettings[path] {
return group return group
} }
let relativePath = "SettingPresets/\(path).yml" let relativePath = "SettingPresets/\(path).yml"
@ -149,7 +160,7 @@ extension SettingsPresetFile {
print("Error parsing \"\(name)\" settings") print("Error parsing \"\(name)\" settings")
return nil return nil
} }
buildSettingFiles[path] = buildSettings settingPresetSettings[path] = buildSettings
return buildSettings return buildSettings
} }
} }