[build][version] generate KonanVersion using data from gradle.properties.

- uses konanMetaVersion for meta version field
- uses dep.Kotlin_KotlinNative_Master_KotlinNativeCheckout.build.counter as build counter
- shared/compiler/gradle plugin uses the same version.
This commit is contained in:
Vasily Levchenko
2018-03-30 12:23:47 +03:00
committed by Vasily Levchenko
parent 2ff9a52eeb
commit 07ae3144de
14 changed files with 125 additions and 40 deletions
@@ -31,6 +31,7 @@ import org.jetbrains.kotlin.config.CompilerConfiguration
import org.jetbrains.kotlin.config.Services
import org.jetbrains.kotlin.config.addKotlinSourceRoots
import org.jetbrains.kotlin.config.kotlinSourceRoots
import org.jetbrains.kotlin.konan.KonanVersion
import org.jetbrains.kotlin.konan.file.File
import org.jetbrains.kotlin.konan.target.CompilerOutputKind
import org.jetbrains.kotlin.psi.KtFile
@@ -20,7 +20,7 @@ import kotlinx.cinterop.allocArrayOf
import kotlinx.cinterop.memScoped
import llvm.*
import org.jetbrains.kotlin.backend.konan.Context
import org.jetbrains.kotlin.backend.konan.KonanVersion
import org.jetbrains.kotlin.konan.KonanVersion
import org.jetbrains.kotlin.backend.konan.irasdescriptors.FunctionDescriptor
import org.jetbrains.kotlin.builtins.KotlinBuiltIns
import org.jetbrains.kotlin.ir.SourceManager.FileEntry
+1 -1
View File
@@ -27,7 +27,7 @@ buildscript {
apply plugin: 'kotlin'
// We reuse the source code from the Project in buildSrc.
sourceSets.main.kotlin.srcDirs = ["$projectDir/../../shared"]
sourceSets.main.kotlin.srcDirs = ["$projectDir/../../shared/src/main/kotlin"]
dependencies {
compile "org.jetbrains.kotlin:kotlin-stdlib:$buildKotlinVersion"
+1 -1
View File
@@ -22,6 +22,6 @@ remoteRoot=konan_tests
testDataVersion=1226829:id
kotlinCompilerRepo=https://teamcity.jetbrains.com/guestAuth/app/rest/builds/buildType:(id:Kotlin_dev_CompilerAllPlugins),number:1.2.50-dev-515,tag:kotlin-native,pinned:true/artifacts/content/maven
kotlinVersion=1.2.50-dev-515
konanVersion=0.6.2
konanVersion=0.7
org.gradle.jvmargs='-Dfile.encoding=UTF-8'
+15 -1
View File
@@ -13,9 +13,10 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import org.jetbrains.kotlin.VersionGenerator
buildscript {
ext.rootBuildDirectory = file('../')
ext.rootBuildDirectory = file('..')
apply from: "$rootBuildDirectory/gradle/loadRootProperties.gradle"
apply from: "$rootBuildDirectory/gradle/kotlinGradlePlugin.gradle"
@@ -33,6 +34,19 @@ repositories {
}
}
task generateCompilerVersion(type: VersionGenerator){}
sourceSets {
main.kotlin {
srcDir 'src/main/kotlin'
srcDir generateCompilerVersion.versionSourceDirectory
}
}
compileKotlin{
dependsOn('generateCompilerVersion')
}
jar {
archiveName = "shared.jar"
}
+35
View File
@@ -0,0 +1,35 @@
/*
* Copyright 2010-2017 JetBrains s.r.o.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
buildscript {
println("rootDir: $rootDir")
ext.rootBuildDirectory = "$rootDir/../.."
apply from: "$rootBuildDirectory/gradle/loadRootProperties.gradle"
apply from: "$rootBuildDirectory/gradle/kotlinGradlePlugin.gradle"
}
apply plugin: 'kotlin'
repositories {
mavenCentral()
}
dependencies {
compile gradleApi()
compile localGroovy()
compile "org.jetbrains.kotlin:kotlin-stdlib:$buildKotlinVersion"
}
@@ -0,0 +1,55 @@
package org.jetbrains.kotlin
import groovy.lang.Closure
import org.gradle.api.DefaultTask
import org.gradle.api.Task
import org.gradle.api.tasks.OutputDirectory
import org.gradle.api.tasks.OutputFile
import java.io.File
open class VersionGenerator: DefaultTask() {
@OutputDirectory
val versionSourceDirectory = project.file("build/generated")
@OutputFile
val versionFile:File = project.file("${versionSourceDirectory.path}/org/jetbrains/kotlin/konan/KonanVersion.kt")
override fun configure(closure: Closure<*>): Task {
val result = super.configure(closure)
doFirst {
val content = buildString {
operator fun String.unaryPlus() = this@buildString.append(this)
val version = project.properties["konanVersion"].toString().split(".")
val major = version[0].toInt()
val minor = version[1].toInt()
val maintenance = if (version.size > 2) version[2].toInt() else 0
val build = System.getenv("env.dep.Kotlin_KotlinNative_Master_KotlinNativeCheckout.build.counter")?.let {
it.split("-")[2].toInt() //7-dev-buildcount
}?: -1
val meta = project.properties["konanMetaVersion"]?.let { "MetaVersion.${it.toString().toUpperCase()}" } ?: "MetaVersion.DEV"
+ """
|package org.jetbrains.kotlin.konan
|data class KonanVersion(val meta: MetaVersion = MetaVersion.DEV,
| val major: Int,
| val minor: Int,
| val maintenance: Int,
| val build:Int) {
| companion object {
| val CURRENT = KonanVersion($meta, $major, $minor, $maintenance, $build)
| }
| private val versionString by lazy {
| "${'$'}{meta.name} ${'$'}major.${'$'}minor.${'$'}maintenance-${'$'}build".trim()
| }
| override fun toString() = versionString
|}
""".trimMargin()
}
versionFile.printWriter().use {
it.println(content)
}
}
return result
}
}
@@ -14,7 +14,7 @@
* limitations under the License.
*/
package org.jetbrains.kotlin.backend.konan
package org.jetbrains.kotlin.konan
/**
* https://en.wikipedia.org/wiki/Software_versioning
@@ -22,15 +22,9 @@ package org.jetbrains.kotlin.backend.konan
*/
enum class MetaVersion {
DEV,
EAP,
ALPHA,
BETA,
RC
}
class KonanVersion(val meta: MetaVersion?, val major: Int, val minor: Int, val maintenance: Int, val build:Int) {
companion object {
val CURRENT = KonanVersion(MetaVersion.EAP, 0, 6, 2, 0)
}
override fun toString() = if (meta != null) "$meta $major.$minor.$maintenance.$build" else "$major.$minor.$maintenance.$build"
}
}
@@ -122,8 +122,6 @@ test {
processResources {
// We add konanVersion as a task input to avoid considering this task up-to-date when
// konanVersion is actually changed and should be updated in the plugin jar.
inputs.property("konanVersion", konanVersion)
expand('konanVersion': konanVersion)
from(file("$rootBuildDirectory/utilities/env_blacklist"))
}
@@ -37,6 +37,7 @@ import org.gradle.language.nativeplatform.internal.Names
import org.gradle.tooling.provider.model.ToolingModelBuilderRegistry
import org.jetbrains.kotlin.gradle.plugin.KonanPlugin.Companion.COMPILE_ALL_TASK_NAME
import org.jetbrains.kotlin.gradle.plugin.tasks.*
import org.jetbrains.kotlin.konan.KonanVersion
import org.jetbrains.kotlin.konan.target.HostManager
import org.jetbrains.kotlin.konan.target.KonanTarget
import org.jetbrains.kotlin.konan.target.customerDistribution
@@ -110,9 +111,6 @@ internal val Project.konanExtension: KonanExtension
internal val Project.konanCompilerDownloadTask
get() = tasks.getByName(KonanPlugin.KONAN_DOWNLOAD_TASK_NAME)
internal val Project.konanVersion
get() = getProperty(KonanPlugin.ProjectProperty.KONAN_VERSION, KonanPlugin.DEFAULT_KONAN_VERSION) as String
internal val Project.requestedTargets
get() = findProperty(KonanPlugin.ProjectProperty.KONAN_BUILD_TARGETS)?.let {
it.toString().trim().split("\\s+".toRegex())
@@ -141,7 +139,7 @@ private fun Project.getOrCreateTask(name: String): Task = with(tasks) {
}
internal fun Project.konanCompilerName(): String =
"kotlin-native-${project.simpleOsName}-${this.konanVersion}"
"kotlin-native-${project.simpleOsName}-${KonanVersion.CURRENT}"
internal fun Project.konanCompilerDownloadDir(): String =
DependencyProcessor.localKonanDir.resolve(project.konanCompilerName()).absolutePath
@@ -218,7 +216,7 @@ internal fun dumpProperties(task: Task) {
println("target : $target")
println("languageVersion : $languageVersion")
println("apiVersion : $apiVersion")
println("konanVersion : $konanVersion")
println("konanVersion : ${KonanVersion.CURRENT}")
println("konanHome : $konanHome")
println()
}
@@ -239,7 +237,7 @@ internal fun dumpProperties(task: Task) {
println("linkerOpts : $linkerOpts")
println("headers : ${headers.dump()}")
println("linkFiles : ${linkFiles.dump()}")
println("konanVersion : $konanVersion")
println("konanVersion : ${KonanVersion.CURRENT}")
println("konanHome : $konanHome")
println()
}
@@ -273,7 +271,6 @@ class KonanPlugin @Inject constructor(private val registry: ToolingModelBuilderR
enum class ProjectProperty(val propertyName: String) {
KONAN_HOME ("konan.home"),
KONAN_VERSION ("konan.version"),
KONAN_BUILD_TARGETS ("konan.build.targets"),
KONAN_JVM_ARGS ("konan.jvmArgs"),
KONAN_USE_ENVIRONMENT_VARIABLES("konan.useEnvironmentVariables"),
@@ -294,11 +291,6 @@ class KonanPlugin @Inject constructor(private val registry: ToolingModelBuilderR
internal const val KONAN_MAIN_VARIANT = "konan_main_variant"
internal const val KONAN_EXTENSION_NAME = "konan"
internal val DEFAULT_KONAN_VERSION = Properties().apply {
load(KonanPlugin::class.java.getResourceAsStream("/META-INF/gradle-plugins/konan.properties") ?:
throw RuntimeException("Cannot find a properties file"))
}.getProperty("default-konan-version") ?: throw RuntimeException("Cannot read the default compiler version")
}
private fun Project.cleanKonan() = project.tasks.withType(KonanBuildingTask::class.java).forEach {
@@ -20,6 +20,7 @@ import org.gradle.api.Project
import org.gradle.tooling.provider.model.ToolingModelBuilder
import org.jetbrains.kotlin.gradle.plugin.model.KonanArtifact
import org.jetbrains.kotlin.gradle.plugin.model.KonanModel
import org.jetbrains.kotlin.konan.KonanVersion
import org.jetbrains.kotlin.konan.util.visibleName
object KonanToolingModelBuilder : ToolingModelBuilder {
@@ -29,12 +30,11 @@ object KonanToolingModelBuilder : ToolingModelBuilder {
val artifacts = project.konanArtifactsContainer.flatten()
.toList()
.map { KonanArtifactImpl("${it.artifact.name}-${it.konanTarget.visibleName}", it.artifact.canonicalPath) }
return KonanModelImpl(project.konanVersion, artifacts)
return KonanModelImpl(artifacts)
}
}
private class KonanModelImpl(
override val konanVersion: String,
override val artifacts: List<KonanArtifact>
) : KonanModel
@@ -23,7 +23,6 @@ import java.io.Serializable
* This model is shared with the client processes such as an IDE.
*/
interface KonanModel : Serializable {
val konanVersion: String
val artifacts: List<KonanArtifact>
}
@@ -39,8 +39,6 @@ abstract class KonanBuildingTask: KonanArtifactWithLibrariesTask(), KonanBuildin
@Input
val extraOpts = mutableListOf<String>()
val konanVersion
@Input get() = project.konanVersion
val konanHome
@Input get() = project.konanHome
@@ -21,6 +21,8 @@ import org.gradle.api.GradleScriptException
import org.gradle.api.tasks.Internal
import org.gradle.api.tasks.TaskAction
import org.jetbrains.kotlin.gradle.plugin.*
import org.jetbrains.kotlin.konan.KonanVersion
import org.jetbrains.kotlin.konan.MetaVersion
import org.jetbrains.kotlin.konan.util.DependencyProcessor
import org.jetbrains.kotlin.konan.util.DependencySource
import org.jetbrains.kotlin.konan.util.visibleName
@@ -43,18 +45,15 @@ open class KonanCompilerDownloadTask : DefaultTask() {
if (!project.hasProperty(KonanPlugin.ProjectProperty.DOWNLOAD_COMPILER)) {
val konanHome = project.getProperty(KonanPlugin.ProjectProperty.KONAN_HOME)
logger.info("Use a user-defined compiler path: $konanHome")
if (project.hasProperty(KonanPlugin.ProjectProperty.KONAN_VERSION)) {
val konanVersion = project.getProperty(KonanPlugin.ProjectProperty.KONAN_VERSION)
logger.warn("${KonanPlugin.ProjectProperty.KONAN_VERSION.propertyName} " +
"(=$konanVersion) property is ignored " +
"because a user-defined compiler path is specified: $konanHome")
}
} else {
try {
val downloadUrlDirectory = buildString {
append("$BASE_DOWNLOAD_URL/")
val version = project.konanVersion
append(if (version.contains("dev")) "dev/" else "releases/")
val version = KonanVersion.CURRENT
when (version.meta) {
MetaVersion.DEV -> append("dev/")
else -> append("releases/")
}
append("$version/")
append(project.simpleOsName)
}