[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:
committed by
Vasily Levchenko
parent
2ff9a52eeb
commit
07ae3144de
@@ -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
|
||||
|
||||
+1
-1
@@ -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
|
||||
|
||||
@@ -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
@@ -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
@@ -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"
|
||||
}
|
||||
|
||||
@@ -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
|
||||
}
|
||||
}
|
||||
+3
-9
@@ -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"))
|
||||
}
|
||||
|
||||
|
||||
+4
-12
@@ -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 {
|
||||
|
||||
+2
-2
@@ -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
|
||||
|
||||
|
||||
-1
@@ -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>
|
||||
}
|
||||
|
||||
|
||||
-2
@@ -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
|
||||
|
||||
|
||||
+7
-8
@@ -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)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user