[MPP] use commonizerNativeTargets in names of propagated cinterops

KTIJ-24573
This commit is contained in:
Pavel Kirpichenkov
2023-02-08 20:57:55 +02:00
committed by Space Team
parent ac8d5a0ea8
commit 8d62e488fe
8 changed files with 60 additions and 6 deletions
@@ -19,7 +19,9 @@ import org.jetbrains.kotlin.gradle.idea.testFixtures.tcs.binaryCoordinates
import org.jetbrains.kotlin.gradle.testbase.*
import org.jetbrains.kotlin.gradle.util.kotlinNativeDistributionDependencies
import org.jetbrains.kotlin.gradle.util.resolveIdeDependencies
import org.jetbrains.kotlin.konan.target.HostManager
import org.jetbrains.kotlin.konan.target.KonanTarget.*
import org.junit.AssumptionViolatedException
import org.junit.jupiter.api.DisplayName
import java.nio.ByteBuffer
import java.util.*
@@ -91,11 +93,6 @@ class MppIdeDependencyResolutionIT : KGPBaseTest() {
@GradleTest
fun testCinterops(gradleVersion: GradleVersion) {
fun Iterable<IdeaKotlinDependency>.cinteropDependencies() =
this.filterIsInstance<IdeaKotlinBinaryDependency>().filter {
it.klibExtra?.isInterop == true && !it.isNativeStdlib && !it.isNativeDistribution
}
project(projectName = "cinteropImport", gradleVersion = gradleVersion) {
build(":dep-with-cinterop:publishAllPublicationsToBuildRepository")
@@ -245,4 +242,24 @@ class MppIdeDependencyResolutionIT : KGPBaseTest() {
}
}
}
@GradleTest
fun `test cinterops - commonized interop name should include targets unsupported on host`(gradleVersion: GradleVersion) {
if (HostManager.hostIsMac) {
throw AssumptionViolatedException("Host shouldn't support ios target")
}
project("cinterop-ios", gradleVersion) {
resolveIdeDependencies { dependencies ->
dependencies["commonMain"].cinteropDependencies().assertMatches(
binaryCoordinates(Regex("""a:cinterop-ios-cinterop-myinterop.*\(ios_x64, linux_x64\)"""))
)
}
}
}
private fun Iterable<IdeaKotlinDependency>.cinteropDependencies() =
this.filterIsInstance<IdeaKotlinBinaryDependency>().filter {
it.klibExtra?.isInterop == true && !it.isNativeStdlib && !it.isNativeDistribution
}
}
@@ -0,0 +1,33 @@
plugins {
kotlin("multiplatform")
}
repositories {
mavenLocal()
mavenCentral()
}
group = "a"
version = "1.0"
kotlin {
iosX64 {
compilations.getByName("main") {
cinterops {
create("myinterop") {
headers("libs/include/myinterop.h")
}
}
}
}
linuxX64 {
compilations.getByName("main") {
cinterops {
create("myinterop") {
headers("libs/include/myinterop.h")
}
}
}
}
}
@@ -0,0 +1,2 @@
kotlin.mpp.enableCInteropCommonization=true
kotlin.mpp.import.enableKgpDependencyResolution=true
@@ -38,6 +38,7 @@ private fun Project.createCinteropLibraryDependency(libraryFile: java.io.File):
}
val (group, module) = cinteropGroupAndModule(library)
val libraryTargets = library.commonizerNativeTargets ?: library.nativeTargets
return IdeaKotlinResolvedBinaryDependency(
binaryType = IdeaKotlinBinaryDependency.KOTLIN_COMPILE_BINARY_TYPE,
@@ -46,7 +47,7 @@ private fun Project.createCinteropLibraryDependency(libraryFile: java.io.File):
group = group,
module = module,
version = null, // TODO (kirpichenkov): if/when used for published cinterops, should be set up correctly
sourceSetName = library.nativeTargets.singleOrNull() ?: library.nativeTargets.joinToString(prefix = "(", postfix = ")")
sourceSetName = libraryTargets.singleOrNull() ?: libraryTargets.joinToString(prefix = "(", postfix = ")")
),
).apply {
klibExtra = KlibExtra(library)