From 5ca9d3d706a9b70d7abfcfbaadbb44e4e98dfa38 Mon Sep 17 00:00:00 2001 From: "konstantin.tskhovrebov" Date: Wed, 28 Sep 2022 15:49:48 +0200 Subject: [PATCH] [KT-53191] Fix header dirs inputs for CInteropProcess task. --- .../kotlin/gradle/native/CinteropIT.kt | 38 +++++++++++++++++++ .../cinterop-kt-53191/build.gradle.kts | 19 ++++++++++ .../cinterop-kt-53191/native_lib/nlib.def | 1 + .../cinterop-kt-53191/native_lib/nlib.h | 1 + .../linuxMain/kotlin/org/sample/Platform.kt | 3 ++ .../targets/native/tasks/KotlinNativeTasks.kt | 8 +++- 6 files changed, 68 insertions(+), 2 deletions(-) create mode 100644 libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/native/CinteropIT.kt create mode 100644 libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/cinterop-kt-53191/build.gradle.kts create mode 100644 libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/cinterop-kt-53191/native_lib/nlib.def create mode 100644 libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/cinterop-kt-53191/native_lib/nlib.h create mode 100644 libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/cinterop-kt-53191/src/linuxMain/kotlin/org/sample/Platform.kt diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/native/CinteropIT.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/native/CinteropIT.kt new file mode 100644 index 00000000000..3d1f9a89bab --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/native/CinteropIT.kt @@ -0,0 +1,38 @@ +/* + * 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.* + +@MppGradlePluginTests +class CinteropIT : KGPBaseTest() { + + @GradleTest + fun `rerun cinterop after a header changing`(gradleVersion: GradleVersion) { + nativeProject("cinterop-kt-53191", gradleVersion = gradleVersion) { + val headerFile = projectPath.resolve("native_lib/nlib.h").toFile() + + build(":compileKotlinLinux") { + assertTasksExecuted(":cinteropNlibLinux") + } + build(":compileKotlinLinux") { + assertTasksUpToDate(":cinteropNlibLinux", ":compileKotlinLinux") + } + + headerFile.writeText("void foo();") + buildAndFail(":compileKotlinLinux") { + assertTasksExecuted(":cinteropNlibLinux") + assertOutputContains("src/linuxMain/kotlin/org/sample/Platform.kt:2:10 Unresolved reference: sample") + } + + headerFile.writeText("void sample(int i);") + build(":compileKotlinLinux") { + assertTasksExecuted(":cinteropNlibLinux") + } + } + } +} \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/cinterop-kt-53191/build.gradle.kts b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/cinterop-kt-53191/build.gradle.kts new file mode 100644 index 00000000000..3e98d7dbbbf --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/cinterop-kt-53191/build.gradle.kts @@ -0,0 +1,19 @@ +plugins { + kotlin("multiplatform") +} + +repositories { + mavenLocal() + mavenCentral() +} + +kotlin { + linuxX64("linux") { + compilations.getByName("main") { + cinterops.create("nlib") { + defFile(file("$projectDir/native_lib/nlib.def")) + includeDirs("$projectDir/native_lib") + } + } + } +} diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/cinterop-kt-53191/native_lib/nlib.def b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/cinterop-kt-53191/native_lib/nlib.def new file mode 100644 index 00000000000..b28508d7c2e --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/cinterop-kt-53191/native_lib/nlib.def @@ -0,0 +1 @@ +headers = nlib.h \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/cinterop-kt-53191/native_lib/nlib.h b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/cinterop-kt-53191/native_lib/nlib.h new file mode 100644 index 00000000000..cb550a29c24 --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/cinterop-kt-53191/native_lib/nlib.h @@ -0,0 +1 @@ +void sample(int i); \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/cinterop-kt-53191/src/linuxMain/kotlin/org/sample/Platform.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/cinterop-kt-53191/src/linuxMain/kotlin/org/sample/Platform.kt new file mode 100644 index 00000000000..815717ff4c6 --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/cinterop-kt-53191/src/linuxMain/kotlin/org/sample/Platform.kt @@ -0,0 +1,3 @@ +fun foo() { + nlib.sample(5) +} \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/native/tasks/KotlinNativeTasks.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/native/tasks/KotlinNativeTasks.kt index 2be86cd34d1..603a9db22b9 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/native/tasks/KotlinNativeTasks.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/native/tasks/KotlinNativeTasks.kt @@ -1007,10 +1007,14 @@ open class CInteropProcess @get:PathSensitive(PathSensitivity.RELATIVE) val headers: FileCollection get() = settings.headers - @get:Input + @get:IgnoreEmptyDirectories + @get:InputFiles + @get:PathSensitive(PathSensitivity.RELATIVE) val allHeadersDirs: Set get() = settings.includeDirs.allHeadersDirs.files - @get:Input + @get:IgnoreEmptyDirectories + @get:InputFiles + @get:PathSensitive(PathSensitivity.RELATIVE) val headerFilterDirs: Set get() = settings.includeDirs.headerFilterDirs.files private val libDirectories = project.buildLibDirectories()