diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/KotlinMultiplatformPlugin.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/KotlinMultiplatformPlugin.kt index 27c7224d178..fa995dd7420 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/KotlinMultiplatformPlugin.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/KotlinMultiplatformPlugin.kt @@ -244,6 +244,14 @@ internal fun applyUserDefinedAttributes(target: AbstractKotlinTarget) { .mapNotNull { configurationName -> target.project.configurations.findByName(configurationName) } .forEach { configuration -> copyAttributes(compilationAttributes, configuration.attributes) } } + + // Copy to host-specific metadata elements configurations + if (target is KotlinNativeTarget) { + val hostSpecificMetadataElements = project.configurations.findByName(target.hostSpecificMetadataElementsConfigurationName) + if (hostSpecificMetadataElements != null) { + copyAttributes(from = target.attributes, to = hostSpecificMetadataElements.attributes) + } + } } } diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/native/KotlinNativeTargetConfigurator.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/native/KotlinNativeTargetConfigurator.kt index 7cff38c33ed..9dbccaa4178 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/native/KotlinNativeTargetConfigurator.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/native/KotlinNativeTargetConfigurator.kt @@ -31,6 +31,7 @@ import org.jetbrains.kotlin.gradle.plugin.internal.artifactTypeAttribute import org.jetbrains.kotlin.gradle.plugin.mpp.* import org.jetbrains.kotlin.gradle.plugin.mpp.apple.registerEmbedAndSignAppleFrameworkTask import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.GradleKpmVariant +import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.util.copyAttributes import org.jetbrains.kotlin.gradle.plugin.sources.DefaultLanguageSettingsBuilder import org.jetbrains.kotlin.gradle.targets.metadata.isKotlinGranularMetadataEnabled import org.jetbrains.kotlin.gradle.targets.native.* @@ -213,10 +214,7 @@ open class KotlinNativeTargetConfigurator : AbstractKotl configuration.extendsFrom(*apiElements.extendsFrom.toTypedArray()) - fun copyAttribute(from: AttributeContainer, to: AttributeContainer, attribute: Attribute) { - to.attribute(attribute, from.getAttribute(attribute)!!) - } - with(apiElements.attributes) { keySet().forEach { copyAttribute(this, configuration.attributes, it) } } + copyAttributes(from = apiElements.attributes, to = configuration.attributes) configuration.attributes.attribute(USAGE_ATTRIBUTE, objects.named(Usage::class.java, KotlinUsages.KOTLIN_METADATA)) } } diff --git a/libraries/tools/kotlin-gradle-plugin/src/functionalTest/kotlin/org/jetbrains/kotlin/gradle/regressionTests/ConfigurationsTest.kt b/libraries/tools/kotlin-gradle-plugin/src/functionalTest/kotlin/org/jetbrains/kotlin/gradle/regressionTests/ConfigurationsTest.kt index a2fe38ba9d2..25c3bfb7175 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/functionalTest/kotlin/org/jetbrains/kotlin/gradle/regressionTests/ConfigurationsTest.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/functionalTest/kotlin/org/jetbrains/kotlin/gradle/regressionTests/ConfigurationsTest.kt @@ -573,7 +573,8 @@ class ConfigurationsTest : MultiplatformExtensionTest() { binaries.framework("main", listOf(NativeBuildType.DEBUG)) } - linuxX64() + linuxX64("linuxA") { attributes { attribute(distinguishingAttribute, "linuxA") } } + linuxX64("linuxB") { attributes { attribute(distinguishingAttribute, "linuxB") } } targets.filterIsInstance().forEach { it.binaries {