[gradle][plugin] this patch adds pom entry to konan building config to re-evaluate it on each native publications

This commit is contained in:
Vasily Levchenko
2018-06-13 17:54:24 +03:00
parent 5a4718b3a3
commit f84e272b0e
2 changed files with 17 additions and 9 deletions
@@ -24,6 +24,7 @@ import org.gradle.api.Task
import org.gradle.api.internal.DefaultNamedDomainObjectSet import org.gradle.api.internal.DefaultNamedDomainObjectSet
import org.gradle.api.internal.project.ProjectInternal import org.gradle.api.internal.project.ProjectInternal
import org.gradle.api.plugins.BasePlugin import org.gradle.api.plugins.BasePlugin
import org.gradle.api.publish.maven.MavenPom
import org.gradle.internal.reflect.Instantiator import org.gradle.internal.reflect.Instantiator
import org.gradle.util.ConfigureUtil import org.gradle.util.ConfigureUtil
import org.jetbrains.kotlin.gradle.plugin.tasks.KonanBuildingTask import org.jetbrains.kotlin.gradle.plugin.tasks.KonanBuildingTask
@@ -46,6 +47,8 @@ abstract class KonanBuildingConfig<T: KonanBuildingTask>(private val name_: Stri
internal val aggregateBuildTask: Task internal val aggregateBuildTask: Task
internal var pomActions = mutableListOf<Action<MavenPom>>()
private val konanTargets: Iterable<KonanTarget> private val konanTargets: Iterable<KonanTarget>
get() = project.hostManager.toKonanTargets(targets).distinct() get() = project.hostManager.toKonanTargets(targets).distinct()
@@ -187,4 +190,6 @@ abstract class KonanBuildingConfig<T: KonanBuildingTask>(private val name_: Stri
target(targetString) { configureAction.execute(this) } target(targetString) { configureAction.execute(this) }
fun target(targetString: String, configureAction: Closure<Unit>) = fun target(targetString: String, configureAction: Closure<Unit>) =
target(targetString, ConfigureUtil.configureUsing(configureAction)) target(targetString, ConfigureUtil.configureUsing(configureAction))
fun pom(action: Action<MavenPom>) = pomActions + action
} }
@@ -27,9 +27,7 @@ import org.gradle.api.internal.project.ProjectInternal
import org.gradle.api.plugins.BasePlugin import org.gradle.api.plugins.BasePlugin
import org.gradle.api.publish.PublishingExtension import org.gradle.api.publish.PublishingExtension
import org.gradle.api.publish.maven.MavenPublication import org.gradle.api.publish.maven.MavenPublication
import org.gradle.api.publish.maven.internal.publication.MavenPublicationInternal
import org.gradle.language.cpp.internal.NativeVariantIdentity import org.gradle.language.cpp.internal.NativeVariantIdentity
import org.gradle.tooling.UnsupportedVersionException
import org.gradle.tooling.provider.model.ToolingModelBuilderRegistry import org.gradle.tooling.provider.model.ToolingModelBuilderRegistry
import org.gradle.util.GradleVersion import org.gradle.util.GradleVersion
import org.jetbrains.kotlin.gradle.plugin.KonanPlugin.Companion.COMPILE_ALL_TASK_NAME import org.jetbrains.kotlin.gradle.plugin.KonanPlugin.Companion.COMPILE_ALL_TASK_NAME
@@ -358,8 +356,7 @@ class KonanPlugin @Inject constructor(private val registry: ToolingModelBuilderR
if (!isPublicationEnabled) if (!isPublicationEnabled)
return@afterEvaluate return@afterEvaluate
project.pluginManager.withPlugin("maven-publish") { project.pluginManager.withPlugin("maven-publish") {
container.all { container.all { buildingConfig ->
val buildingConfig = it
val konanSoftwareComponent = buildingConfig.mainVariant val konanSoftwareComponent = buildingConfig.mainVariant
project.extensions.configure(PublishingExtension::class.java) { project.extensions.configure(PublishingExtension::class.java) {
val builtArtifact = buildingConfig.name val builtArtifact = buildingConfig.name
@@ -369,18 +366,24 @@ class KonanPlugin @Inject constructor(private val registry: ToolingModelBuilderR
groupId = project.group.toString() groupId = project.group.toString()
from(konanSoftwareComponent) from(konanSoftwareComponent)
} }
buildingConfig.pomActions.forEach {
mavenPublication.pom(it)
}
} }
project.extensions.configure(PublishingExtension::class.java) { project.extensions.configure(PublishingExtension::class.java) {
val publishing = it val publishing = it
for (v in konanSoftwareComponent.variants) { for (v in konanSoftwareComponent.variants) {
publishing.publications.create(v.name, MavenPublication::class.java) { publishing.publications.create(v.name, MavenPublication::class.java) { mavenPublication ->
val coordinates = (v as NativeVariantIdentity).coordinates val coordinates = (v as NativeVariantIdentity).coordinates
project.logger.info("variant with coordinates($coordinates) and module: ${coordinates.module}") project.logger.info("variant with coordinates($coordinates) and module: ${coordinates.module}")
it.artifactId = coordinates.module.name mavenPublication.artifactId = coordinates.module.name
it.groupId = coordinates.group mavenPublication.groupId = coordinates.group
it.version = coordinates.version mavenPublication.version = coordinates.version
it.from(v) mavenPublication.from(v)
buildingConfig.pomActions.forEach {
mavenPublication.pom(it)
}
} }
} }
} }