[Gradle] CInteropProcess: Prevent compilation when depending on project without c-interops

This commit is contained in:
sebastian.sellmair
2021-07-23 15:10:20 +02:00
committed by Space
parent 4ce3f87361
commit 947e97511b
2 changed files with 9 additions and 3 deletions
@@ -36,6 +36,7 @@ import org.jetbrains.kotlin.gradle.targets.metadata.isKotlinGranularMetadataEnab
import org.jetbrains.kotlin.gradle.targets.native.*
import org.jetbrains.kotlin.gradle.targets.native.internal.commonizeCInteropTask
import org.jetbrains.kotlin.gradle.targets.native.internal.createCInteropApiElementsKlibArtifact
import org.jetbrains.kotlin.gradle.targets.native.internal.locateOrCreateCInteropApiElementsConfiguration
import org.jetbrains.kotlin.gradle.targets.native.internal.locateOrCreateCInteropDependencyConfiguration
import org.jetbrains.kotlin.gradle.targets.native.tasks.*
import org.jetbrains.kotlin.gradle.tasks.*
@@ -278,6 +279,7 @@ open class KotlinNativeTargetConfigurator<T : KotlinNativeTarget> : AbstractKotl
}
protected fun configureCInterops(target: KotlinNativeTarget): Unit = with(target.project) {
locateOrCreateCInteropApiElementsConfiguration(target)
target.compilations.all { compilation ->
createCInteropTasks(compilation, compilation.cinterops)
compilation.cinterops.all { cinterop ->
@@ -25,7 +25,8 @@ internal fun createCInteropApiElementsKlibArtifact(
interopTask: TaskProvider<out CInteropProcess>
) {
val project = settings.compilation.project
val configuration = project.locateOrCreateCInteropApiElementsConfiguration(settings.target ?: return)
val configurationName = cInteropApiElementsConfigurationName(settings.target ?: return)
val configuration = project.configurations.getByName(configurationName)
project.artifacts.add(configuration.name, interopTask.map { it.outputFile }) { artifact ->
artifact.extension = "klib"
artifact.type = "klib"
@@ -55,8 +56,8 @@ internal fun Project.locateOrCreateCInteropDependencyConfiguration(
}
}
private fun Project.locateOrCreateCInteropApiElementsConfiguration(target: KotlinTarget): Configuration {
val configurationName = target.name + "CInteropApiElements"
internal fun Project.locateOrCreateCInteropApiElementsConfiguration(target: KotlinTarget): Configuration {
val configurationName = cInteropApiElementsConfigurationName(target)
configurations.findByName(configurationName)?.let { return it }
return configurations.create(configurationName).apply {
@@ -70,6 +71,9 @@ private fun Project.locateOrCreateCInteropApiElementsConfiguration(target: Kotli
}
}
private fun cInteropApiElementsConfigurationName(target: KotlinTarget): String {
return target.name + "CInteropApiElements"
}
internal object CInteropKlibLibraryElements {
const val CINTEROP_KLIB = "cinterop-klib"