Reinstall native only once per build
diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/native/toolchain/KotlinNativeBundleBuildService.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/native/toolchain/KotlinNativeBundleBuildService.kt
index 35df177..ddd5a95 100644
--- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/native/toolchain/KotlinNativeBundleBuildService.kt
+++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/native/toolchain/KotlinNativeBundleBuildService.kt
@@ -75,6 +75,11 @@
@get:Inject
abstract val archiveOperations: ArchiveOperations
+ private var canBeReinstalled: Boolean = true // we can reinstall a k/n bundle once during the build
+
+ @Synchronized
+ internal fun getReinstallLock(): Boolean = canBeReinstalled.also { canBeReinstalled = false }
+
companion object {
private val log = Logging.getLogger(KotlinNativeBundleBuildService::class.java)
diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/native/toolchain/KotlinNativeProvider.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/native/toolchain/KotlinNativeProvider.kt
index 3eca6b7..147ed58 100644
--- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/native/toolchain/KotlinNativeProvider.kt
+++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/native/toolchain/KotlinNativeProvider.kt
@@ -86,7 +86,7 @@
} else {
providerFactory.of(NativeVersionValueSource::class.java) {
it.parameters.bundleDirectory.set(project.nativeProperties.actualNativeHomeDirectory.map { it.absolutePath })
- it.parameters.reinstallBundle.set(reinstallBundle)
+ it.parameters.reinstallBundle.set(kotlinNativeBundleBuildService.zip(reinstallBundle) { service, reinstallRequested -> reinstallRequested && service.getReinstallLock() })
it.parameters.kotlinNativeVersion.set(NativeCompilerDownloader.getDependencyNameWithOsAndVersion(project))
it.parameters.simpleKotlinNativeVersion.set(project.nativeProperties.kotlinNativeVersion)
it.parameters.kotlinNativeCompilerConfiguration.set(
diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/native/toolchain/NativeVersionValueSource.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/native/toolchain/NativeVersionValueSource.kt
index b95ba03..062c817 100644
--- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/native/toolchain/NativeVersionValueSource.kt
+++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/native/toolchain/NativeVersionValueSource.kt
@@ -101,10 +101,11 @@
reinstallFlag: Boolean,
bundleDir: File,
) {
- if (reinstallFlag && canBeReinstalled) {
+ if (reinstallFlag) {
logger.info("Removing Kotlin/Native bundle")
- bundleDir.deleteRecursively()
- canBeReinstalled = false // we don't need to reinstall k/n if it was reinstalled once during the same build
+ if (!bundleDir.deleteRecursively()) {
+ logger.warn("Failed to remove Kotlin/Native bundle from ${bundleDir.absolutePath}")
+ }
}
}
@@ -135,7 +136,6 @@
}
companion object {
- private var canBeReinstalled: Boolean = true // we can reinstall a k/n bundle once during the build
private const val MARKER_FILE = "provisioned.ok"
val logger = LoggerFactory.getLogger("org.jetbrains.kotlin.gradle.targets.native.toolchain")
internal fun isSnapshotVersion(kotlinNativeVersion: String): Boolean =