From b5d4e4c44c765eca15c26cbb6419fc78a0d523dd Mon Sep 17 00:00:00 2001 From: Sergey Igushkin Date: Wed, 5 Aug 2020 04:27:47 +0400 Subject: [PATCH] Enable compatibility metadata variant by default in HMPP This by default ensures that libraries published with HMPP are compatible with non-HMPP consumers (which is the default in 1.4.0). --- .../kotlin/org/jetbrains/kotlin/gradle/KlibBasedMppIT.kt | 9 +++++++-- .../jetbrains/kotlin/gradle/plugin/KotlinProperties.kt | 4 ++-- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/KlibBasedMppIT.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/KlibBasedMppIT.kt index 7160afb1109..41f613a1264 100644 --- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/KlibBasedMppIT.kt +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/KlibBasedMppIT.kt @@ -148,7 +148,7 @@ class KlibBasedMppIT : BaseGradleIT() { // Check that the metadata JAR doesn't contain the host-specific source set entries, but contains the shared-Native source set // that can be built on every host: - ZipFile(groupDir.resolve("$dependencyModuleName-metadata/1.0/$dependencyModuleName-metadata-1.0.jar")).use { metadataJar -> + ZipFile(groupDir.resolve("$dependencyModuleName-metadata/1.0/$dependencyModuleName-metadata-1.0-all.jar")).use { metadataJar -> assertTrue { metadataJar.entries().asSequence().none { it.name.startsWith(hostSpecificSourceSet) } } assertTrue { metadataJar.entries().asSequence().any { it.name.startsWith("linuxMain") } } } @@ -213,7 +213,12 @@ class KlibBasedMppIT : BaseGradleIT() { setupDependencies: Project.() -> Unit ) = with(Project("common-klib-lib-and-app")) { embedProject(Project("common-klib-lib-and-app"), renameTo = transitiveDepModuleName) - embedProject(Project("common-klib-lib-and-app"), renameTo = dependencyModuleName) + embedProject(Project("common-klib-lib-and-app"), renameTo = dependencyModuleName).apply { + projectDir.resolve(dependencyModuleName).walkTopDown().filter { it.extension == "kt" }.forEach { file -> + // Avoid duplicate FQNs as in the compatibility mode, the K2Metadata compiler reports duplicate symbols on them: + file.modify { it.replace("package com.h0tk3y.hmpp.klib.demo", "package com.h0tk3y.hmpp.klib.demo1") } + } + } gradleBuildScript().modify(::transformBuildScriptWithPluginsDsl) gradleBuildScript(dependencyModuleName).appendText("\ndependencies { \"commonMainImplementation\"(project(\":$transitiveDepModuleName\")) }") diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinProperties.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinProperties.kt index d4db594aa65..99a4ebc1ab6 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinProperties.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinProperties.kt @@ -89,8 +89,8 @@ internal class PropertiesProvider private constructor(private val project: Proje val enableGranularSourceSetsMetadata: Boolean? get() = booleanProperty("kotlin.mpp.enableGranularSourceSetsMetadata") - val enableCompatibilityMetadataVariant: Boolean? - get() = booleanProperty("kotlin.mpp.enableCompatibilityMetadataVariant") + val enableCompatibilityMetadataVariant: Boolean + get() = booleanProperty("kotlin.mpp.enableCompatibilityMetadataVariant") ?: true val ignoreDisabledNativeTargets: Boolean? get() = booleanProperty(DisabledNativeTargetsReporter.DISABLE_WARNING_PROPERTY_NAME)