diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/NewMultiplatformIT.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/NewMultiplatformIT.kt index 58f2c5ffc04..31a6f6c0d51 100644 --- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/NewMultiplatformIT.kt +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/NewMultiplatformIT.kt @@ -1124,6 +1124,7 @@ class NewMultiplatformIT : BaseGradleIT() { assertTasksExecuted(":publishedLibrary:cinteropStdio${host.capitalize()}") assertTrue(output.contains("Published test"), "No test output found") assertFileExists("publishedLibrary/build/classes/kotlin/$host/main/publishedLibrary-cinterop-stdio.klib") + assertFileExists("publishedLibrary/build/classes/kotlin/$host/test/test-cinterop-stdio.klib") assertFileExists("repo/org/example/publishedLibrary-$host/1.0/publishedLibrary-$host-1.0-cinterop-stdio.klib") } diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/new-mpp-native-cinterop/publishedLibrary/build.gradle b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/new-mpp-native-cinterop/publishedLibrary/build.gradle index 7c7ee82d32a..eb1a64c0630 100644 --- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/new-mpp-native-cinterop/publishedLibrary/build.gradle +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/new-mpp-native-cinterop/publishedLibrary/build.gradle @@ -34,10 +34,13 @@ kotlin { fromPreset(presets.mingwX64, 'mingw64') configure([macos64, linux64, mingw64]) { - compilations.main.cinterops { - stdio { - packageName 'example.cinterop.published.stdio' - extraOpts '-nodefaultlibs' + compilations.all { + // Add interop in the test compilation too as a regression test for KT-30290. + cinterops { + stdio { + packageName 'example.cinterop.published.stdio' + extraOpts '-nodefaultlibs' + } } } } diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinNativeTaretConfigurator.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinNativeTaretConfigurator.kt index 7f0836b4c00..65827df2efe 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinNativeTaretConfigurator.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinNativeTaretConfigurator.kt @@ -194,16 +194,25 @@ open class KotlinNativeTargetConfigurator( val interopOutput = project.files(outputFileProvider).builtBy(this) with(compilation) { + // Register the interop library as a dependency of the compilation to make IDE happy. project.dependencies.add(compileDependencyConfigurationName, interopOutput) if (isMainCompilation) { - target.compilations.findByName(TEST_COMPILATION_NAME)?.let { - project.dependencies.add(it.compileDependencyConfigurationName, interopOutput) + // Register the interop library as an outgoing klib to allow depending on projects with cinterops. + project.dependencies.add(target.apiElementsConfigurationName, interopOutput) + // Add the interop library in publication. + createCInteropKlibArtifact(interop, this@apply) + // We cannot add the interop library in an compilation output because in this case + // IDE doesn't see this library in module dependencies. So we have to manually add + // main interop libraries in dependencies of the default test compilation. + target.compilations.findByName(TEST_COMPILATION_NAME)?.let { testCompilation -> + project.dependencies.add(testCompilation.compileDependencyConfigurationName, interopOutput) + testCompilation.cinterops.all { + it.dependencyFiles += interopOutput + } } } - project.dependencies.add(target.apiElementsConfigurationName, interopOutput) } } - createCInteropKlibArtifact(interop, interopTask) } } // endregion.