diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/CommonizerIT.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/CommonizerIT.kt index 84bcbc37334..524673652b4 100644 --- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/CommonizerIT.kt +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/CommonizerIT.kt @@ -656,6 +656,25 @@ class CommonizerIT : BaseGradleIT() { } } + @Test + fun `test KT-50847 missing cinterop in supported target`() { + with(Project("commonize-kt-50847-cinterop-missing-in-supported-target")) { + build(":compileCommonMainKotlinMetadata", "-PdisableTargetNumber=1") { + assertSuccessful() + assertTasksSkipped(":cinteropSimpleTarget1") + assertTasksExecuted(":cinteropSimpleTarget2") + assertTasksExecuted(":commonizeCInterop") + } + + build(":compileCommonMainKotlinMetadata", "-PdisableTargetNumber=2") { + assertSuccessful() + assertTasksSkipped(":cinteropSimpleTarget2") + assertTasksExecuted(":cinteropSimpleTarget1") + assertTasksExecuted(":commonizeCInterop") + } + } + } + private fun preparedProject(name: String): Project { return Project(name).apply { setupWorkingDir() diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/commonize-kt-50847-cinterop-missing-in-supported-target/build.gradle.kts b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/commonize-kt-50847-cinterop-missing-in-supported-target/build.gradle.kts new file mode 100644 index 00000000000..de878ac60b4 --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/commonize-kt-50847-cinterop-missing-in-supported-target/build.gradle.kts @@ -0,0 +1,41 @@ +import org.jetbrains.kotlin.konan.target.HostManager + +plugins { + kotlin("multiplatform") +} + +repositories { + mavenLocal() +} + +kotlin { + val linuxTarget1 = linuxArm64("target1") + val linuxTarget2 = linuxX64("target2") + + val targets = listOf(linuxTarget1, linuxTarget2) + + /* This test only makes sense if all targets ar 'officially supported' */ + targets.forEach { target -> + if (!HostManager().isEnabled(target.konanTarget)) { + error("Expected all targets in this test to be enabled. ${target.konanTarget} is not supported.") + } + } + + /* Defining a cinterop on all targets */ + targets.map { it.compilations.getByName("main") }.forEach { compilation -> + compilation.cinterops.create("simple") { + header(file("src/nativeInterop/cinterop/simple.h")) + } + } + + /* 'Disable' a cinterop on a certain target */ + val disabledCInteropTarget = when (val propertyValue = properties["disableTargetNumber"]) { + null -> error("Test project expects property 'disableTargetNumber' with value '1' or '2'") + "1" -> linuxTarget1 + "2" -> linuxTarget2 + else -> error("Unexpected value for property 'disableTargetNumber' ($propertyValue) expected '1' or '2'") + } + + tasks.named(disabledCInteropTarget.compilations.getByName("main").cinterops.single().interopProcessingTaskName) + .configure { enabled = false } +} diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/commonize-kt-50847-cinterop-missing-in-supported-target/gradle.properties b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/commonize-kt-50847-cinterop-missing-in-supported-target/gradle.properties new file mode 100644 index 00000000000..8c16cf3d552 --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/commonize-kt-50847-cinterop-missing-in-supported-target/gradle.properties @@ -0,0 +1 @@ +kotlin.mpp.enableCInteropCommonization=true diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/commonize-kt-50847-cinterop-missing-in-supported-target/src/commonMain/kotlin/CommonMain.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/commonize-kt-50847-cinterop-missing-in-supported-target/src/commonMain/kotlin/CommonMain.kt new file mode 100644 index 00000000000..b32a3d889d3 --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/commonize-kt-50847-cinterop-missing-in-supported-target/src/commonMain/kotlin/CommonMain.kt @@ -0,0 +1,3 @@ +import simple.simpleInteropFunction + +fun main() = simpleInteropFunction() diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/commonize-kt-50847-cinterop-missing-in-supported-target/src/nativeInterop/cinterop/simple.def b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/commonize-kt-50847-cinterop-missing-in-supported-target/src/nativeInterop/cinterop/simple.def new file mode 100644 index 00000000000..e69de29bb2d diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/commonize-kt-50847-cinterop-missing-in-supported-target/src/nativeInterop/cinterop/simple.h b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/commonize-kt-50847-cinterop-missing-in-supported-target/src/nativeInterop/cinterop/simple.h new file mode 100644 index 00000000000..030c4d7b614 --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/commonize-kt-50847-cinterop-missing-in-supported-target/src/nativeInterop/cinterop/simple.h @@ -0,0 +1 @@ +void simpleInteropFunction();