153 lines
6.3 KiB
Kotlin
153 lines
6.3 KiB
Kotlin
/*
|
|
* Copyright 2010-2019 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
|
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
|
*/
|
|
@file:Suppress("unused", "MemberVisibilityCanBePrivate")
|
|
|
|
import org.gradle.api.Project
|
|
import org.gradle.api.initialization.Settings
|
|
import org.gradle.api.internal.DynamicObjectAware
|
|
import java.io.File
|
|
import java.util.*
|
|
|
|
interface PropertiesProvider {
|
|
val rootProjectDir: File
|
|
fun getProperty(key: String): Any?
|
|
fun getSystemProperty(key: String): String?
|
|
}
|
|
|
|
class KotlinBuildProperties(
|
|
private val propertiesProvider: PropertiesProvider
|
|
) {
|
|
private val localProperties: Properties = Properties()
|
|
private val rootProperties: Properties = Properties()
|
|
|
|
init {
|
|
loadPropertyFile("local.properties", localProperties)
|
|
loadPropertyFile("gradle.properties", rootProperties)
|
|
}
|
|
|
|
private fun loadPropertyFile(fileName: String, propertiesDestination: Properties) {
|
|
val propertiesFile = propertiesProvider.rootProjectDir.resolve(fileName)
|
|
if (propertiesFile.isFile) {
|
|
propertiesFile.reader().use(propertiesDestination::load)
|
|
}
|
|
}
|
|
|
|
fun getOrNull(key: String): Any? =
|
|
localProperties.getProperty(key) ?: propertiesProvider.getProperty(key) ?: rootProperties.getProperty(key)
|
|
|
|
fun getBoolean(key: String, default: Boolean = false): Boolean {
|
|
val value = this.getOrNull(key)?.toString() ?: return default
|
|
if (value.isEmpty()) return true // has property without value means 'true'
|
|
return value.trim().toBoolean()
|
|
}
|
|
|
|
val isJpsBuildEnabled: Boolean = getBoolean("jpsBuild")
|
|
|
|
val isInIdeaSync: Boolean = propertiesProvider.getSystemProperty("idea.sync.active")?.toBoolean() == true
|
|
|
|
val isInJpsBuildIdeaSync: Boolean
|
|
get() = isJpsBuildEnabled && isInIdeaSync
|
|
|
|
private val kotlinUltimateExists: Boolean = propertiesProvider.rootProjectDir.resolve("kotlin-ultimate").exists()
|
|
|
|
val isTeamcityBuild: Boolean = getBoolean("teamcity") || System.getenv("TEAMCITY_VERSION") != null
|
|
|
|
val intellijUltimateEnabled: Boolean = getBoolean("intellijUltimateEnabled", isTeamcityBuild) ||
|
|
getBoolean("kotlin.build.dependencies.iu.enabled", isTeamcityBuild)
|
|
|
|
val includeCidrPlugins: Boolean = kotlinUltimateExists && getBoolean("cidrPluginsEnabled")
|
|
|
|
val includeUltimate: Boolean = kotlinUltimateExists && (isTeamcityBuild || intellijUltimateEnabled)
|
|
|
|
val buildCacheUrl: String? = getOrNull("kotlin.build.cache.url") as String?
|
|
|
|
val pushToBuildCache: Boolean = getBoolean("kotlin.build.cache.push", isTeamcityBuild)
|
|
|
|
val localBuildCacheEnabled: Boolean = getBoolean("kotlin.build.cache.local.enabled", !isTeamcityBuild)
|
|
|
|
val localBuildCacheDirectory: String? = getOrNull("kotlin.build.cache.local.directory") as String?
|
|
|
|
val buildScanServer: String? = getOrNull("kotlin.build.scan.url") as String?
|
|
|
|
val buildCacheUser: String? = getOrNull("kotlin.build.cache.user") as String?
|
|
|
|
val buildCachePassword: String? = getOrNull("kotlin.build.cache.password") as String?
|
|
|
|
val kotlinBootstrapVersion: String? = getOrNull("bootstrap.kotlin.default.version") as String?
|
|
|
|
val defaultSnapshotVersion: String? = getOrNull("defaultSnapshotVersion") as String?
|
|
|
|
val customBootstrapVersion: String? = getOrNull("bootstrap.kotlin.version") as String?
|
|
|
|
val customBootstrapRepo: String? = getOrNull("bootstrap.kotlin.repo") as String?
|
|
|
|
val localBootstrap: Boolean = getBoolean("bootstrap.local")
|
|
|
|
val localBootstrapVersion: String? = getOrNull("bootstrap.local.version") as String?
|
|
|
|
val localBootstrapPath: String? = getOrNull("bootstrap.local.path") as String?
|
|
|
|
val useIR: Boolean = getBoolean("kotlin.build.useIR")
|
|
|
|
val useIRForLibraries: Boolean = getBoolean("kotlin.build.useIRForLibraries")
|
|
|
|
val useFir: Boolean = getBoolean("kotlin.build.useFir")
|
|
|
|
val useFirForLibraries: Boolean = getBoolean("kotlin.build.useFirForLibraries")
|
|
|
|
val useFirIdeaPlugin: Boolean = getBoolean("idea.fir.plugin")
|
|
|
|
val teamCityBootstrapVersion: String? = getOrNull("bootstrap.teamcity.kotlin.version") as String?
|
|
|
|
val teamCityBootstrapBuildNumber: String? = getOrNull("bootstrap.teamcity.build.number") as String?
|
|
|
|
val teamCityBootstrapProject: String? = getOrNull("bootstrap.teamcity.project") as String?
|
|
|
|
val teamCityBootstrapUrl: String? = getOrNull("bootstrap.teamcity.url") as String?
|
|
|
|
val rootProjectDir: File = propertiesProvider.rootProjectDir
|
|
|
|
val isKotlinNativeEnabled: Boolean = getBoolean("kotlin.native.enabled")
|
|
|
|
val pathToKotlinModularizedTestData: String? = getOrNull("kotlin.fir.modularized.testdata") as String?
|
|
}
|
|
|
|
private const val extensionName = "kotlinBuildProperties"
|
|
|
|
class ProjectProperties(val project: Project) : PropertiesProvider {
|
|
override val rootProjectDir: File
|
|
get() = project.rootProject.projectDir.let { if (it.name == "buildSrc") it.parentFile else it }
|
|
|
|
override fun getProperty(key: String): Any? = project.findProperty(key)
|
|
|
|
override fun getSystemProperty(key: String) = project.providers.systemProperty(key).forUseAtConfigurationTime().orNull
|
|
}
|
|
|
|
val Project.kotlinBuildProperties: KotlinBuildProperties
|
|
get() = rootProject.extensions.findByName(extensionName) as KotlinBuildProperties?
|
|
?: KotlinBuildProperties(ProjectProperties(rootProject)).also {
|
|
rootProject.extensions.add(extensionName, it)
|
|
}
|
|
|
|
class SettingsProperties(val settings: Settings) : PropertiesProvider {
|
|
override val rootProjectDir: File
|
|
get() = settings.rootDir.let { if (it.name == "buildSrc") it.parentFile else it }
|
|
|
|
override fun getProperty(key: String): Any? {
|
|
val obj = (settings as DynamicObjectAware).asDynamicObject
|
|
return if (obj.hasProperty(key)) obj.getProperty(key) else null
|
|
}
|
|
|
|
override fun getSystemProperty(key: String) = settings.providers.systemProperty(key).forUseAtConfigurationTime().orNull
|
|
}
|
|
|
|
fun getKotlinBuildPropertiesForSettings(settings: Any) = (settings as Settings).kotlinBuildProperties
|
|
|
|
val Settings.kotlinBuildProperties: KotlinBuildProperties
|
|
get() = extensions.findByName(extensionName) as KotlinBuildProperties?
|
|
?: KotlinBuildProperties(SettingsProperties(this)).also {
|
|
extensions.add(extensionName, it)
|
|
}
|