From a56dc7d73aeb04a61edc60c1d4415175ac0917f8 Mon Sep 17 00:00:00 2001 From: Anton Lakotka Date: Tue, 12 Mar 2024 08:52:49 +0100 Subject: [PATCH] [Gradle] Don't resolve Apple-specific Cinterops on Linux & Windows Resolving such dependencies was lenient, however it produced a lot of annoying error messages in the IDE. Because "file not found". KGP already warns user if they are declared Apple-specific targets on non-macos machine. ^KT-66514 Verification Pending --- .../kotlin/gradle/MppIdeDependencyResolutionIT.kt | 12 ++++++++++-- .../dep-with-cinterop/build.gradle.kts | 1 + .../internal/CInteropPropagatedDependencies.kt | 4 ++++ 3 files changed, 15 insertions(+), 2 deletions(-) diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/MppIdeDependencyResolutionIT.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/MppIdeDependencyResolutionIT.kt index 7e52093faea..1ab259b08be 100644 --- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/MppIdeDependencyResolutionIT.kt +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/MppIdeDependencyResolutionIT.kt @@ -99,13 +99,21 @@ class MppIdeDependencyResolutionIT : KGPBaseTest() { resolveIdeDependencies("dep-with-cinterop") { dependencies -> dependencies["commonMain"].cinteropDependencies() - .assertMatches(binaryCoordinates(Regex("a:dep.*\\(linux_arm64, linux_x64\\)"))) + .assertMatches(binaryCoordinates(Regex("a:dep.*\\(ios_x64, linux_arm64, linux_x64\\)"))) dependencies["commonTest"].cinteropDependencies() - .assertMatches(binaryCoordinates(Regex("a:dep.*\\(linux_arm64, linux_x64\\)"))) + .assertMatches(binaryCoordinates(Regex("a:dep.*\\(ios_x64, linux_arm64, linux_x64\\)"))) dependencies["linuxX64Main"].cinteropDependencies().assertMatches(binaryCoordinates(Regex("a:dep.*linux_x64"))) dependencies["linuxArm64Main"].cinteropDependencies().assertMatches(binaryCoordinates(Regex("a:dep.*linux_arm64"))) dependencies["linuxX64Test"].cinteropDependencies().assertMatches(binaryCoordinates(Regex("a:dep.*linux_x64"))) dependencies["linuxArm64Test"].cinteropDependencies().assertMatches(binaryCoordinates(Regex("a:dep.*linux_arm64"))) + + val iosX64MainDependencies = dependencies["iosX64Main"].cinteropDependencies() + if (HostManager.hostIsMac) { + iosX64MainDependencies.assertMatches(binaryCoordinates(Regex("a:dep.*ios_x64"))) + } else { + if (iosX64MainDependencies.isNotEmpty()) + fail("Expected no dependencies (resolved & unresolved) for iosX64Cinterops on non-MacOS Host") + } } resolveIdeDependencies("client-for-binary-dep") { dependencies -> diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/cinteropImport/dep-with-cinterop/build.gradle.kts b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/cinteropImport/dep-with-cinterop/build.gradle.kts index ead9a9b8494..b156ffeee56 100644 --- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/cinteropImport/dep-with-cinterop/build.gradle.kts +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/cinteropImport/dep-with-cinterop/build.gradle.kts @@ -6,6 +6,7 @@ plugins { kotlin { linuxX64().compilations.getByName("main").cinterops.create("dep") linuxArm64().compilations.getByName("main").cinterops.create("dep") + iosX64().compilations.getByName("main").cinterops.create("dep") } publishing { diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/native/internal/CInteropPropagatedDependencies.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/native/internal/CInteropPropagatedDependencies.kt index 41f3c016184..8b9f0555237 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/native/internal/CInteropPropagatedDependencies.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/native/internal/CInteropPropagatedDependencies.kt @@ -11,6 +11,7 @@ import org.jetbrains.kotlin.gradle.dsl.multiplatformExtensionOrNull import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinMetadataCompilation import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinNativeCompilation import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinSharedNativeCompilation +import org.jetbrains.kotlin.gradle.plugin.mpp.enabledOnCurrentHost import org.jetbrains.kotlin.gradle.plugin.sources.DefaultKotlinSourceSet import org.jetbrains.kotlin.gradle.plugin.sources.internal import org.jetbrains.kotlin.gradle.tasks.CInteropProcess @@ -76,6 +77,9 @@ internal fun Project.getPlatformCinteropDependenciesOrEmpty( /* Participating in multiple compilations? -> can't propagate -> should be commonized */ val compilation = compilations.singleOrNull() as? KotlinNativeCompilation ?: return@files emptySet() + /* Apple-specific cinterops can't be produced on non-MacOs machines, so just return an empty dependencies collection */ + if (!compilation.target.konanTarget.enabledOnCurrentHost) return@files emptySet() + (compilation.associatedCompilations + compilation) .filterIsInstance() .filter(compilationFilter)