From 7faa5a35bc1320f690f9b6762693116bd1494cbd Mon Sep 17 00:00:00 2001 From: Ilya Matveev Date: Tue, 26 Nov 2019 19:42:08 +0700 Subject: [PATCH] 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. --- .../jetbrains/kotlin/konan/target/Apple.kt | 46 ++++++++++--------- 1 file changed, 24 insertions(+), 22 deletions(-) diff --git a/shared/src/main/kotlin/org/jetbrains/kotlin/konan/target/Apple.kt b/shared/src/main/kotlin/org/jetbrains/kotlin/konan/target/Apple.kt index 91635d8a740..1886df29a0c 100644 --- a/shared/src/main/kotlin/org/jetbrains/kotlin/konan/target/Apple.kt +++ b/shared/src/main/kotlin/org/jetbrains/kotlin/konan/target/Apple.kt @@ -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) {