Fix syncing languageSettings for KotlinNativeLink task
Task registration may happen within another configuration call leading
to prohibited 'afterEvaluate {}' block error. Fixed it by moving out
sync to separate configuration call.
^KT-54113 Fixed
This commit is contained in:
+23
@@ -0,0 +1,23 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2010-2022 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
||||||
|
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package org.jetbrains.kotlin.gradle.native
|
||||||
|
|
||||||
|
import org.gradle.util.GradleVersion
|
||||||
|
import org.jetbrains.kotlin.gradle.testbase.*
|
||||||
|
import org.junit.jupiter.api.DisplayName
|
||||||
|
|
||||||
|
@DisplayName("KotlinNativeLink task tests")
|
||||||
|
@NativeGradlePluginTests
|
||||||
|
internal class KotlinNativeLinkIT : KGPBaseTest() {
|
||||||
|
|
||||||
|
@DisplayName("KT-54113: afterEvaluate to sync languageSettings should run out of configuration methods scope")
|
||||||
|
@GradleTest
|
||||||
|
fun shouldSyncLanguageSettingsSafely(gradleVersion: GradleVersion) {
|
||||||
|
nativeProject("native-link-simple", gradleVersion) {
|
||||||
|
build("tasks")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
+16
@@ -0,0 +1,16 @@
|
|||||||
|
plugins {
|
||||||
|
id 'org.jetbrains.kotlin.multiplatform'
|
||||||
|
}
|
||||||
|
|
||||||
|
repositories {
|
||||||
|
mavenLocal()
|
||||||
|
mavenCentral()
|
||||||
|
}
|
||||||
|
|
||||||
|
kotlin {
|
||||||
|
<SingleNativeTarget>("host")
|
||||||
|
|
||||||
|
targets.named("host").configure {
|
||||||
|
binaries.test("integrationTests")
|
||||||
|
}
|
||||||
|
}
|
||||||
+8
@@ -0,0 +1,8 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2010-2022 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
||||||
|
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
||||||
|
*/
|
||||||
|
|
||||||
|
fun main() {
|
||||||
|
println("Hello, Kotlin/Native!")
|
||||||
|
}
|
||||||
+17
-12
@@ -73,18 +73,6 @@ open class KotlinNativeTargetConfigurator<T : KotlinNativeTarget> : AbstractKotl
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
runOnceAfterEvaluated("Sync language settings for NativeLinkTask") {
|
|
||||||
result.configure {
|
|
||||||
// We propagate compilation free args to the link task for now (see KT-33717).
|
|
||||||
val defaultLanguageSettings = binary.compilation.languageSettings as? DefaultLanguageSettingsBuilder
|
|
||||||
if (defaultLanguageSettings != null) {
|
|
||||||
it.toolOptions.freeCompilerArgs.addAll(
|
|
||||||
defaultLanguageSettings.freeCompilerArgs
|
|
||||||
)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
if (binary !is TestExecutable) {
|
if (binary !is TestExecutable) {
|
||||||
tasks.named(binary.compilation.target.artifactsTaskName).dependsOn(result)
|
tasks.named(binary.compilation.target.artifactsTaskName).dependsOn(result)
|
||||||
@@ -96,6 +84,18 @@ open class KotlinNativeTargetConfigurator<T : KotlinNativeTarget> : AbstractKotl
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private fun Project.syncLanguageSettingsToLinkTask(binary: NativeBinary) {
|
||||||
|
tasks.named(binary.linkTaskName, KotlinNativeLink::class.java).configure {
|
||||||
|
// We propagate compilation free args to the link task for now (see KT-33717).
|
||||||
|
val defaultLanguageSettings = binary.compilation.languageSettings as? DefaultLanguageSettingsBuilder
|
||||||
|
if (defaultLanguageSettings != null) {
|
||||||
|
it.toolOptions.freeCompilerArgs.addAll(
|
||||||
|
defaultLanguageSettings.freeCompilerArgs
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private fun Project.createFrameworkArtifact(
|
private fun Project.createFrameworkArtifact(
|
||||||
binary: Framework,
|
binary: Framework,
|
||||||
linkTask: TaskProvider<KotlinNativeLink>
|
linkTask: TaskProvider<KotlinNativeLink>
|
||||||
@@ -317,6 +317,11 @@ open class KotlinNativeTargetConfigurator<T : KotlinNativeTarget> : AbstractKotl
|
|||||||
target.binaries.all {
|
target.binaries.all {
|
||||||
project.createLinkTask(it)
|
project.createLinkTask(it)
|
||||||
}
|
}
|
||||||
|
project.runOnceAfterEvaluated("Sync language settings for NativeLinkTask") {
|
||||||
|
target.binaries.all { binary ->
|
||||||
|
project.syncLanguageSettingsToLinkTask(binary)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
target.binaries.withType(Executable::class.java).all {
|
target.binaries.withType(Executable::class.java).all {
|
||||||
project.createRunTask(it)
|
project.createRunTask(it)
|
||||||
|
|||||||
Reference in New Issue
Block a user