From d5f4cd72b7f43b92b1e39191882a7576faf27aa6 Mon Sep 17 00:00:00 2001 From: Yahor Berdnikau Date: Thu, 14 Sep 2023 22:29:05 +0200 Subject: [PATCH] [Gradle] Don't sync freeCompilerArgs second time for the Native link task Since CompilerOptions and LanguageSettings are synchronized between each other, we don't need this additional sync that actually duplicates arguments. ^KT-61700 Fixed --- .../gradle/native/KotlinNativeLinkIT.kt | 28 ++++++------------- .../gradle/testbase/outputAssertions.kt | 12 +++++++- .../native/KotlinNativeTargetConfigurator.kt | 14 ---------- 3 files changed, 19 insertions(+), 35 deletions(-) diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/native/KotlinNativeLinkIT.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/native/KotlinNativeLinkIT.kt index a7362dd2267..24e78bd2a50 100644 --- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/native/KotlinNativeLinkIT.kt +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/native/KotlinNativeLinkIT.kt @@ -28,7 +28,11 @@ internal class KotlinNativeLinkIT : KGPBaseTest() { @DisplayName("KT-56280: should propagate freeCompilerArgs from compilation") @GradleTest fun shouldUseCompilationFreeCompilerArgs(gradleVersion: GradleVersion) { - nativeProject("native-link-simple", gradleVersion) { + nativeProject( + "native-link-simple", + gradleVersion, + buildOptions = defaultBuildOptions.copy(logLevel = LogLevel.DEBUG) + ) { buildGradle.appendText( """ | @@ -47,25 +51,9 @@ internal class KotlinNativeLinkIT : KGPBaseTest() { ) build("linkReleaseExecutableHost") { - val linkTaskOutput = output - .substringAfter("Task :linkReleaseExecutableHost") - .substringBefore("Task :linkHost") - assert(linkTaskOutput.isNotEmpty()) { - "Could not get :linkReleaseExecutableHost task output!" - } - - val args = linkTaskOutput - .substringAfterLast("Transformed arguments = [") - .substringBefore("]") - .lines() - .map { it.trim() } - assert( - args.isNotEmpty() && - args.contains("-e") && - args.contains("main") - ) { - printBuildOutput() - "Link task arguments does not contain '-e main'!" + extractNativeTasksCommandLineArgumentsFromOutput(":linkReleaseExecutableHost") { + assertCommandLineArgumentsContain("-e", "main") + assertNoDuplicates() } } } diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/testbase/outputAssertions.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/testbase/outputAssertions.kt index 0e63d58e6a4..865c5736e0d 100644 --- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/testbase/outputAssertions.kt +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/testbase/outputAssertions.kt @@ -328,4 +328,14 @@ fun CommandLineArguments.assertCommandLineArgumentsContain( "There is no ${it} in actual command line arguments are: ${args}" } } -} \ No newline at end of file +} + +/** + * Asserts that the command line arguments do not contain any duplicates. + */ +fun CommandLineArguments.assertNoDuplicates() { + assert(args.size == args.toSet().size) { + buildResult.printBuildOutput() + "Link task has duplicated arguments: ${args.joinToString()}" + } +} 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 07825c9dc38..bcc36149238 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 @@ -88,15 +88,6 @@ open class KotlinNativeTargetConfigurator : AbstractKotl } } - private fun Project.syncLanguageSettingsToLinkTask(binary: NativeBinary) { - tasks.named(binary.linkTaskName).configure { linkTask -> - // We propagate compilation free args to the link task for now (see KT-33717). - linkTask.toolOptions.freeCompilerArgs.addAll( - binary.compilation.compilerOptions.options.freeCompilerArgs - ) - } - } - private fun Project.createRunTask(binary: Executable) { val taskName = binary.runTaskName ?: return registerTask(taskName) { exec -> @@ -236,11 +227,6 @@ open class KotlinNativeTargetConfigurator : AbstractKotl target.binaries.all { project.createLinkTask(it) } - project.runOnceAfterEvaluated("Sync language settings for NativeLinkTask") { - target.binaries.all { binary -> - project.syncLanguageSettingsToLinkTask(binary) - } - } target.binaries.withType(Executable::class.java).all { project.createRunTask(it)