Don't create individual Gradle configurations for every cinterop
Common configuration serves two purposes: * Dependencies are the same for all cinterops of a single compilation and can therefore be resolved only once in the single configuration * Compilations without cinterops should be able to receive cinterop dependencies from other projects, the updated configuration can be used for that KT-54975
This commit is contained in:
committed by
Space Team
parent
0e195b3ad0
commit
1c79e5a71a
+2
-2
@@ -1123,7 +1123,7 @@ class GeneralNativeIT : BaseGradleIT() {
|
||||
}
|
||||
}
|
||||
|
||||
build(":dependencyInsight", "--configuration", "hostTestTestNumberCInterop", "--dependency", "org.example:publishedLibrary") {
|
||||
build(":dependencyInsight", "--configuration", "hostTestCInterop", "--dependency", "org.example:publishedLibrary") {
|
||||
assertSuccessful()
|
||||
assertVariantInDependencyInsight("hostApiElements-published")
|
||||
}
|
||||
@@ -1137,7 +1137,7 @@ class GeneralNativeIT : BaseGradleIT() {
|
||||
""".trimIndent()
|
||||
)
|
||||
|
||||
build(":dependencyInsight", "--configuration", "hostTestTestNumberCInterop", "--dependency", ":projectLibrary") {
|
||||
build(":dependencyInsight", "--configuration", "hostTestCInterop", "--dependency", ":projectLibrary") {
|
||||
assertSuccessful()
|
||||
assertVariantInDependencyInsight("hostCInteropApiElements")
|
||||
}
|
||||
|
||||
+1
-1
@@ -327,7 +327,7 @@ open class KotlinNativeTargetConfigurator<T : KotlinNativeTarget> : AbstractKotl
|
||||
target.compilations.all { compilation ->
|
||||
createCInteropTasks(compilation, compilation.cinterops)
|
||||
compilation.cinterops.all { cinterop ->
|
||||
cinterop.dependencyFiles += locateOrCreateCInteropDependencyConfiguration(compilation, cinterop, target)
|
||||
cinterop.dependencyFiles += locateOrCreateCInteropDependencyConfiguration(compilation)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+9
-10
@@ -10,14 +10,10 @@ import org.gradle.api.artifacts.Configuration
|
||||
import org.gradle.api.attributes.*
|
||||
import org.gradle.api.internal.artifacts.ArtifactAttributes
|
||||
import org.gradle.api.tasks.TaskProvider
|
||||
import org.jetbrains.kotlin.gradle.plugin.CInteropSettings
|
||||
import org.jetbrains.kotlin.gradle.plugin.KotlinNativeTargetConfigurator.NativeArtifactFormat
|
||||
import org.jetbrains.kotlin.gradle.plugin.KotlinTarget
|
||||
import org.jetbrains.kotlin.gradle.plugin.categoryByName
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.DefaultCInteropSettings
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinNativeCompilation
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinNativeTarget
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinUsages
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.*
|
||||
import org.jetbrains.kotlin.gradle.plugin.usesPlatformOf
|
||||
import org.jetbrains.kotlin.gradle.targets.native.internal.CInteropKlibLibraryElements.cinteropKlibLibraryElements
|
||||
import org.jetbrains.kotlin.gradle.tasks.CInteropProcess
|
||||
@@ -40,26 +36,29 @@ internal fun createCInteropApiElementsKlibArtifact(
|
||||
|
||||
internal fun Project.locateOrCreateCInteropDependencyConfiguration(
|
||||
compilation: KotlinNativeCompilation,
|
||||
cinterop: CInteropSettings,
|
||||
target: KotlinTarget
|
||||
): Configuration {
|
||||
configurations.findByName(compilation.cInteropDependencyConfigurationName)?.let { return it }
|
||||
|
||||
val compileOnlyConfiguration = configurations.getByName(compilation.compileOnlyConfigurationName)
|
||||
val implementationConfiguration = configurations.getByName(compilation.implementationConfigurationName)
|
||||
|
||||
return configurations.maybeCreate(cinterop.dependencyConfigurationName).apply {
|
||||
return configurations.create(compilation.cInteropDependencyConfigurationName).apply {
|
||||
extendsFrom(compileOnlyConfiguration, implementationConfiguration)
|
||||
isVisible = false
|
||||
isCanBeResolved = true
|
||||
isCanBeConsumed = false
|
||||
|
||||
usesPlatformOf(target)
|
||||
usesPlatformOf(compilation.target)
|
||||
attributes.attribute(LibraryElements.LIBRARY_ELEMENTS_ATTRIBUTE, cinteropKlibLibraryElements())
|
||||
attributes.attribute(Usage.USAGE_ATTRIBUTE, objects.named(Usage::class.java, KotlinUsages.KOTLIN_CINTEROP))
|
||||
attributes.attribute(Category.CATEGORY_ATTRIBUTE, project.categoryByName(Category.LIBRARY))
|
||||
description = "Dependencies for cinterop '${cinterop.name}' (compilation '${compilation.name}')."
|
||||
description = "CInterop dependencies for compilation '${compilation.name}')."
|
||||
}
|
||||
}
|
||||
|
||||
internal val KotlinNativeCompilation.cInteropDependencyConfigurationName: String
|
||||
get() = compilation.disambiguateName("CInterop")
|
||||
|
||||
internal fun Project.locateOrCreateCInteropApiElementsConfiguration(target: KotlinTarget): Configuration {
|
||||
val configurationName = cInteropApiElementsConfigurationName(target)
|
||||
configurations.findByName(configurationName)?.let { return it }
|
||||
|
||||
Reference in New Issue
Block a user