[gradle][publish] main variant is per KonanBuildingConfig

This commit is contained in:
Vasily Levchenko
2018-04-12 14:09:14 +03:00
committed by Vasily Levchenko
parent a23ca71e5c
commit b03f0bfc83
5 changed files with 17 additions and 14 deletions
@@ -39,6 +39,7 @@ abstract class KonanBuildingConfig<T: KonanBuildingTask>(private val name_: Stri
val targets: Iterable<String>)
: KonanBuildingSpec, Named, DefaultNamedDomainObjectSet<T>(type, instantiator, { it.konanTarget.visibleName }) {
internal val mainVariant = KonanSoftwareComponent(project)
override fun getName() = name_
protected val targetToTask = mutableMapOf<KonanTarget, T>()
@@ -114,7 +115,7 @@ abstract class KonanBuildingConfig<T: KonanBuildingTask>(private val name_: Stri
protected fun createTask(target: KonanTarget): T =
project.tasks.create(generateTaskName(target), type) {
val outputDescription = determineOutputPlacement(target)
it.init(outputDescription.destinationDir, outputDescription.artifactName, target)
it.init(this, outputDescription.destinationDir, outputDescription.artifactName, target)
it.group = BasePlugin.BUILD_GROUP
it.description = generateTaskDescription(it)
} ?: throw Exception("Cannot create task for target: ${target.visibleName}")
@@ -309,7 +309,6 @@ class KonanPlugin @Inject constructor(private val registry: ToolingModelBuilderR
project.tasks.create(KONAN_DOWNLOAD_TASK_NAME, KonanCompilerDownloadTask::class.java)
project.tasks.create(KONAN_GENERATE_CMAKE_TASK_NAME, KonanGenerateCMakeTask::class.java)
project.extensions.create(KONAN_EXTENSION_NAME, KonanExtension::class.java)
val mainVariant = project.extensions.create(ComponentWithVariants::class.java, KONAN_MAIN_VARIANT, KonanSoftwareComponent::class.java, project)
val container = project.extensions.create(KonanArtifactContainer::class.java, ARTIFACTS_CONTAINER_NAME, KonanArtifactContainer::class.java, project)
// Set additional project properties like konan.home, konan.build.targets etc.
@@ -353,11 +352,11 @@ class KonanPlugin @Inject constructor(private val registry: ToolingModelBuilderR
// Enable multiplatform support
project.pluginManager.apply(KotlinNativePlatformPlugin::class.java)
project.afterEvaluate {
val konanSoftwareComponent = mainVariant as KonanSoftwareComponent
project.pluginManager.withPlugin("maven-publish") {
container.all {
val buildingConfig = it
val artifactId = buildingConfig.name
val konanSoftwareComponent = buildingConfig.mainVariant
project.extensions.configure(PublishingExtension::class.java) {
val publishing = it
it.publications.create(artifactId, MavenPublication::class.java) {
@@ -366,11 +365,14 @@ class KonanPlugin @Inject constructor(private val registry: ToolingModelBuilderR
it.from(konanSoftwareComponent)
(it as MavenPublicationInternal).publishWithOriginalFileName()
}
}
project.extensions.configure(PublishingExtension::class.java) {
val publishing = it
for (v in konanSoftwareComponent.variants) {
// TODO: with gradle 4.7 don't forget to change to SoftwareComponentsWithCoordinates
val name = "${v.name}/$artifactId"
publishing.publications.create(name, MavenPublication::class.java) {
it.artifactId = "${artifactId}-${v.name}"
publishing.publications.create(v.name, MavenPublication::class.java) {
it.artifactId = v.name
it.groupId = project.group.toString()
it.version = project.version.toString()
it.from(v)
@@ -81,7 +81,7 @@ abstract class KonanArtifactTask: KonanTargetableTask(), KonanArtifactSpec {
protected abstract val artifactPrefix: String
@Internal get
internal open fun init(destinationDir: File, artifactName: String, target: KonanTarget) {
internal open fun init(config:KonanBuildingConfig<*>, destinationDir: File, artifactName: String, target: KonanTarget) {
super.init(target)
this.destinationDir = destinationDir
this.artifactName = artifactName
@@ -98,7 +98,7 @@ abstract class KonanArtifactTask: KonanTargetableTask(), KonanArtifactSpec {
project.pluginManager.withPlugin("maven-publish") {
platformConfiguration.artifacts.add(object: PublishArtifact {
override fun getName() = "${artifact.name}/${target.name}"
override fun getName() = "${artifact.name.removeSuffix("$artifactSuffix")}/${target.name}"
override fun getExtension() = if (artifactSuffix.startsWith('.')) artifactSuffix.substring(1) else artifactSuffix
override fun getType() = artifactSuffix
override fun getClassifier():String? = target.name
@@ -109,8 +109,8 @@ abstract class KonanArtifactTask: KonanTargetableTask(), KonanArtifactSpec {
val objectFactory = project.objects
val linkUsage = objectFactory.named(Usage::class.java, Usage.NATIVE_LINK)
val runtimeUsage = objectFactory.named(Usage::class.java, Usage.NATIVE_RUNTIME)
val konanSoftwareComponent = project.extensions.getByName(KonanPlugin.KONAN_MAIN_VARIANT) as KonanSoftwareComponent
konanSoftwareComponent.addVariant(NativeVariant(Names.of(target.name), linkUsage, null, linkUsage, platformConfiguration))
val konanSoftwareComponent = config.mainVariant
konanSoftwareComponent.addVariant(NativeVariant(Names.of("${artifact.name.removeSuffix("$artifactSuffix")}_${target.name}"), linkUsage, null, linkUsage, platformConfiguration))
}
}
@@ -28,9 +28,9 @@ abstract class KonanBuildingTask: KonanArtifactWithLibrariesTask(), KonanBuildin
internal abstract val toolRunner: KonanToolRunner
override fun init(destinationDir: File, artifactName: String, target: KonanTarget) {
override fun init(config: KonanBuildingConfig<*>, destinationDir: File, artifactName: String, target: KonanTarget) {
dependsOn(project.konanCompilerDownloadTask)
super.init(destinationDir, artifactName, target)
super.init(config, destinationDir, artifactName, target)
}
@Console
@@ -34,8 +34,8 @@ open class KonanInteropTask: KonanBuildingTask(), KonanInteropSpec {
@Internal override val toolRunner: KonanToolRunner = KonanInteropRunner(project)
override fun init(destinationDir: File, artifactName: String, target: KonanTarget) {
super.init(destinationDir, artifactName, target)
override fun init(config: KonanBuildingConfig<*>, destinationDir: File, artifactName: String, target: KonanTarget) {
super.init(config, destinationDir, artifactName, target)
this.defFile = project.konanDefaultDefFile(artifactName)
}