From 239a1a4babd6969546e338e1e4022a2a970bf03a Mon Sep 17 00:00:00 2001 From: "konstantin.tskhovrebov" Date: Thu, 29 Sep 2022 11:14:35 +0200 Subject: [PATCH] Make Xcode utils nullable for non Apple hosts. --- .../native/KotlinNativeTargetConfigurator.kt | 8 ++++++-- .../kotlin/gradle/targets/native/NativeBinaries.kt | 5 ++++- .../native/tasks/artifact/KotlinNativeFramework.kt | 2 +- .../org/jetbrains/kotlin/gradle/utils/Xcode.kt | 14 +++++++++++++- 4 files changed, 24 insertions(+), 5 deletions(-) diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/native/KotlinNativeTargetConfigurator.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/native/KotlinNativeTargetConfigurator.kt index 3ac603df288..df0463748b8 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/native/KotlinNativeTargetConfigurator.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/native/KotlinNativeTargetConfigurator.kt @@ -671,8 +671,12 @@ class KotlinNativeTargetWithSimulatorTestsConfigurator : super.configureTestTask(target, testTask) val deviceIdProvider = testTask.project.provider { - Xcode.getDefaultTestDeviceId(target.konanTarget) - ?: error("Xcode does not support simulator tests for ${target.konanTarget.name}. Check that requested SDK is installed.") + if (Xcode != null) { + Xcode.getDefaultTestDeviceId(target.konanTarget) + ?: error("Xcode does not support simulator tests for ${target.konanTarget.name}. Check that requested SDK is installed.") + } else { + error("Xcode is not found.") + } } testTask.device.set(deviceIdProvider) } diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/native/NativeBinaries.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/native/NativeBinaries.kt index 37aead5f7bd..c103d6bc5ed 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/native/NativeBinaries.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/native/NativeBinaries.kt @@ -280,7 +280,10 @@ class Framework( * Embed bitcode for the framework or not. See [BitcodeEmbeddingMode]. */ val embedBitcodeMode = project.objects.property(org.jetbrains.kotlin.gradle.plugin.mpp.BitcodeEmbeddingMode::class.java).apply { - convention(project.provider { Xcode.defaultBitcodeEmbeddingMode(konanTarget, buildType) }) + convention(project.provider { + Xcode?.defaultBitcodeEmbeddingMode(konanTarget, buildType) + ?: org.jetbrains.kotlin.gradle.plugin.mpp.BitcodeEmbeddingMode.DISABLE + }) } @Deprecated("Use 'embedBitcodeMode' property instead.") diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/native/tasks/artifact/KotlinNativeFramework.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/native/tasks/artifact/KotlinNativeFramework.kt index 8fa174af075..4caf3baa6f7 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/native/tasks/artifact/KotlinNativeFramework.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/native/tasks/artifact/KotlinNativeFramework.kt @@ -125,7 +125,7 @@ internal fun KotlinNativeArtifact.registerLinkFrameworkTask( task.staticFramework.set(isStatic) if (embedBitcode != null) { task.embedBitcode.set(embedBitcode) - } else { + } else if (Xcode != null) { task.embedBitcode.set(project.provider { Xcode.defaultBitcodeEmbeddingMode(target, buildType) }) } task.libraries.setFrom(project.configurations.getByName(librariesConfigurationName)) diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/utils/Xcode.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/utils/Xcode.kt index 179103a7e06..46ab0f445f9 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/utils/Xcode.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/utils/Xcode.kt @@ -11,10 +11,22 @@ import org.jetbrains.kotlin.konan.target.Architecture.ARM32 import org.jetbrains.kotlin.konan.target.Architecture.ARM64 import org.jetbrains.kotlin.konan.target.Family import org.jetbrains.kotlin.konan.target.Family.* +import org.jetbrains.kotlin.konan.target.HostManager import org.jetbrains.kotlin.konan.target.KonanTarget import org.jetbrains.kotlin.util.capitalizeDecapitalize.toUpperCaseAsciiOnly -internal object Xcode { + +internal val Xcode = XcodeUtils() + +internal class XcodeUtils private constructor() { + + companion object { + private val current: XcodeUtils? = + if (HostManager.hostIsMac) XcodeUtils() else null + + operator fun invoke() = current + } + val currentVersion: String by lazy { val out = runCommand(listOf("/usr/bin/xcrun", "xcodebuild", "-version")) out.lines()[0].removePrefix("Xcode ")