1*57b5a4a6SAndroid Build Coastguard Worker/*
2*57b5a4a6SAndroid Build Coastguard Worker * Copyright 2014-2020 JetBrains s.r.o and contributors. Use of this source code is governed by the Apache 2.0 license.
3*57b5a4a6SAndroid Build Coastguard Worker */
4*57b5a4a6SAndroid Build Coastguard Worker
5*57b5a4a6SAndroid Build Coastguard Worker
6*57b5a4a6SAndroid Build Coastguard Worker/**
7*57b5a4a6SAndroid Build Coastguard Worker * Publish the platform JAR and POM so that consumers who depend on this module and can't read Gradle module
8*57b5a4a6SAndroid Build Coastguard Worker * metadata can still get the platform artifact and transitive dependencies from the POM
9*57b5a4a6SAndroid Build Coastguard Worker * (see details in https://youtrack.jetbrains.com/issue/KT-39184#focus=streamItem-27-4115233.0-0)
10*57b5a4a6SAndroid Build Coastguard Worker */
11*57b5a4a6SAndroid Build Coastguard Workerproject.ext.publishPlatformArtifactsInRootModule = { MavenPublication platformPublication ->
12*57b5a4a6SAndroid Build Coastguard Worker    afterEvaluate {
13*57b5a4a6SAndroid Build Coastguard Worker        XmlProvider platformXml = null
14*57b5a4a6SAndroid Build Coastguard Worker
15*57b5a4a6SAndroid Build Coastguard Worker        platformPublication.pom.withXml { platformXml = it }
16*57b5a4a6SAndroid Build Coastguard Worker
17*57b5a4a6SAndroid Build Coastguard Worker        publishing.publications.kotlinMultiplatform {
18*57b5a4a6SAndroid Build Coastguard Worker            pom.withXml {
19*57b5a4a6SAndroid Build Coastguard Worker                Node root = asNode()
20*57b5a4a6SAndroid Build Coastguard Worker                // Remove the original content and add the content from the platform POM:
21*57b5a4a6SAndroid Build Coastguard Worker                root.children().toList().each { root.remove(it as Node) }
22*57b5a4a6SAndroid Build Coastguard Worker                platformXml.asNode().children().each { root.append(it as Node) }
23*57b5a4a6SAndroid Build Coastguard Worker
24*57b5a4a6SAndroid Build Coastguard Worker                // Adjust the self artifact ID, as it should match the root module's coordinates:
25*57b5a4a6SAndroid Build Coastguard Worker                ((root.get("artifactId") as NodeList).get(0) as Node).setValue(artifactId)
26*57b5a4a6SAndroid Build Coastguard Worker
27*57b5a4a6SAndroid Build Coastguard Worker                // Set packaging to POM to indicate that there's no artifact:
28*57b5a4a6SAndroid Build Coastguard Worker                root.appendNode("packaging", "pom")
29*57b5a4a6SAndroid Build Coastguard Worker
30*57b5a4a6SAndroid Build Coastguard Worker                // Remove the original platform dependencies and add a single dependency on the platform module:
31*57b5a4a6SAndroid Build Coastguard Worker                Node dependencies = (root.get("dependencies") as NodeList).get(0) as Node
32*57b5a4a6SAndroid Build Coastguard Worker                dependencies.children().toList().each { dependencies.remove(it as Node) }
33*57b5a4a6SAndroid Build Coastguard Worker                Node singleDependency = dependencies.appendNode("dependency")
34*57b5a4a6SAndroid Build Coastguard Worker                singleDependency.appendNode("groupId", platformPublication.groupId)
35*57b5a4a6SAndroid Build Coastguard Worker                singleDependency.appendNode("artifactId", platformPublication.artifactId)
36*57b5a4a6SAndroid Build Coastguard Worker                singleDependency.appendNode("version", platformPublication.version)
37*57b5a4a6SAndroid Build Coastguard Worker                singleDependency.appendNode("scope", "compile")
38*57b5a4a6SAndroid Build Coastguard Worker            }
39*57b5a4a6SAndroid Build Coastguard Worker        }
40*57b5a4a6SAndroid Build Coastguard Worker
41*57b5a4a6SAndroid Build Coastguard Worker        tasks.matching { it.name == "generatePomFileForKotlinMultiplatformPublication"}.configureEach {
42*57b5a4a6SAndroid Build Coastguard Worker            dependsOn(tasks["generatePomFileFor${platformPublication.name.capitalize()}Publication"])
43*57b5a4a6SAndroid Build Coastguard Worker        }
44*57b5a4a6SAndroid Build Coastguard Worker    }
45*57b5a4a6SAndroid Build Coastguard Worker}