Add a project property for Kotlin/Native version overriding

This commit is contained in:
Ilya Matveev
2018-09-13 12:29:21 +03:00
committed by Ilya Matveev
parent 80bec0898f
commit ccd4bc1bff
5 changed files with 28 additions and 12 deletions
@@ -16,7 +16,18 @@ interface KonanVersion : Serializable {
fun toString(showMeta: Boolean, showBuild: Boolean): String
companion object
companion object {
// major.minor.patch-meta-build where patch, meta and build are optional.
private val versionPattern = "(\\d+)\\.(\\d+)(?:\\.(\\d+))?(?:-(\\p{Alpha}\\p{Alnum}*))?(?:-(\\d+))?".toRegex()
fun fromString(version: String) : KonanVersion {
val (major, minor, maintenance, metaString, build) =
versionPattern.matchEntire(version)?.destructured ?:
throw IllegalArgumentException("Cannot parse Kotlin/Native version: $version")
val meta = metaString.ifEmpty { "release" }.let { MetaVersion.valueOf(it.toUpperCase()) }
return KonanVersionImpl(meta, major.toInt(), minor.toInt(), maintenance.toIntOrNull() ?: 0, build.toIntOrNull() ?: -1)
}
}
}
data class KonanVersionImpl(
@@ -20,6 +20,7 @@ import org.gradle.api.Named
import org.gradle.api.Project
import org.gradle.api.file.FileCollection
import org.jetbrains.kotlin.gradle.utils.NativeCompilerDownloader
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.util.DependencyDirectories
@@ -29,6 +30,7 @@ import org.jetbrains.kotlin.konan.util.DependencyDirectories
internal enum class KotlinNativeProjectProperty(val propertyName: String) {
KONAN_HOME_OVERRIDE ("org.jetbrains.kotlin.native.home"),
KONAN_JVM_ARGS ("org.jetbrains.kotlin.native.jvmArgs"),
KONAN_VERSION ("org.jetbrains.kotlin.native.version"),
KONAN_USE_ENVIRONMENT_VARIABLES("org.jetbrains.kotlin.native.useEnvironmentVariables")
}
@@ -49,6 +51,11 @@ internal val Project.konanHome: String
file(it).absolutePath
} ?: NativeCompilerDownloader(project).compilerDirectory.absolutePath
internal val Project.konanVersion: KonanVersion
get() = project.findProperty(KotlinNativeProjectProperty.KONAN_VERSION)?.let {
KonanVersion.fromString(it.toString())
} ?: NativeCompilerDownloader.DEFAULT_KONAN_VERSION
internal interface KonanToolRunner: Named {
val mainClass: String
val classpath: FileCollection
@@ -11,10 +11,7 @@ import org.gradle.api.internal.file.FileResolver
import org.gradle.api.plugins.JavaPlugin
import org.gradle.internal.cleanup.BuildOutputCleanupRegistry
import org.gradle.internal.reflect.Instantiator
import org.jetbrains.kotlin.compilerRunner.KotlinNativeProjectProperty
import org.jetbrains.kotlin.compilerRunner.hasProperty
import org.jetbrains.kotlin.compilerRunner.konanHome
import org.jetbrains.kotlin.compilerRunner.setProperty
import org.jetbrains.kotlin.compilerRunner.*
import org.jetbrains.kotlin.gradle.dsl.KotlinCompile
import org.jetbrains.kotlin.gradle.dsl.kotlinExtension
import org.jetbrains.kotlin.gradle.plugin.*
@@ -154,7 +154,7 @@ open class KotlinNativeCompile : AbstractCompile() {
// endregion.
val kotlinNativeVersion: String
@Input get() = NativeCompilerDownloader(project).compilerVersion.toString()
@Input get() = project.konanVersion.toString()
// We manually register this property as output file or directory depending on output kind.
@Internal
@@ -10,7 +10,7 @@ import org.gradle.api.artifacts.repositories.ArtifactRepository
import org.gradle.api.artifacts.repositories.IvyPatternRepositoryLayout
import org.gradle.api.file.FileTree
import org.gradle.api.logging.Logger
import org.jetbrains.kotlin.compilerRunner.KonanCompilerRunner
import org.jetbrains.kotlin.compilerRunner.*
import org.jetbrains.kotlin.konan.KonanVersion
import org.jetbrains.kotlin.konan.KonanVersionImpl
import org.jetbrains.kotlin.konan.MetaVersion
@@ -18,9 +18,13 @@ import org.jetbrains.kotlin.konan.target.HostManager
import org.jetbrains.kotlin.konan.util.DependencyDirectories
import java.io.File
class NativeCompilerDownloader(val project: Project) {
class NativeCompilerDownloader(
val project: Project,
val compilerVersion: KonanVersion = project.konanVersion
) {
internal companion object {
val DEFAULT_KONAN_VERSION = KonanVersionImpl(MetaVersion.RELEASE, 0, 9, 0)
const val BASE_DOWNLOAD_URL = "https://download.jetbrains.com/kotlin/native/builds"
}
@@ -88,7 +92,7 @@ class NativeCompilerDownloader(val project: Project) {
val archive = configuration.files.single()
logger.info("Use Kotlin/Native compiler archive: ${archive.absolutePath}")
logger.lifecycle("Unpacking Kotlin/Native compiler (version $versionString)...")
logger.lifecycle("Unpack Kotlin/Native compiler (version $versionString)...")
project.copy {
it.from(archiveFileTree(archive))
it.into(DependencyDirectories.localKonanDir)
@@ -100,9 +104,6 @@ class NativeCompilerDownloader(val project: Project) {
val compilerDirectory: File
get() = DependencyDirectories.localKonanDir.resolve("kotlin-native-$simpleOsName-$compilerVersion")
// TODO: Support project property for Kotlin/Native compiler version
val compilerVersion: KonanVersion = KonanVersionImpl(MetaVersion.RELEASE, 0, 9, 0)
fun downloadIfNeeded() {
if (KonanCompilerRunner(project).classpath.isEmpty) {
downloadAndExtract()