mirror of
https://github.com/yonaskolb/XcodeGen.git
synced 2024-09-19 08:37:53 +03:00
extract and cache XCConfig loading
This commit is contained in:
parent
050ce8630d
commit
a092dafec1
@ -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
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user