xref: /aosp_15_r20/external/kotlinx.atomicfu/buildSrc/src/main/kotlin/KotlinConfiguration.kt (revision 68017707106cb9da9fed635c150bc497c09c160f)
1*68017707SAndroid Build Coastguard Worker @file:JvmName("KotlinConfiguration")
2*68017707SAndroid Build Coastguard Worker 
3*68017707SAndroid Build Coastguard Worker import org.gradle.api.Project
4*68017707SAndroid Build Coastguard Worker import org.gradle.api.artifacts.dsl.RepositoryHandler
5*68017707SAndroid Build Coastguard Worker import java.net.URI
6*68017707SAndroid Build Coastguard Worker import java.util.logging.Logger
7*68017707SAndroid Build Coastguard Worker 
8*68017707SAndroid Build Coastguard Worker /*
9*68017707SAndroid Build Coastguard Worker  * Functions in this file are responsible for configuring atomicfu build
10*68017707SAndroid Build Coastguard Worker  * against a custom development version of Kotlin compiler.
11*68017707SAndroid Build Coastguard Worker  * Such configuration is used in Kotlin aggregate builds and builds of Kotlin user projects
12*68017707SAndroid Build Coastguard Worker  * in order to check whether not-yet-released changes are compatible with our libraries
13*68017707SAndroid Build Coastguard Worker  * (aka "integration testing that substitutes lack of unit testing").
14*68017707SAndroid Build Coastguard Worker  */
15*68017707SAndroid Build Coastguard Worker 
16*68017707SAndroid Build Coastguard Worker private val LOGGER: Logger = Logger.getLogger("Kotlin settings logger")
17*68017707SAndroid Build Coastguard Worker 
18*68017707SAndroid Build Coastguard Worker /**
19*68017707SAndroid Build Coastguard Worker  * Should be used for running against a non-released Kotlin compiler on a system test level.
20*68017707SAndroid Build Coastguard Worker  *
21*68017707SAndroid Build Coastguard Worker  * @return a custom repository with development builds of the Kotlin compiler taken from:
22*68017707SAndroid Build Coastguard Worker  *
23*68017707SAndroid Build Coastguard Worker  * 1. the Kotlin community project Gradle plugin,
24*68017707SAndroid Build Coastguard Worker  * 2. or `kotlin_repo_url` Gradle property (from command line or from `gradle.properties`),
25*68017707SAndroid Build Coastguard Worker  *
26*68017707SAndroid Build Coastguard Worker  * or null otherwise
27*68017707SAndroid Build Coastguard Worker  */
getCustomKotlinRepositoryURLnull28*68017707SAndroid Build Coastguard Worker fun getCustomKotlinRepositoryURL(project: Project): String? {
29*68017707SAndroid Build Coastguard Worker     val communityPluginKotlinRepoURL = project.findProperty("community.project.kotlin.repo") as? String
30*68017707SAndroid Build Coastguard Worker     val gradlePropertyKotlinRepoURL = project.findProperty("kotlin_repo_url") as? String
31*68017707SAndroid Build Coastguard Worker     val kotlinRepoURL = when {
32*68017707SAndroid Build Coastguard Worker         communityPluginKotlinRepoURL != null -> communityPluginKotlinRepoURL
33*68017707SAndroid Build Coastguard Worker         gradlePropertyKotlinRepoURL != null -> gradlePropertyKotlinRepoURL
34*68017707SAndroid Build Coastguard Worker         else -> return null
35*68017707SAndroid Build Coastguard Worker     }
36*68017707SAndroid Build Coastguard Worker     LOGGER.info("A custom Kotlin repository $kotlinRepoURL was found for project ${project.name}")
37*68017707SAndroid Build Coastguard Worker     return kotlinRepoURL
38*68017707SAndroid Build Coastguard Worker }
39*68017707SAndroid Build Coastguard Worker 
40*68017707SAndroid Build Coastguard Worker /**
41*68017707SAndroid Build Coastguard Worker  * Should be used for running against a non-released Kotlin compiler on a system test level.
42*68017707SAndroid Build Coastguard Worker  *
43*68017707SAndroid Build Coastguard Worker  * Adds a custom repository with development builds of the Kotlin compiler to [repositoryHandler]
44*68017707SAndroid Build Coastguard Worker  * if the URL is provided (see [getCustomKotlinRepositoryURL]).
45*68017707SAndroid Build Coastguard Worker  */
addCustomKotlinRepositoryIfEnablednull46*68017707SAndroid Build Coastguard Worker fun addCustomKotlinRepositoryIfEnabled(repositoryHandler: RepositoryHandler, project: Project) {
47*68017707SAndroid Build Coastguard Worker     val kotlinRepoURL = getCustomKotlinRepositoryURL(project) ?: return
48*68017707SAndroid Build Coastguard Worker     repositoryHandler.maven { url = URI.create(kotlinRepoURL) }
49*68017707SAndroid Build Coastguard Worker 
50*68017707SAndroid Build Coastguard Worker }
51*68017707SAndroid Build Coastguard Worker 
52*68017707SAndroid Build Coastguard Worker /**
53*68017707SAndroid Build Coastguard Worker  * Should be used for running against a non-released Kotlin compiler on a system test level.
54*68017707SAndroid Build Coastguard Worker  *
55*68017707SAndroid Build Coastguard Worker  * @return a Kotlin version taken from the Kotlin community project Gradle plugin,
56*68017707SAndroid Build Coastguard Worker  *         or null otherwise
57*68017707SAndroid Build Coastguard Worker  */
getOverridingKotlinVersionnull58*68017707SAndroid Build Coastguard Worker fun getOverridingKotlinVersion(project: Project): String? {
59*68017707SAndroid Build Coastguard Worker     val communityPluginKotlinVersion = project.findProperty("community.project.kotlin.version") as? String
60*68017707SAndroid Build Coastguard Worker     // add any other ways of overriding the Kotlin version here
61*68017707SAndroid Build Coastguard Worker     val kotlinVersion = when {
62*68017707SAndroid Build Coastguard Worker         communityPluginKotlinVersion != null -> communityPluginKotlinVersion
63*68017707SAndroid Build Coastguard Worker         // add any other ways of overriding the Kotlin version here
64*68017707SAndroid Build Coastguard Worker         else -> return null
65*68017707SAndroid Build Coastguard Worker     }
66*68017707SAndroid Build Coastguard Worker     LOGGER.info("An overriding Kotlin version of $kotlinVersion was found for project ${project.name}")
67*68017707SAndroid Build Coastguard Worker     return kotlinVersion
68*68017707SAndroid Build Coastguard Worker }
69*68017707SAndroid Build Coastguard Worker 
70*68017707SAndroid Build Coastguard Worker /**
71*68017707SAndroid Build Coastguard Worker  * Should be used for running against a non-released Kotlin compiler on a system test level.
72*68017707SAndroid Build Coastguard Worker  *
73*68017707SAndroid Build Coastguard Worker  * @return a Kotlin language version taken from:
74*68017707SAndroid Build Coastguard Worker  *
75*68017707SAndroid Build Coastguard Worker  * 1. the Kotlin community project Gradle plugin,
76*68017707SAndroid Build Coastguard Worker  * 2. or `kotlin_language_version` Gradle property (from command line or from `gradle.properties`),
77*68017707SAndroid Build Coastguard Worker  *
78*68017707SAndroid Build Coastguard Worker  * or null otherwise
79*68017707SAndroid Build Coastguard Worker  */
getOverridingKotlinLanguageVersionnull80*68017707SAndroid Build Coastguard Worker fun getOverridingKotlinLanguageVersion(project: Project): String? {
81*68017707SAndroid Build Coastguard Worker     val communityPluginLanguageVersion = project.findProperty("community.project.kotlin.languageVersion") as? String
82*68017707SAndroid Build Coastguard Worker     val gradlePropertyLanguageVersion = project.findProperty("kotlin_language_version") as? String
83*68017707SAndroid Build Coastguard Worker     val languageVersion = when {
84*68017707SAndroid Build Coastguard Worker         communityPluginLanguageVersion != null -> communityPluginLanguageVersion
85*68017707SAndroid Build Coastguard Worker         gradlePropertyLanguageVersion != null -> gradlePropertyLanguageVersion
86*68017707SAndroid Build Coastguard Worker         else -> return null
87*68017707SAndroid Build Coastguard Worker     }
88*68017707SAndroid Build Coastguard Worker     LOGGER.info("An overriding Kotlin language version of $languageVersion was found for project ${project.name}")
89*68017707SAndroid Build Coastguard Worker     return languageVersion
90*68017707SAndroid Build Coastguard Worker }
91*68017707SAndroid Build Coastguard Worker 
92*68017707SAndroid Build Coastguard Worker /**
93*68017707SAndroid Build Coastguard Worker  * Should be used for running against a non-released Kotlin compiler on a system test level.
94*68017707SAndroid Build Coastguard Worker  *
95*68017707SAndroid Build Coastguard Worker  * @return a Kotlin API version taken from:
96*68017707SAndroid Build Coastguard Worker  *
97*68017707SAndroid Build Coastguard Worker  * 1. the Kotlin community project Gradle plugin,
98*68017707SAndroid Build Coastguard Worker  * 2. or `kotlin_language_version` Gradle property (from command line or from `gradle.properties`),
99*68017707SAndroid Build Coastguard Worker  *
100*68017707SAndroid Build Coastguard Worker  * or null otherwise
101*68017707SAndroid Build Coastguard Worker  */
getOverridingKotlinApiVersionnull102*68017707SAndroid Build Coastguard Worker fun getOverridingKotlinApiVersion(project: Project): String? {
103*68017707SAndroid Build Coastguard Worker     val communityPluginApiVersion = project.findProperty("community.project.kotlin.apiVersion") as? String
104*68017707SAndroid Build Coastguard Worker     val gradlePropertyApiVersion = project.findProperty("kotlin_api_version") as? String
105*68017707SAndroid Build Coastguard Worker     val apiVersion = when {
106*68017707SAndroid Build Coastguard Worker         communityPluginApiVersion != null -> communityPluginApiVersion
107*68017707SAndroid Build Coastguard Worker         gradlePropertyApiVersion != null -> gradlePropertyApiVersion
108*68017707SAndroid Build Coastguard Worker         else -> return null
109*68017707SAndroid Build Coastguard Worker     }
110*68017707SAndroid Build Coastguard Worker     LOGGER.info("An overriding Kotlin api version of $apiVersion was found for project ${project.name}")
111*68017707SAndroid Build Coastguard Worker     return apiVersion
112*68017707SAndroid Build Coastguard Worker }
113