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