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 toolchainDependency = this.targetToolchain!!
private val xcodeAddonDependency = this.additionalToolsDir!! 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) { is XcodePartsProvider.Local -> when (target) {
KonanTarget.MACOS_X64 -> xcodePartsProvider.xcode.macosxSdk KonanTarget.MACOS_X64 -> provider.xcode.macosxSdk
KonanTarget.IOS_ARM32, KonanTarget.IOS_ARM64 -> xcodePartsProvider.xcode.iphoneosSdk KonanTarget.IOS_ARM32, KonanTarget.IOS_ARM64 -> provider.xcode.iphoneosSdk
KonanTarget.IOS_X64 -> xcodePartsProvider.xcode.iphonesimulatorSdk KonanTarget.IOS_X64 -> provider.xcode.iphonesimulatorSdk
KonanTarget.TVOS_ARM64 -> xcodePartsProvider.xcode.appletvosSdk KonanTarget.TVOS_ARM64 -> provider.xcode.appletvosSdk
KonanTarget.TVOS_X64 -> xcodePartsProvider.xcode.appletvsimulatorSdk KonanTarget.TVOS_X64 -> provider.xcode.appletvsimulatorSdk
KonanTarget.WATCHOS_ARM64, KonanTarget.WATCHOS_ARM32 -> xcodePartsProvider.xcode.watchosSdk KonanTarget.WATCHOS_ARM64, KonanTarget.WATCHOS_ARM32 -> provider.xcode.watchosSdk
KonanTarget.WATCHOS_X64, KonanTarget.WATCHOS_X86 -> xcodePartsProvider.xcode.watchsimulatorSdk KonanTarget.WATCHOS_X64, KonanTarget.WATCHOS_X86 -> provider.xcode.watchsimulatorSdk
else -> error(target) else -> error(target)
} }
XcodePartsProvider.InternalServer -> absolute(sdkDependency) XcodePartsProvider.InternalServer -> absolute(sdkDependency)
} }
override val absoluteTargetToolchain: String get() = when (xcodePartsProvider) { override val absoluteTargetToolchain: String get() = when (val provider = xcodePartsProvider) {
is XcodePartsProvider.Local -> xcodePartsProvider.xcode.toolchain is XcodePartsProvider.Local -> provider.xcode.toolchain
XcodePartsProvider.InternalServer -> absolute(toolchainDependency) XcodePartsProvider.InternalServer -> absolute(toolchainDependency)
} }
override val absoluteAdditionalToolsDir: String get() = when (xcodePartsProvider) { override val absoluteAdditionalToolsDir: String get() = when (val provider = xcodePartsProvider) {
is XcodePartsProvider.Local -> xcodePartsProvider.xcode.additionalTools is XcodePartsProvider.Local -> provider.xcode.additionalTools
XcodePartsProvider.InternalServer -> absolute(additionalToolsDir) XcodePartsProvider.InternalServer -> absolute(additionalToolsDir)
} }
@@ -60,19 +60,21 @@ class AppleConfigurablesImpl(
XcodePartsProvider.InternalServer -> listOf(sdkDependency, toolchainDependency, xcodeAddonDependency) XcodePartsProvider.InternalServer -> listOf(sdkDependency, toolchainDependency, xcodeAddonDependency)
} }
private val xcodePartsProvider = if (InternalServer.isAvailable) { private val xcodePartsProvider by lazy {
XcodePartsProvider.InternalServer if (InternalServer.isAvailable) {
} else { XcodePartsProvider.InternalServer
val xcode = Xcode.current } else {
val xcode = Xcode.current
if (properties.getProperty("ignoreXcodeVersionCheck") != "true") { if (properties.getProperty("ignoreXcodeVersionCheck") != "true") {
properties.getProperty("minimalXcodeVersion")?.let { minimalXcodeVersion -> properties.getProperty("minimalXcodeVersion")?.let { minimalXcodeVersion ->
val currentXcodeVersion = xcode.version val currentXcodeVersion = xcode.version
checkXcodeVersion(minimalXcodeVersion, currentXcodeVersion) checkXcodeVersion(minimalXcodeVersion, currentXcodeVersion)
}
} }
}
XcodePartsProvider.Local(xcode) XcodePartsProvider.Local(xcode)
}
} }
private fun checkXcodeVersion(minimalVersion: String, currentVersion: String) { private fun checkXcodeVersion(minimalVersion: String, currentVersion: String) {