diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/mpp/MppCompositeBuildIT.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/mpp/MppCompositeBuildIT.kt index fa7e9e29033..437e96af9a4 100644 --- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/mpp/MppCompositeBuildIT.kt +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/mpp/MppCompositeBuildIT.kt @@ -5,6 +5,7 @@ package org.jetbrains.kotlin.gradle.mpp +import org.gradle.api.logging.configuration.WarningMode import org.gradle.util.GradleVersion import org.jetbrains.kotlin.gradle.KOTLIN_VERSION import org.jetbrains.kotlin.gradle.idea.tcs.IdeaKotlinSourceDependency.Type.Regular @@ -235,4 +236,21 @@ class MppCompositeBuildIT : KGPBaseTest() { } } } + + @GradleTest + fun `test - sample4-KT-37051-withCInterop`(gradleVersion: GradleVersion) { + val producer = project("mpp-composite-build/sample4-KT-37051-withCInterop/producerBuild", gradleVersion) + + project( + "mpp-composite-build/sample4-KT-37051-withCInterop/consumerBuild", gradleVersion, + buildOptions = defaultBuildOptions.copy(warningMode = WarningMode.Fail) + ) { + settingsGradleKts.toFile().replaceText("", producer.projectPath.toUri().path) + + build(":consumerA:assemble") { + assertTasksExecuted(":consumerA:compileKotlinLinuxX64") + assertOutputDoesNotContain("w: duplicate library") + } + } + } } diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/mpp-composite-build/sample4-KT-37051-withCInterop/consumerBuild/consumerA/build.gradle.kts b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/mpp-composite-build/sample4-KT-37051-withCInterop/consumerBuild/consumerA/build.gradle.kts new file mode 100644 index 00000000000..246a8cf901e --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/mpp-composite-build/sample4-KT-37051-withCInterop/consumerBuild/consumerA/build.gradle.kts @@ -0,0 +1,24 @@ +@file:Suppress("OPT_IN_USAGE") + +plugins { + kotlin("multiplatform") +} + +kotlin { + targetHierarchy.default() + jvm() + linuxX64() + linuxArm64() + + sourceSets.commonMain.get().dependencies { + implementation("org.jetbrains.sample:producerA:1.0.0-SNAPSHOT") + } + + targets.all { + compilations.all { + compilerOptions.configure { + allWarningsAsErrors.set(true) + } + } + } +} \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/mpp-composite-build/sample4-KT-37051-withCInterop/consumerBuild/consumerA/src/commonMain/kotlin/ConsumerACommon.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/mpp-composite-build/sample4-KT-37051-withCInterop/consumerBuild/consumerA/src/commonMain/kotlin/ConsumerACommon.kt new file mode 100644 index 00000000000..800fcda56bf --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/mpp-composite-build/sample4-KT-37051-withCInterop/consumerBuild/consumerA/src/commonMain/kotlin/ConsumerACommon.kt @@ -0,0 +1,10 @@ +/* + * Copyright 2010-2023 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. + */ + +object ConsumerACommon { + init { + ProducerACommonX + } +} \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/mpp-composite-build/sample4-KT-37051-withCInterop/consumerBuild/consumerA/src/linuxX64Main/kotlin/ConsumerALinuxX64.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/mpp-composite-build/sample4-KT-37051-withCInterop/consumerBuild/consumerA/src/linuxX64Main/kotlin/ConsumerALinuxX64.kt new file mode 100644 index 00000000000..68b3ac37a17 --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/mpp-composite-build/sample4-KT-37051-withCInterop/consumerBuild/consumerA/src/linuxX64Main/kotlin/ConsumerALinuxX64.kt @@ -0,0 +1,16 @@ +/* + * Copyright 2010-2023 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. + */ + +import clib.myCFunction + +object ConsumerALinuxX64 { + init { + ProducerACommonX + ProducerANative + ProducerALinuxX64 + + myCFunction() + } +} \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/mpp-composite-build/sample4-KT-37051-withCInterop/consumerBuild/consumerA/src/nativeMain/kotlin/ConsumerANative.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/mpp-composite-build/sample4-KT-37051-withCInterop/consumerBuild/consumerA/src/nativeMain/kotlin/ConsumerANative.kt new file mode 100644 index 00000000000..67236db2c1c --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/mpp-composite-build/sample4-KT-37051-withCInterop/consumerBuild/consumerA/src/nativeMain/kotlin/ConsumerANative.kt @@ -0,0 +1,15 @@ +/* + * Copyright 2010-2023 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. + */ + +import kotlinx.cinterop.memScoped +import platform.posix.fopen + +object ConsumerANative { + init { + memScoped { } + fopen("", "") + ProducerANative + } +} \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/mpp-composite-build/sample4-KT-37051-withCInterop/consumerBuild/consumerA/src/src/commonMain/kotlin/ConsumerACommon.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/mpp-composite-build/sample4-KT-37051-withCInterop/consumerBuild/consumerA/src/src/commonMain/kotlin/ConsumerACommon.kt new file mode 100644 index 00000000000..800fcda56bf --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/mpp-composite-build/sample4-KT-37051-withCInterop/consumerBuild/consumerA/src/src/commonMain/kotlin/ConsumerACommon.kt @@ -0,0 +1,10 @@ +/* + * Copyright 2010-2023 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. + */ + +object ConsumerACommon { + init { + ProducerACommonX + } +} \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/mpp-composite-build/sample4-KT-37051-withCInterop/consumerBuild/consumerA/src/src/linuxX64Main/kotlin/ConsumerALinuxX64.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/mpp-composite-build/sample4-KT-37051-withCInterop/consumerBuild/consumerA/src/src/linuxX64Main/kotlin/ConsumerALinuxX64.kt new file mode 100644 index 00000000000..68b3ac37a17 --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/mpp-composite-build/sample4-KT-37051-withCInterop/consumerBuild/consumerA/src/src/linuxX64Main/kotlin/ConsumerALinuxX64.kt @@ -0,0 +1,16 @@ +/* + * Copyright 2010-2023 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. + */ + +import clib.myCFunction + +object ConsumerALinuxX64 { + init { + ProducerACommonX + ProducerANative + ProducerALinuxX64 + + myCFunction() + } +} \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/mpp-composite-build/sample4-KT-37051-withCInterop/consumerBuild/consumerA/src/src/nativeMain/kotlin/ConsumerANative.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/mpp-composite-build/sample4-KT-37051-withCInterop/consumerBuild/consumerA/src/src/nativeMain/kotlin/ConsumerANative.kt new file mode 100644 index 00000000000..67236db2c1c --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/mpp-composite-build/sample4-KT-37051-withCInterop/consumerBuild/consumerA/src/src/nativeMain/kotlin/ConsumerANative.kt @@ -0,0 +1,15 @@ +/* + * Copyright 2010-2023 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. + */ + +import kotlinx.cinterop.memScoped +import platform.posix.fopen + +object ConsumerANative { + init { + memScoped { } + fopen("", "") + ProducerANative + } +} \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/mpp-composite-build/sample4-KT-37051-withCInterop/consumerBuild/settings.gradle.kts b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/mpp-composite-build/sample4-KT-37051-withCInterop/consumerBuild/settings.gradle.kts new file mode 100644 index 00000000000..51772eedeb2 --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/mpp-composite-build/sample4-KT-37051-withCInterop/consumerBuild/settings.gradle.kts @@ -0,0 +1,14 @@ +dependencyResolutionManagement { + repositories { + mavenLocal() + mavenCentral() + } +} + +include(":consumerA") + +includeBuild("") { + dependencySubstitution { + substitute(module("org.jetbrains.sample:producerA")).using(project(":producerA")) + } +} diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/mpp-composite-build/sample4-KT-37051-withCInterop/producerBuild/producerA/build.gradle.kts b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/mpp-composite-build/sample4-KT-37051-withCInterop/producerBuild/producerA/build.gradle.kts new file mode 100644 index 00000000000..eab1742b20a --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/mpp-composite-build/sample4-KT-37051-withCInterop/producerBuild/producerA/build.gradle.kts @@ -0,0 +1,25 @@ +@file:Suppress("OPT_IN_USAGE") + +import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinNativeTarget + +plugins { + kotlin("multiplatform") + `maven-publish` +} + + +group = "org.jetbrains.sample" +version = "1.0.0-SNAPSHOT" + +kotlin { + targetHierarchy.default() + jvm() + linuxX64() + linuxArm64() + + targets.withType().all { + compilations.getByName("main").cinterops.create("clib") { + header("src/clib.h") + } + } +} diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/mpp-composite-build/sample4-KT-37051-withCInterop/producerBuild/producerA/src/clib.h b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/mpp-composite-build/sample4-KT-37051-withCInterop/producerBuild/producerA/src/clib.h new file mode 100644 index 00000000000..3cc79e26967 --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/mpp-composite-build/sample4-KT-37051-withCInterop/producerBuild/producerA/src/clib.h @@ -0,0 +1 @@ +int myCFunction(); \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/mpp-composite-build/sample4-KT-37051-withCInterop/producerBuild/producerA/src/commonMain/kotlin/ProducerACommonX.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/mpp-composite-build/sample4-KT-37051-withCInterop/producerBuild/producerA/src/commonMain/kotlin/ProducerACommonX.kt new file mode 100644 index 00000000000..aa2c6b4da2a --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/mpp-composite-build/sample4-KT-37051-withCInterop/producerBuild/producerA/src/commonMain/kotlin/ProducerACommonX.kt @@ -0,0 +1,7 @@ +/* + * Copyright 2010-2023 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. + */ + +object ProducerACommonX +object A \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/mpp-composite-build/sample4-KT-37051-withCInterop/producerBuild/producerA/src/linuxX64Main/kotlin/ProducerALinuxX64.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/mpp-composite-build/sample4-KT-37051-withCInterop/producerBuild/producerA/src/linuxX64Main/kotlin/ProducerALinuxX64.kt new file mode 100644 index 00000000000..0282269b0e4 --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/mpp-composite-build/sample4-KT-37051-withCInterop/producerBuild/producerA/src/linuxX64Main/kotlin/ProducerALinuxX64.kt @@ -0,0 +1,6 @@ +/* + * Copyright 2010-2023 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. + */ + +object ProducerALinuxX64 \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/mpp-composite-build/sample4-KT-37051-withCInterop/producerBuild/producerA/src/nativeInterop/cinterop/clib.def b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/mpp-composite-build/sample4-KT-37051-withCInterop/producerBuild/producerA/src/nativeInterop/cinterop/clib.def new file mode 100644 index 00000000000..e69de29bb2d diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/mpp-composite-build/sample4-KT-37051-withCInterop/producerBuild/producerA/src/nativeMain/kotlin/ProducerANative.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/mpp-composite-build/sample4-KT-37051-withCInterop/producerBuild/producerA/src/nativeMain/kotlin/ProducerANative.kt new file mode 100644 index 00000000000..19462abeda4 --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/mpp-composite-build/sample4-KT-37051-withCInterop/producerBuild/producerA/src/nativeMain/kotlin/ProducerANative.kt @@ -0,0 +1,6 @@ +/* + * Copyright 2010-2023 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. + */ + +object ProducerANative \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/mpp-composite-build/sample4-KT-37051-withCInterop/producerBuild/settings.gradle.kts b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/mpp-composite-build/sample4-KT-37051-withCInterop/producerBuild/settings.gradle.kts new file mode 100644 index 00000000000..dd20205742e --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/mpp-composite-build/sample4-KT-37051-withCInterop/producerBuild/settings.gradle.kts @@ -0,0 +1,8 @@ +dependencyResolutionManagement { + repositories { + mavenLocal() + mavenCentral() + } +} + +include(":producerA")