Only allow single publish setting for KMP libraries and publish all declared targets when publish is configured
Bug: 235594579
Test: Existing builds continue to work and produce correct artifacts
Change-Id: Ieca07201b198b084267c0c5645714f7e6420b6ec
diff --git a/buildSrc/private/src/main/kotlin/androidx/build/AndroidXExtension.kt b/buildSrc/private/src/main/kotlin/androidx/build/AndroidXExtension.kt
index 3babb93..ac01224 100644
--- a/buildSrc/private/src/main/kotlin/androidx/build/AndroidXExtension.kt
+++ b/buildSrc/private/src/main/kotlin/androidx/build/AndroidXExtension.kt
@@ -171,7 +171,7 @@
if (publish != Publish.UNSET) {
publish.shouldPublish()
} else if (type != LibraryType.UNSET) {
- type.publishExtension.shouldPublishAny()
+ type.publish.shouldPublish()
} else {
false
}
@@ -180,14 +180,14 @@
if (publish != Publish.UNSET) {
publish.shouldRelease()
} else if (type != LibraryType.UNSET) {
- type.publishExtension.shouldReleaseAny()
+ type.publish.shouldRelease()
} else {
false
}
internal fun isPublishConfigured(): Boolean = (
publish != Publish.UNSET ||
- type.publishExtension.isPublishConfigured()
+ type.publish != Publish.UNSET
)
/**
@@ -202,7 +202,7 @@
set(value) {
// don't disable multiplatform if it's already enabled, because sometimes it's enabled
// through flags and we don't want setting `type =` to disable it accidentally.
- if (value.publishExtension.shouldEnableMultiplatform()) {
+ if (value.shouldEnableMultiplatform()) {
multiplatform = true
}
field = value
@@ -216,13 +216,6 @@
var bypassCoordinateValidation = false
/**
- * Which KMP platforms are published by this project, as a list of artifact suffixes or an empty
- * list for non-KMP projects.
- */
- val publishPlatforms: List<String>
- get() = type.publishExtension.publishPlatforms
-
- /**
* Whether this project uses KMP.
*/
private var multiplatform: Boolean = false
@@ -255,3 +248,5 @@
var name: String? = null
var url: String? = null
}
+
+private fun LibraryType.shouldEnableMultiplatform() = this is LibraryType.KmpLibrary
\ No newline at end of file
diff --git a/buildSrc/private/src/main/kotlin/androidx/build/AndroidXMultiplatformExtension.kt b/buildSrc/private/src/main/kotlin/androidx/build/AndroidXMultiplatformExtension.kt
index fb481768..a4a6fd6 100644
--- a/buildSrc/private/src/main/kotlin/androidx/build/AndroidXMultiplatformExtension.kt
+++ b/buildSrc/private/src/main/kotlin/androidx/build/AndroidXMultiplatformExtension.kt
@@ -62,6 +62,19 @@
} else { null }
}
+ /**
+ * Configures all mac targets supported by AndroidX.
+ */
+ @JvmOverloads
+ fun mac(
+ block: Action<KotlinNativeTarget>? = null
+ ): List<KotlinNativeTarget> {
+ return listOfNotNull(
+ macosX64(block),
+ macosArm64(block)
+ )
+ }
+
@JvmOverloads
fun macosX64(
block: Action<KotlinNativeTarget>? = null
@@ -131,6 +144,15 @@
}
@JvmOverloads
+ fun linux(
+ block: Action<KotlinNativeTarget>? = null
+ ): List<KotlinNativeTarget> {
+ return listOfNotNull(
+ linuxX64(block),
+ )
+ }
+
+ @JvmOverloads
fun linuxX64(
block: Action<KotlinNativeTarget>? = null
): KotlinNativeTargetWithHostTests? {
diff --git a/buildSrc/private/src/main/kotlin/androidx/build/Release.kt b/buildSrc/private/src/main/kotlin/androidx/build/Release.kt
index 8a7ba98..571e78f 100644
--- a/buildSrc/private/src/main/kotlin/androidx/build/Release.kt
+++ b/buildSrc/private/src/main/kotlin/androidx/build/Release.kt
@@ -346,7 +346,7 @@
)
// Add platform-specific artifacts, if necessary.
- artifacts += availablePublishPlatforms.map { suffix ->
+ artifacts += publishPlatforms.map { suffix ->
Artifact(
mavenGroup = groupString,
projectName = "${project.name}-$suffix",
@@ -357,12 +357,12 @@
return artifacts
}
-private val AndroidXExtension.availablePublishPlatforms: List<String>
+private val AndroidXExtension.publishPlatforms: List<String>
get() {
val declaredTargets = project.multiplatformExtension?.targets?.asMap?.keys?.map {
it.lowercase()
} ?: emptySet()
- return publishPlatforms.intersect(declaredTargets.toSet()).toList()
+ return declaredTargets.toList()
}
/**