From 7122a9d81976f61c8cafac283e0c5c4409e856aa Mon Sep 17 00:00:00 2001 From: Ilya Matveev Date: Thu, 5 Sep 2019 19:08:33 +0700 Subject: [PATCH] Gradle, native: Propagate compilation free args to link tasks The free args DSL may be changed in 1.3.70 for all platforms. So it was decided to preserve the old behaviour here to avoid making similar changes in two releases in a row. --- .../jetbrains/kotlin/gradle/NewMultiplatformIT.kt | 7 +++++++ .../groovy-dsl/build.gradle | 3 ++- .../kotlin-dsl/build.gradle.kts | 3 ++- .../native/KotlinNativeCompilationFactory.kt | 7 ++++--- .../targets/native/tasks/KotlinNativeTasks.kt | 15 ++++++++++++--- 5 files changed, 27 insertions(+), 8 deletions(-) diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/NewMultiplatformIT.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/NewMultiplatformIT.kt index ea2093fd1d9..c96ec7eda15 100644 --- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/NewMultiplatformIT.kt +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/NewMultiplatformIT.kt @@ -19,6 +19,7 @@ import org.jetbrains.kotlin.gradle.util.* import org.jetbrains.kotlin.konan.target.CompilerOutputKind import org.jetbrains.kotlin.konan.target.HostManager import org.junit.Assert +import org.junit.Ignore import org.junit.Test import java.util.jar.JarFile import java.util.zip.ZipFile @@ -1037,6 +1038,9 @@ class NewMultiplatformIT : BaseGradleIT() { assertTrue(it.contains("-Xtime")) // Check that kotlinOptions of the compilation don't affect the binary. assertFalse(it.contains("-verbose")) + // Check that free args are still propagated to the binary (unlike other kotlinOptions, see KT-33717). + // TODO: Reverse this check when the args are fully separated. + assertTrue(it.contains("-nowarn")) } assertTrue(output.contains("tests.foo")) } @@ -1141,6 +1145,9 @@ class NewMultiplatformIT : BaseGradleIT() { } } + // We propagate compilation args to link tasks for now (see KT-33717). + // TODO: Reenable the test when the args are separated. + @Ignore @Test fun testNativeFreeArgsWarning() = with(transformProjectWithPluginsDsl("kotlin-dsl", gradleVersion, "new-mpp-native-binaries")) { gradleBuildScript().appendText( diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/new-mpp-native-binaries/groovy-dsl/build.gradle b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/new-mpp-native-binaries/groovy-dsl/build.gradle index d2c24e9ada6..777ea9ed6c8 100644 --- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/new-mpp-native-binaries/groovy-dsl/build.gradle +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/new-mpp-native-binaries/groovy-dsl/build.gradle @@ -37,7 +37,8 @@ kotlin { mingwX64("mingw64") configure([macos64, linux64, mingw64]) { - compilations.main.kotlinOptions.verbose = true + compilations.all { kotlinOptions.verbose = true } + compilations.test.kotlinOptions.freeCompilerArgs += "-nowarn" binaries { executable() // Executable with default name. diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/new-mpp-native-binaries/kotlin-dsl/build.gradle.kts b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/new-mpp-native-binaries/kotlin-dsl/build.gradle.kts index 108e034de68..d30d90837bc 100644 --- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/new-mpp-native-binaries/kotlin-dsl/build.gradle.kts +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/new-mpp-native-binaries/kotlin-dsl/build.gradle.kts @@ -27,7 +27,8 @@ kotlin { val windows = mingwX64("mingw64") configure(listOf(macos, linux, windows)) { - compilations["main"].kotlinOptions.verbose = true + compilations.all { kotlinOptions.verbose = true } + compilations["test"].kotlinOptions.freeCompilerArgs += "-nowarn" binaries { executable() // Executable with default name. diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/native/KotlinNativeCompilationFactory.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/native/KotlinNativeCompilationFactory.kt index e08f6fbd2a3..aee2ea7b6c6 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/native/KotlinNativeCompilationFactory.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/native/KotlinNativeCompilationFactory.kt @@ -24,8 +24,9 @@ class KotlinNativeCompilationFactory( if (name == KotlinCompilation.TEST_COMPILATION_NAME) { friendCompilationName = KotlinCompilation.MAIN_COMPILATION_NAME } - project.whenEvaluated { - CompilationFreeArgsValidator.validate(this@apply) - } + // TODO: Validate compilation free args using the [CompilationFreeArgsValidator] + // when the compilation and the link args are separated (see KT-33717). + // Note: such validation should be done in the whenEvaluate block because + // a user can change args during project configuration. } } \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/native/tasks/KotlinNativeTasks.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/native/tasks/KotlinNativeTasks.kt index 67aefdf37b4..20586991eee 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/native/tasks/KotlinNativeTasks.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/native/tasks/KotlinNativeTasks.kt @@ -121,15 +121,15 @@ abstract class AbstractKotlinNativeCompile : Abstra val target: String @Input get() = compilation.target.konanTarget.name - val additionalCompilerOptions: Collection - @Input get() = kotlinOptions.freeCompilerArgs - // region Compiler options. @get:Internal abstract val kotlinOptions: T abstract fun kotlinOptions(fn: T.() -> Unit) abstract fun kotlinOptions(fn: Closure<*>) + @get:Input + abstract val additionalCompilerOptions: Collection + @get:Internal val languageSettings: LanguageSettingsBuilder? get() = project.kotlinExtension.sourceSets.findByName(compilation.defaultSourceSetName)?.languageSettings @@ -310,6 +310,10 @@ open class KotlinNativeCompile : AbstractKotlinNativeCompile + get() = kotlinOptions.freeCompilerArgs + override val kotlinOptions: KotlinCommonOptions = NativeCompileOptions() override fun kotlinOptions(fn: KotlinCommonOptions.() -> Unit) { @@ -412,6 +416,11 @@ open class KotlinNativeLink : AbstractKotlinNativeCompile = listOf() } + // We propagate compilation free args to the link task for now (see KT-33717). + @get:Input + override val additionalCompilerOptions: Collection + get() = kotlinOptions.freeCompilerArgs + compilation.kotlinOptions.freeCompilerArgs + override val kotlinOptions: KotlinCommonToolOptions = NativeLinkOptions() override fun kotlinOptions(fn: KotlinCommonToolOptions.() -> Unit) {