Lazily create XcodePartsProvider

We check Xcode version when an XcodePartsProvider is created. But we
don't need Xcode in some cases (e.g. when we compile for an Android
target). This patch makes creating XcodePartsProvider lazy to preform
the version check only when Xcode is really needed.
This commit is contained in:
Ilya Matveev
2019-11-26 19:42:08 +07:00
committed by Ilya Matveev
parent 750b62b112
commit 7faa5a35bc
@@ -31,27 +31,27 @@ class AppleConfigurablesImpl(
private val toolchainDependency = this.targetToolchain!!
private val xcodeAddonDependency = this.additionalToolsDir!!
override val absoluteTargetSysRoot: String get() = when (xcodePartsProvider) {
override val absoluteTargetSysRoot: String get() = when (val provider = xcodePartsProvider) {
is XcodePartsProvider.Local -> when (target) {
KonanTarget.MACOS_X64 -> xcodePartsProvider.xcode.macosxSdk
KonanTarget.IOS_ARM32, KonanTarget.IOS_ARM64 -> xcodePartsProvider.xcode.iphoneosSdk
KonanTarget.IOS_X64 -> xcodePartsProvider.xcode.iphonesimulatorSdk
KonanTarget.TVOS_ARM64 -> xcodePartsProvider.xcode.appletvosSdk
KonanTarget.TVOS_X64 -> xcodePartsProvider.xcode.appletvsimulatorSdk
KonanTarget.WATCHOS_ARM64, KonanTarget.WATCHOS_ARM32 -> xcodePartsProvider.xcode.watchosSdk
KonanTarget.WATCHOS_X64, KonanTarget.WATCHOS_X86 -> xcodePartsProvider.xcode.watchsimulatorSdk
KonanTarget.MACOS_X64 -> provider.xcode.macosxSdk
KonanTarget.IOS_ARM32, KonanTarget.IOS_ARM64 -> provider.xcode.iphoneosSdk
KonanTarget.IOS_X64 -> provider.xcode.iphonesimulatorSdk
KonanTarget.TVOS_ARM64 -> provider.xcode.appletvosSdk
KonanTarget.TVOS_X64 -> provider.xcode.appletvsimulatorSdk
KonanTarget.WATCHOS_ARM64, KonanTarget.WATCHOS_ARM32 -> provider.xcode.watchosSdk
KonanTarget.WATCHOS_X64, KonanTarget.WATCHOS_X86 -> provider.xcode.watchsimulatorSdk
else -> error(target)
}
XcodePartsProvider.InternalServer -> absolute(sdkDependency)
}
override val absoluteTargetToolchain: String get() = when (xcodePartsProvider) {
is XcodePartsProvider.Local -> xcodePartsProvider.xcode.toolchain
override val absoluteTargetToolchain: String get() = when (val provider = xcodePartsProvider) {
is XcodePartsProvider.Local -> provider.xcode.toolchain
XcodePartsProvider.InternalServer -> absolute(toolchainDependency)
}
override val absoluteAdditionalToolsDir: String get() = when (xcodePartsProvider) {
is XcodePartsProvider.Local -> xcodePartsProvider.xcode.additionalTools
override val absoluteAdditionalToolsDir: String get() = when (val provider = xcodePartsProvider) {
is XcodePartsProvider.Local -> provider.xcode.additionalTools
XcodePartsProvider.InternalServer -> absolute(additionalToolsDir)
}
@@ -60,19 +60,21 @@ class AppleConfigurablesImpl(
XcodePartsProvider.InternalServer -> listOf(sdkDependency, toolchainDependency, xcodeAddonDependency)
}
private val xcodePartsProvider = if (InternalServer.isAvailable) {
XcodePartsProvider.InternalServer
} else {
val xcode = Xcode.current
private val xcodePartsProvider by lazy {
if (InternalServer.isAvailable) {
XcodePartsProvider.InternalServer
} else {
val xcode = Xcode.current
if (properties.getProperty("ignoreXcodeVersionCheck") != "true") {
properties.getProperty("minimalXcodeVersion")?.let { minimalXcodeVersion ->
val currentXcodeVersion = xcode.version
checkXcodeVersion(minimalXcodeVersion, currentXcodeVersion)
if (properties.getProperty("ignoreXcodeVersionCheck") != "true") {
properties.getProperty("minimalXcodeVersion")?.let { minimalXcodeVersion ->
val currentXcodeVersion = xcode.version
checkXcodeVersion(minimalXcodeVersion, currentXcodeVersion)
}
}
}
XcodePartsProvider.Local(xcode)
XcodePartsProvider.Local(xcode)
}
}
private fun checkXcodeVersion(minimalVersion: String, currentVersion: String) {