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()
     }
 
 /**