From f4681fb93a488f9f51fd8537bed735deb9c8c5bf Mon Sep 17 00:00:00 2001 From: Anton Lakotka Date: Sun, 3 Dec 2023 22:39:03 +0100 Subject: [PATCH] [Gradle] Add SetupKotlinNativePlatformDependenciesForLegacyImport The code is extracted from SetupKotlinNativePlatformDependenciesAndStdlib as the latter is applied only to native compilations and shared native metadata compilations. For test shared native source sets, such as `nativeTest no native metadata compilation is created, but for legacy import intransitive metadata dependencies should contain native platform dependencies listed. And SetupKotlinNativePlatformDependenciesForLegacyImport fixes that. ^KT-61559 Verification Pending --- .../plugin/registerKotlinPluginExtensions.kt | 6 ++--- ...tlinNativePlatformDependenciesAndStdlib.kt | 25 ++++++++++++++----- 2 files changed, 21 insertions(+), 10 deletions(-) diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/registerKotlinPluginExtensions.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/registerKotlinPluginExtensions.kt index 5f8cdbf72a5..5babe451bba 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/registerKotlinPluginExtensions.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/registerKotlinPluginExtensions.kt @@ -30,10 +30,7 @@ import org.jetbrains.kotlin.gradle.targets.native.ConfigureFrameworkExportSideEf import org.jetbrains.kotlin.gradle.targets.native.CreateFatFrameworksSetupAction import org.jetbrains.kotlin.gradle.targets.native.KotlinNativeConfigureBinariesSideEffect import org.jetbrains.kotlin.gradle.targets.native.SetupEmbedAndSignAppleFrameworkTaskSideEffect -import org.jetbrains.kotlin.gradle.targets.native.internal.AddKotlinPlatformIntegersSupportLibrary -import org.jetbrains.kotlin.gradle.targets.native.internal.CInteropCommonizedCInteropApiElementsConfigurationsSetupAction -import org.jetbrains.kotlin.gradle.targets.native.internal.SetupCInteropApiElementsConfigurationSideEffect -import org.jetbrains.kotlin.gradle.targets.native.internal.SetupKotlinNativePlatformDependenciesAndStdlib +import org.jetbrains.kotlin.gradle.targets.native.internal.* import org.jetbrains.kotlin.gradle.targets.native.tasks.artifact.KotlinArtifactsExtensionSetupAction import org.jetbrains.kotlin.gradle.tooling.RegisterBuildKotlinToolingMetadataTask @@ -49,6 +46,7 @@ internal fun Project.registerKotlinPluginExtensions() { register(project, UserDefinedAttributesSetupAction) register(project, CustomizeKotlinDependenciesSetupAction) register(project, AddKotlinPlatformIntegersSupportLibrary) + register(project, SetupKotlinNativePlatformDependenciesForLegacyImport) if (isJvm || isMultiplatform) { diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/native/internal/SetupKotlinNativePlatformDependenciesAndStdlib.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/native/internal/SetupKotlinNativePlatformDependenciesAndStdlib.kt index c6926edc25e..911063ccce6 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/native/internal/SetupKotlinNativePlatformDependenciesAndStdlib.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/native/internal/SetupKotlinNativePlatformDependenciesAndStdlib.kt @@ -8,9 +8,12 @@ package org.jetbrains.kotlin.gradle.targets.native.internal import org.gradle.api.Project import org.gradle.api.file.FileCollection import org.jetbrains.kotlin.commonizer.* +import org.jetbrains.kotlin.gradle.dsl.multiplatformExtensionOrNull +import org.jetbrains.kotlin.gradle.plugin.KotlinProjectSetupCoroutine import org.jetbrains.kotlin.gradle.plugin.mpp.AbstractKotlinNativeCompilation import org.jetbrains.kotlin.gradle.plugin.mpp.compilationImpl.KotlinCompilationSideEffectCoroutine import org.jetbrains.kotlin.gradle.plugin.sources.DefaultKotlinSourceSet +import org.jetbrains.kotlin.gradle.targets.metadata.isNativeSourceSet import org.jetbrains.kotlin.gradle.utils.filesProvider import org.jetbrains.kotlin.gradle.utils.konanDistribution import java.io.File @@ -26,14 +29,24 @@ internal val SetupKotlinNativePlatformDependenciesAndStdlib = val stdlib = project.files(project.konanDistribution.stdlib) compilation.compileDependencyFiles += stdlib - - val defaultSourceSet = compilation.defaultSourceSet - if (defaultSourceSet is DefaultKotlinSourceSet) { - defaultSourceSet.addDependencyForLegacyImport(nativeDistributionDependencies) - defaultSourceSet.addDependencyForLegacyImport(stdlib) - } } +internal val SetupKotlinNativePlatformDependenciesForLegacyImport = KotlinProjectSetupCoroutine { + val multiplatform = multiplatformExtensionOrNull ?: return@KotlinProjectSetupCoroutine + val sourceSets = multiplatform + .awaitSourceSets() + .filter { it.isNativeSourceSet.await() } + .filterIsInstance() + + val stdlib = project.files(project.konanDistribution.stdlib) + sourceSets.forEach { sourceSet -> + val commonizerTarget = sourceSet.commonizerTarget.await() ?: return@forEach + val nativeDistributionDependencies = getNativeDistributionDependencies(commonizerTarget) + sourceSet.addDependencyForLegacyImport(nativeDistributionDependencies) + sourceSet.addDependencyForLegacyImport(stdlib) + } +} + internal fun Project.getNativeDistributionDependencies(target: CommonizerTarget): FileCollection { return when (target) { is LeafCommonizerTarget -> getOriginalPlatformLibrariesFor(target)