From 474b401dd1336ce1e6c848c0deb8ec97f896d3c8 Mon Sep 17 00:00:00 2001 From: Ilya Matveev Date: Wed, 17 Oct 2018 19:41:53 +0700 Subject: [PATCH] [gradle-plugin] Provide project property for compiler version overriding --- .../plugin/experimental/tasks/CInteropTask.kt | 2 ++ .../experimental/tasks/KotlinNativeCompile.kt | 3 +++ .../kotlin/gradle/plugin/konan/KonanPlugin.kt | 9 ++++++++- .../plugin/konan/tasks/KonanBuildingTask.kt | 3 +++ .../konan/tasks/KonanCompilerDownloadTask.kt | 2 +- .../gradle/plugin/model/KonanModelImpl.kt | 3 ++- .../src/test/kotlin/ExperimentalPluginTests.kt | 17 +++++++++++++++++ 7 files changed, 36 insertions(+), 3 deletions(-) diff --git a/tools/kotlin-native-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/experimental/tasks/CInteropTask.kt b/tools/kotlin-native-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/experimental/tasks/CInteropTask.kt index 01384720bb2..987eaa214ef 100644 --- a/tools/kotlin-native-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/experimental/tasks/CInteropTask.kt +++ b/tools/kotlin-native-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/experimental/tasks/CInteropTask.kt @@ -82,6 +82,8 @@ open class CInteropTask @Inject constructor(val settings: CInteropSettingsImpl): val extraOpts: List @Input get() = settings.extraOpts + val konanVersion: String + @Input get() = project.konanVersion.toString(true, true) // Task action. @TaskAction diff --git a/tools/kotlin-native-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/experimental/tasks/KotlinNativeCompile.kt b/tools/kotlin-native-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/experimental/tasks/KotlinNativeCompile.kt index 83c87b0b208..d8d1b4ec723 100644 --- a/tools/kotlin-native-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/experimental/tasks/KotlinNativeCompile.kt +++ b/tools/kotlin-native-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/experimental/tasks/KotlinNativeCompile.kt @@ -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 = project.provider { with(binary) { val root = outputRootName diff --git a/tools/kotlin-native-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/konan/KonanPlugin.kt b/tools/kotlin-native-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/konan/KonanPlugin.kt index bd580cb9c2c..3c2ed944be4 100644 --- a/tools/kotlin-native-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/konan/KonanPlugin.kt +++ b/tools/kotlin-native-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/konan/KonanPlugin.kt @@ -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"), diff --git a/tools/kotlin-native-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/konan/tasks/KonanBuildingTask.kt b/tools/kotlin-native-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/konan/tasks/KonanBuildingTask.kt index 249590ad0d1..e999eeb715b 100644 --- a/tools/kotlin-native-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/konan/tasks/KonanBuildingTask.kt +++ b/tools/kotlin-native-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/konan/tasks/KonanBuildingTask.kt @@ -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 @TaskAction diff --git a/tools/kotlin-native-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/konan/tasks/KonanCompilerDownloadTask.kt b/tools/kotlin-native-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/konan/tasks/KonanCompilerDownloadTask.kt index c51cbdd9e84..d8694ddb4bd 100644 --- a/tools/kotlin-native-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/konan/tasks/KonanCompilerDownloadTask.kt +++ b/tools/kotlin-native-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/konan/tasks/KonanCompilerDownloadTask.kt @@ -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/") diff --git a/tools/kotlin-native-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/model/KonanModelImpl.kt b/tools/kotlin-native-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/model/KonanModelImpl.kt index c102f289a40..1e7a7e544e4 100644 --- a/tools/kotlin-native-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/model/KonanModelImpl.kt +++ b/tools/kotlin-native-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/model/KonanModelImpl.kt @@ -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 diff --git a/tools/kotlin-native-gradle-plugin/src/test/kotlin/ExperimentalPluginTests.kt b/tools/kotlin-native-gradle-plugin/src/test/kotlin/ExperimentalPluginTests.kt index 02cee53da7b..636f000f7f1 100644 --- a/tools/kotlin-native-gradle-plugin/src/test/kotlin/ExperimentalPluginTests.kt +++ b/tools/kotlin-native-gradle-plugin/src/test/kotlin/ExperimentalPluginTests.kt @@ -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()) + ) + } }