Skip to content

Commit ea6e140

Browse files
committed
Establish explicit dependency on commonMain/commonTest in native source sets
It can soon become required by KGP
1 parent 9bdb802 commit ea6e140

File tree

1 file changed

+26
-15
lines changed

1 file changed

+26
-15
lines changed

main/src/kotlinx/team/infra/NativeMultiplatform.kt

Lines changed: 26 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import org.gradle.api.*
55
import org.gradle.api.plugins.*
66
import org.gradle.util.*
77
import org.jetbrains.kotlin.gradle.dsl.*
8+
import org.jetbrains.kotlin.gradle.plugin.KotlinSourceSet
89
import org.jetbrains.kotlin.gradle.plugin.mpp.*
910
import org.jetbrains.kotlin.konan.target.*
1011

@@ -28,10 +29,12 @@ fun Project.configureNativeMultiplatform() {
2829
}
2930

3031
val useNativeBuildInfraInIdea = subproject.findProperty("useNativeBuildInfraInIdea")?.toString()?.toBoolean() ?: false
32+
val commonMain = kotlin.sourceSets.getByName("commonMain")
33+
val commonTest = kotlin.sourceSets.getByName("commonTest")
3134
val extension: Any = if (ideaActive && !useNativeBuildInfraInIdea)
32-
NativeIdeaInfraExtension(subproject, kotlin, "native")
35+
NativeIdeaInfraExtension(subproject, kotlin, "native", commonMain, commonTest)
3336
else
34-
NativeBuildInfraExtension(subproject, kotlin, "native")
37+
NativeBuildInfraExtension(subproject, kotlin, "native", commonMain, commonTest)
3538

3639
(kotlin as ExtensionAware).extensions.add("infra", extension)
3740
}
@@ -41,10 +44,12 @@ fun Project.configureNativeMultiplatform() {
4144
abstract class NativeInfraExtension(
4245
protected val project: Project,
4346
protected val kotlin: KotlinMultiplatformExtension,
44-
protected val sourceSetName: String
47+
protected val sourceSetName: String,
48+
commonMainSourceSet: KotlinSourceSet,
49+
commonTestSourceSet: KotlinSourceSet,
4550
) {
46-
protected val mainSourceSet = kotlin.sourceSets.maybeCreate("${sourceSetName}Main")
47-
protected val testSourceSet = kotlin.sourceSets.maybeCreate("${sourceSetName}Test")
51+
protected val mainSourceSet = kotlin.sourceSets.maybeCreate("${sourceSetName}Main").apply { dependsOn(commonMainSourceSet) }
52+
protected val testSourceSet = kotlin.sourceSets.maybeCreate("${sourceSetName}Test").apply { dependsOn(commonTestSourceSet) }
4853

4954
protected val sharedConfigs = mutableListOf<KotlinNativeTarget.() -> Unit>()
5055
fun shared(configure: Closure<*>) = shared { ConfigureUtil.configure(configure, this) }
@@ -60,8 +65,13 @@ abstract class NativeInfraExtension(
6065
abstract fun common(name: String, configure: NativeInfraExtension.() -> Unit)
6166
}
6267

63-
class NativeIdeaInfraExtension(project: Project, kotlin: KotlinMultiplatformExtension, sourceSetName: String) :
64-
NativeInfraExtension(project, kotlin, sourceSetName) {
68+
class NativeIdeaInfraExtension(
69+
project: Project,
70+
kotlin: KotlinMultiplatformExtension,
71+
sourceSetName: String,
72+
commonMainSourceSet: KotlinSourceSet,
73+
commonTestSourceSet: KotlinSourceSet,
74+
) : NativeInfraExtension(project, kotlin, sourceSetName, commonMainSourceSet, commonTestSourceSet) {
6575

6676
private val hostManager = createHostManager()
6777

@@ -96,15 +106,18 @@ class NativeIdeaInfraExtension(project: Project, kotlin: KotlinMultiplatformExte
96106
}
97107

98108
override fun common(name: String, configure: NativeInfraExtension.() -> Unit) {
99-
kotlin.sourceSets.create("${name}Main").dependsOn(mainSourceSet)
100-
kotlin.sourceSets.create("${name}Test").dependsOn(testSourceSet)
101-
val extension = NativeIdeaInfraExtension(project, kotlin, name)
109+
val extension = NativeIdeaInfraExtension(project, kotlin, name, mainSourceSet, testSourceSet)
102110
extension.configure()
103111
}
104112
}
105113

106-
class NativeBuildInfraExtension(project: Project, kotlin: KotlinMultiplatformExtension, sourceSetName: String) :
107-
NativeInfraExtension(project, kotlin, sourceSetName) {
114+
class NativeBuildInfraExtension(
115+
project: Project,
116+
kotlin: KotlinMultiplatformExtension,
117+
sourceSetName: String,
118+
commonMainSourceSet: KotlinSourceSet,
119+
commonTestSourceSet: KotlinSourceSet,
120+
) : NativeInfraExtension(project, kotlin, sourceSetName, commonMainSourceSet, commonTestSourceSet) {
108121

109122
private val nativePresets = kotlin.presets.filterIsInstance<AbstractKotlinNativeTargetPreset<*>>()
110123

@@ -131,9 +144,7 @@ class NativeBuildInfraExtension(project: Project, kotlin: KotlinMultiplatformExt
131144
}
132145

133146
override fun common(name: String, configure: NativeInfraExtension.() -> Unit) {
134-
kotlin.sourceSets.create("${name}Main").dependsOn(mainSourceSet)
135-
kotlin.sourceSets.create("${name}Test").dependsOn(testSourceSet)
136-
val extension = NativeBuildInfraExtension(project, kotlin, name)
147+
val extension = NativeBuildInfraExtension(project, kotlin, name, mainSourceSet, testSourceSet)
137148
extension.configure()
138149
}
139150
}

0 commit comments

Comments
 (0)