[gradle-plugin] Rename konan.home -> org.jetbrains.kotlin.native.home

This commit is contained in:
Ilya Matveev
2018-10-17 20:22:01 +07:00
committed by Ilya Matveev
parent 474b401dd1
commit e365fb8f40
5 changed files with 46 additions and 16 deletions
@@ -44,10 +44,7 @@ import org.jetbrains.kotlin.gradle.plugin.experimental.KotlinNativeTestComponent
import org.jetbrains.kotlin.gradle.plugin.experimental.internal.*
import org.jetbrains.kotlin.gradle.plugin.experimental.tasks.CInteropTask
import org.jetbrains.kotlin.gradle.plugin.experimental.tasks.KotlinNativeCompile
import org.jetbrains.kotlin.gradle.plugin.konan.KonanPlugin
import org.jetbrains.kotlin.gradle.plugin.konan.hasProperty
import org.jetbrains.kotlin.gradle.plugin.konan.konanCompilerDownloadDir
import org.jetbrains.kotlin.gradle.plugin.konan.setProperty
import org.jetbrains.kotlin.gradle.plugin.konan.*
import org.jetbrains.kotlin.gradle.plugin.loadKotlinVersionFromResource
import org.jetbrains.kotlin.gradle.plugin.tasks.KonanCompilerDownloadTask
import org.jetbrains.kotlin.konan.target.CompilerOutputKind
@@ -288,6 +285,7 @@ class KotlinNativeBasePlugin: Plugin<ProjectInternal> {
private fun ProjectInternal.addCompilerDownloadingTask(): KonanCompilerDownloadTask {
val result = tasks.create(KonanPlugin.KONAN_DOWNLOAD_TASK_NAME, KonanCompilerDownloadTask::class.java)
project.warnAboutDeprecatedProperty(KonanPlugin.ProjectProperty.KONAN_HOME)
if (!hasProperty(KonanPlugin.ProjectProperty.KONAN_HOME)) {
setProperty(KonanPlugin.ProjectProperty.KONAN_HOME, project.konanCompilerDownloadDir())
setProperty(KonanPlugin.ProjectProperty.DOWNLOAD_COMPILER, true)
@@ -45,14 +45,30 @@ import javax.inject.Inject
/**
* We use the following properties:
* konan.home - directory where compiler is located (aka dist in konan project output).
* konan.version - a konan compiler version for downloading.
* konan.build.targets - list of targets to build (by default all the declared targets are built).
* konan.jvmArgs - additional args to be passed to a JVM executing the compiler/cinterop tool.
* org.jetbrains.kotlin.native.home - directory where compiler is located (aka dist in konan project output).
* org.jetbrains.kotlin.native.version - a konan compiler version for downloading.
* konan.build.targets - list of targets to build (by default all the declared targets are built).
* konan.jvmArgs - additional args to be passed to a JVM executing the compiler/cinterop tool.
*/
internal fun Project.hasProperty(property: KonanPlugin.ProjectProperty) = hasProperty(property.propertyName)
internal fun Project.findProperty(property: KonanPlugin.ProjectProperty): Any? = findProperty(property.propertyName)
internal fun Project.warnAboutDeprecatedProperty(property: KonanPlugin.ProjectProperty) =
property.deprecatedPropertyName?.let { deprecated ->
if (project.hasProperty(deprecated)) {
logger.warn("Project property '$deprecated' is deprecated. Use '${property.propertyName}' instead.")
}
}
internal fun Project.hasProperty(property: KonanPlugin.ProjectProperty) = with(property) {
when {
hasProperty(propertyName) -> true
deprecatedPropertyName != null && hasProperty(deprecatedPropertyName) -> true
else -> false
}
}
internal fun Project.findProperty(property: KonanPlugin.ProjectProperty): Any? = with(property) {
return findProperty(propertyName) ?: deprecatedPropertyName?.let { findProperty(it) }
}
internal fun Project.getProperty(property: KonanPlugin.ProjectProperty) = findProperty(property)
?: throw IllegalArgumentException("No such property in the project: ${property.propertyName}")
@@ -270,8 +286,8 @@ open class KonanSoftwareComponent(val project: ProjectInternal?): SoftwareCompon
class KonanPlugin @Inject constructor(private val registry: ToolingModelBuilderRegistry)
: Plugin<ProjectInternal> {
enum class ProjectProperty(val propertyName: String) {
KONAN_HOME ("konan.home"),
enum class ProjectProperty(val propertyName: String, val deprecatedPropertyName: String? = null) {
KONAN_HOME ("org.jetbrains.kotlin.native.home", "konan.home"),
KONAN_VERSION ("org.jetbrains.kotlin.native.version"),
KONAN_BUILD_TARGETS ("konan.build.targets"),
KONAN_JVM_ARGS ("konan.jvmArgs"),
@@ -328,6 +344,8 @@ class KonanPlugin @Inject constructor(private val registry: ToolingModelBuilderR
project.logger.warn("feature GRADLE_METADATA is not enabled: publication is disabled")
}
project.warnAboutDeprecatedProperty(ProjectProperty.KONAN_HOME)
// Set additional project properties like konan.home, konan.build.targets etc.
if (!project.hasProperty(ProjectProperty.KONAN_HOME)) {
project.setProperty(ProjectProperty.KONAN_HOME, project.konanCompilerDownloadDir())
@@ -214,7 +214,7 @@ class KonanProject {
/** Generates gradle.properties file with the konan.home and konan.jvmArgs properties set. */
File generatePropertiesFile(String konanHome, String konanJvmArgs = System.getProperty("konan.jvmArgs") ?: "") {
propertiesFile = createFile(projectPath, "gradle.properties", """\
konan.home=$konanHome
org.jetbrains.kotlin.native.home=$konanHome
${!konanJvmArgs.isEmpty() ? "konan.jvmArgs=$konanJvmArgs\n" : ""}
""".stripIndent())
return propertiesFile
@@ -1019,7 +1019,21 @@ class ExperimentalPluginTests {
"-i"
).build()
assertTrue(result.output.contains(
"Downloading Kotlin/Native compiler from.*kotlin-native-${HostManager.simpleOsName()}-0.9.3".toRegex())
)
"Downloading Kotlin/Native compiler from.*kotlin-native-${HostManager.simpleOsName()}-0.9.3".toRegex()
))
}
@Test
fun `Plugin should show warning if deprecated properties are used`() {
val project = KonanProject.createEmpty(projectDirectory).apply {
buildFile.writeText("plugins { id 'kotlin-native' }")
val properties = propertiesFile.readText().replace("org.jetbrains.kotlin.native.home", "konan.home")
propertiesFile.writeText(properties)
}
val result = project.createRunner().withArguments("tasks").build()
assertTrue(result.output.contains(
"Project property 'konan.home' is deprecated. Use 'org.jetbrains.kotlin.native.home' instead."
))
}
}
@@ -153,7 +153,7 @@ open class ToolingModelTests {
dependsOn('compileKonanBaz')
doLast {
def model = KonanToolingModelBuilder.INSTANCE.buildAll("KonanModel", project)
assertEquals(model.konanHome, file(project.getProperty('konan.home')))
assertEquals(model.konanHome, file(project.getProperty('org.jetbrains.kotlin.native.home')))
assertEquals(model.konanVersion.toString(), "$konanVersion")
assertEquals(model.languageVersion, "1.2")