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 8d9383a1169..32c73ea6f73 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 @@ -675,7 +675,8 @@ class CommonizerIT : BaseGradleIT() { fun `test KT-52243 cinterop caching`() { with(preparedProject("commonizeCurlInterop")) { val localBuildCacheDir = projectDir.resolve("local-build-cache-dir").also { assertTrue(it.mkdirs()) } - gradleSettingsScript().appendText(""" + gradleSettingsScript().appendText( + """ buildCache { local { @@ -708,6 +709,20 @@ class CommonizerIT : BaseGradleIT() { } } + @Test + fun `test KT-56729 commonization with library containing two roots`() { + with(Project("commonize-kt-56729-consume-library-with-two-roots")) { + build("publish") { + assertSuccessful() + } + + build(":consumer:assemble") { + assertSuccessful() + assertTasksExecuted(":consumer:compileCommonMainKotlinMetadata") + } + } + } + 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-56729-consume-library-with-two-roots/consumer/build.gradle.kts b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/commonize-kt-56729-consume-library-with-two-roots/consumer/build.gradle.kts new file mode 100644 index 00000000000..8d678cbdc60 --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/commonize-kt-56729-consume-library-with-two-roots/consumer/build.gradle.kts @@ -0,0 +1,30 @@ +@file:Suppress("OPT_IN_USAGE") + +import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinNativeTarget + +plugins { + kotlin("multiplatform") +} + +repositories { + maven(project(":producer").buildDir.resolve("repo")) + mavenLocal() + mavenCentral() +} + +kotlin { + linuxArm64() + linuxX64() + + targetHierarchy.default() + + sourceSets.commonMain.get().dependencies { + implementation("org.jetbrains.sample:producer:1.0.0-SNAPSHOT") + } + + targets.withType().all { + compilations.getByName("main").cinterops.create("consumer-c-library") { + header("src/consumer-c-library.h") + } + } +} diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/commonize-kt-56729-consume-library-with-two-roots/consumer/src/commonMain/kotlin/CommonMain.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/commonize-kt-56729-consume-library-with-two-roots/consumer/src/commonMain/kotlin/CommonMain.kt new file mode 100644 index 00000000000..3c8bfd9f905 --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/commonize-kt-56729-consume-library-with-two-roots/consumer/src/commonMain/kotlin/CommonMain.kt @@ -0,0 +1,5 @@ +object CommonMain { + init { + ProducerNativeCommonMain.fromCInterop().value + } +} diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/commonize-kt-56729-consume-library-with-two-roots/consumer/src/consumer-c-library.h b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/commonize-kt-56729-consume-library-with-two-roots/consumer/src/consumer-c-library.h new file mode 100644 index 00000000000..657a86e5740 --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/commonize-kt-56729-consume-library-with-two-roots/consumer/src/consumer-c-library.h @@ -0,0 +1 @@ +void myConsumerCLibraryFunction(); \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/commonize-kt-56729-consume-library-with-two-roots/consumer/src/nativeInterop/cinterop/consumer-c-library.def b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/commonize-kt-56729-consume-library-with-two-roots/consumer/src/nativeInterop/cinterop/consumer-c-library.def new file mode 100644 index 00000000000..e69de29bb2d diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/commonize-kt-56729-consume-library-with-two-roots/gradle.properties b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/commonize-kt-56729-consume-library-with-two-roots/gradle.properties new file mode 100644 index 00000000000..2db016ae4e4 --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/commonize-kt-56729-consume-library-with-two-roots/gradle.properties @@ -0,0 +1 @@ +kotlin.mpp.enableCInteropCommonization=true \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/commonize-kt-56729-consume-library-with-two-roots/producer/build.gradle.kts b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/commonize-kt-56729-consume-library-with-two-roots/producer/build.gradle.kts new file mode 100644 index 00000000000..6c3e7ade3c6 --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/commonize-kt-56729-consume-library-with-two-roots/producer/build.gradle.kts @@ -0,0 +1,34 @@ +@file:Suppress("OPT_IN_USAGE") + +import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinNativeTarget + +plugins { + kotlin("multiplatform") + `maven-publish` +} + +version = "1.0.0-SNAPSHOT" +group = "org.jetbrains.sample" + +publishing { + repositories { + maven(buildDir.resolve("repo")) + } +} + +kotlin { + linuxX64() + linuxArm64() + + targetHierarchy.custom { + group("nativeCommon") { + withNative() + } + } + + targets.withType().all { + compilations.getByName("main").cinterops.create("producer-cinterop-library") { + header("src/producer-c-library.h") + } + } +} \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/commonize-kt-56729-consume-library-with-two-roots/producer/src/nativeCommonMain/kotlin/ProducerNativeCommonMain.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/commonize-kt-56729-consume-library-with-two-roots/producer/src/nativeCommonMain/kotlin/ProducerNativeCommonMain.kt new file mode 100644 index 00000000000..a48828cc866 --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/commonize-kt-56729-consume-library-with-two-roots/producer/src/nativeCommonMain/kotlin/ProducerNativeCommonMain.kt @@ -0,0 +1,5 @@ +import `producer-cinterop-library`.ProducerCLibraryStruct + +object ProducerNativeCommonMain { + fun fromCInterop(): ProducerCLibraryStruct = error("Stub!") +} \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/commonize-kt-56729-consume-library-with-two-roots/producer/src/nativeInterop/cinterop/producer-cinterop-library.def b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/commonize-kt-56729-consume-library-with-two-roots/producer/src/nativeInterop/cinterop/producer-cinterop-library.def new file mode 100644 index 00000000000..e69de29bb2d diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/commonize-kt-56729-consume-library-with-two-roots/producer/src/producer-c-library.h b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/commonize-kt-56729-consume-library-with-two-roots/producer/src/producer-c-library.h new file mode 100644 index 00000000000..3d6d3b1c032 --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/commonize-kt-56729-consume-library-with-two-roots/producer/src/producer-c-library.h @@ -0,0 +1,3 @@ +struct ProducerCLibraryStruct { + int value; +}; \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/commonize-kt-56729-consume-library-with-two-roots/settings.gradle.kts b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/commonize-kt-56729-consume-library-with-two-roots/settings.gradle.kts new file mode 100644 index 00000000000..d19eb2d2e8f --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/commonize-kt-56729-consume-library-with-two-roots/settings.gradle.kts @@ -0,0 +1,9 @@ +dependencyResolutionManagement { + repositories { + mavenLocal() + mavenCentral() + } +} + +include(":producer") +include(":consumer")