[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>
@Input get() = settings.extraOpts
val konanVersion: String
@Input get() = project.konanVersion.toString(true, true)
// Task action.
@TaskAction
@@ -84,6 +84,9 @@ open class KotlinNativeCompile @Inject constructor(internal val binary: Abstract
val outputFile: File
get() = outputLocationProvider.get().asFile
val konanVersion: String
@Input get() = project.konanVersion.toString(true, true)
private val outputPathProvider: Provider<String> = project.provider {
with(binary) {
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.tasks.*
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.KonanTarget
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
}
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.konanBinBaseDir get() = konanBuildRoot.resolve("bin")
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 =
"kotlin-native-${project.simpleOsName}-${KonanVersion.CURRENT}"
"kotlin-native-${project.simpleOsName}-${project.konanVersion}"
internal fun Project.konanCompilerDownloadDir(): String =
DependencyProcessor.localKonanDir.resolve(project.konanCompilerName()).absolutePath
@@ -266,6 +272,7 @@ class KonanPlugin @Inject constructor(private val registry: ToolingModelBuilderR
enum class ProjectProperty(val propertyName: String) {
KONAN_HOME ("konan.home"),
KONAN_VERSION ("org.jetbrains.kotlin.native.version"),
KONAN_BUILD_TARGETS ("konan.build.targets"),
KONAN_JVM_ARGS ("konan.jvmArgs"),
KONAN_USE_ENVIRONMENT_VARIABLES("konan.useEnvironmentVariables"),
@@ -44,6 +44,9 @@ abstract class KonanBuildingTask: KonanArtifactWithLibrariesTask(), KonanBuildin
val konanHome
@Input get() = project.konanHome
val konanVersion
@Input get() = project.konanVersion.toString(true, true)
protected abstract fun buildArgs(): List<String>
@TaskAction
@@ -47,7 +47,7 @@ open class KonanCompilerDownloadTask : DefaultTask() {
try {
val downloadUrlDirectory = buildString {
append("$BASE_DOWNLOAD_URL/")
val version = KonanVersion.CURRENT
val version = project.konanVersion
when (version.meta) {
MetaVersion.DEV -> append("dev/")
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.konanExtension
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.target.CompilerOutputKind
import java.io.File
@@ -36,7 +37,7 @@ object KonanToolingModelBuilder : ToolingModelBuilder {
return KonanModelImpl(
artifacts,
project.file(project.konanHome),
KonanVersion.CURRENT,
project.konanVersion,
// TODO: Provide defaults for these versions.
project.konanExtension.languageVersion,
project.konanExtension.apiVersion
@@ -1005,4 +1005,21 @@ class ExperimentalPluginTests {
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())
)
}
}