[gradle-plugin] Provide project property for compiler version overriding

This commit is contained in:
Ilya Matveev
2018-10-17 19:41:53 +07:00
committed by Ilya Matveev
parent 56f572f07f
commit 474b401dd1
7 changed files with 36 additions and 3 deletions
@@ -82,6 +82,8 @@ open class CInteropTask @Inject constructor(val settings: CInteropSettingsImpl):
val extraOpts: List<String> val extraOpts: List<String>
@Input get() = settings.extraOpts @Input get() = settings.extraOpts
val konanVersion: String
@Input get() = project.konanVersion.toString(true, true)
// Task action. // Task action.
@TaskAction @TaskAction
@@ -84,6 +84,9 @@ open class KotlinNativeCompile @Inject constructor(internal val binary: Abstract
val outputFile: File val outputFile: File
get() = outputLocationProvider.get().asFile get() = outputLocationProvider.get().asFile
val konanVersion: String
@Input get() = project.konanVersion.toString(true, true)
private val outputPathProvider: Provider<String> = project.provider { private val outputPathProvider: Provider<String> = project.provider {
with(binary) { with(binary) {
val root = outputRootName val root = outputRootName
@@ -35,6 +35,7 @@ import org.jetbrains.kotlin.gradle.plugin.konan.KonanPlugin.Companion.COMPILE_AL
import org.jetbrains.kotlin.gradle.plugin.model.KonanToolingModelBuilder import org.jetbrains.kotlin.gradle.plugin.model.KonanToolingModelBuilder
import org.jetbrains.kotlin.gradle.plugin.tasks.* import org.jetbrains.kotlin.gradle.plugin.tasks.*
import org.jetbrains.kotlin.konan.KonanVersion import org.jetbrains.kotlin.konan.KonanVersion
import org.jetbrains.kotlin.konan.parseKonanVersion
import org.jetbrains.kotlin.konan.target.HostManager import org.jetbrains.kotlin.konan.target.HostManager
import org.jetbrains.kotlin.konan.target.KonanTarget import org.jetbrains.kotlin.konan.target.KonanTarget
import org.jetbrains.kotlin.konan.target.customerDistribution import org.jetbrains.kotlin.konan.target.customerDistribution
@@ -70,6 +71,11 @@ internal val Project.konanHome: String
return project.file(getProperty(KonanPlugin.ProjectProperty.KONAN_HOME)).canonicalPath return project.file(getProperty(KonanPlugin.ProjectProperty.KONAN_HOME)).canonicalPath
} }
internal val Project.konanVersion: KonanVersion
get() = project.findProperty(KonanPlugin.ProjectProperty.KONAN_VERSION)
?.toString()?.parseKonanVersion()
?: KonanVersion.CURRENT
internal val Project.konanBuildRoot get() = buildDir.resolve("konan") internal val Project.konanBuildRoot get() = buildDir.resolve("konan")
internal val Project.konanBinBaseDir get() = konanBuildRoot.resolve("bin") internal val Project.konanBinBaseDir get() = konanBuildRoot.resolve("bin")
internal val Project.konanLibsBaseDir get() = konanBuildRoot.resolve("libs") internal val Project.konanLibsBaseDir get() = konanBuildRoot.resolve("libs")
@@ -134,7 +140,7 @@ private fun Project.getOrCreateTask(name: String): Task = with(tasks) {
} }
internal fun Project.konanCompilerName(): String = internal fun Project.konanCompilerName(): String =
"kotlin-native-${project.simpleOsName}-${KonanVersion.CURRENT}" "kotlin-native-${project.simpleOsName}-${project.konanVersion}"
internal fun Project.konanCompilerDownloadDir(): String = internal fun Project.konanCompilerDownloadDir(): String =
DependencyProcessor.localKonanDir.resolve(project.konanCompilerName()).absolutePath DependencyProcessor.localKonanDir.resolve(project.konanCompilerName()).absolutePath
@@ -266,6 +272,7 @@ class KonanPlugin @Inject constructor(private val registry: ToolingModelBuilderR
enum class ProjectProperty(val propertyName: String) { enum class ProjectProperty(val propertyName: String) {
KONAN_HOME ("konan.home"), KONAN_HOME ("konan.home"),
KONAN_VERSION ("org.jetbrains.kotlin.native.version"),
KONAN_BUILD_TARGETS ("konan.build.targets"), KONAN_BUILD_TARGETS ("konan.build.targets"),
KONAN_JVM_ARGS ("konan.jvmArgs"), KONAN_JVM_ARGS ("konan.jvmArgs"),
KONAN_USE_ENVIRONMENT_VARIABLES("konan.useEnvironmentVariables"), KONAN_USE_ENVIRONMENT_VARIABLES("konan.useEnvironmentVariables"),
@@ -44,6 +44,9 @@ abstract class KonanBuildingTask: KonanArtifactWithLibrariesTask(), KonanBuildin
val konanHome val konanHome
@Input get() = project.konanHome @Input get() = project.konanHome
val konanVersion
@Input get() = project.konanVersion.toString(true, true)
protected abstract fun buildArgs(): List<String> protected abstract fun buildArgs(): List<String>
@TaskAction @TaskAction
@@ -47,7 +47,7 @@ open class KonanCompilerDownloadTask : DefaultTask() {
try { try {
val downloadUrlDirectory = buildString { val downloadUrlDirectory = buildString {
append("$BASE_DOWNLOAD_URL/") append("$BASE_DOWNLOAD_URL/")
val version = KonanVersion.CURRENT val version = project.konanVersion
when (version.meta) { when (version.meta) {
MetaVersion.DEV -> append("dev/") MetaVersion.DEV -> append("dev/")
else -> append("releases/") else -> append("releases/")
@@ -22,6 +22,7 @@ import org.jetbrains.kotlin.gradle.plugin.experimental.internal.AbstractKotlinNa
import org.jetbrains.kotlin.gradle.plugin.konan.konanArtifactsContainer import org.jetbrains.kotlin.gradle.plugin.konan.konanArtifactsContainer
import org.jetbrains.kotlin.gradle.plugin.konan.konanExtension import org.jetbrains.kotlin.gradle.plugin.konan.konanExtension
import org.jetbrains.kotlin.gradle.plugin.konan.konanHome import org.jetbrains.kotlin.gradle.plugin.konan.konanHome
import org.jetbrains.kotlin.gradle.plugin.konan.konanVersion
import org.jetbrains.kotlin.konan.KonanVersion import org.jetbrains.kotlin.konan.KonanVersion
import org.jetbrains.kotlin.konan.target.CompilerOutputKind import org.jetbrains.kotlin.konan.target.CompilerOutputKind
import java.io.File import java.io.File
@@ -36,7 +37,7 @@ object KonanToolingModelBuilder : ToolingModelBuilder {
return KonanModelImpl( return KonanModelImpl(
artifacts, artifacts,
project.file(project.konanHome), project.file(project.konanHome),
KonanVersion.CURRENT, project.konanVersion,
// TODO: Provide defaults for these versions. // TODO: Provide defaults for these versions.
project.konanExtension.languageVersion, project.konanExtension.languageVersion,
project.konanExtension.apiVersion project.konanExtension.apiVersion
@@ -1005,4 +1005,21 @@ class ExperimentalPluginTests {
assertFileExists(it) assertFileExists(it)
} }
} }
@Test
fun `Plugin should allow overriding Kotlin-Native version`() {
val project = KonanProject.createEmpty(projectDirectory).apply {
buildFile.writeText("plugins { id 'kotlin-native' }")
propertiesFile.writeText("")
}
val result = project.createRunner().withArguments(
"checkKonanCompiler",
"-Porg.jetbrains.kotlin.native.version=0.9.3",
"-i"
).build()
assertTrue(result.output.contains(
"Downloading Kotlin/Native compiler from.*kotlin-native-${HostManager.simpleOsName()}-0.9.3".toRegex())
)
}
} }