diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/CommonizerIT.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/CommonizerIT.kt index 44243efe399..b8251d5529b 100644 --- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/CommonizerIT.kt +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/CommonizerIT.kt @@ -242,6 +242,57 @@ class CommonizerIT : BaseGradleIT() { } } + @Test + fun `test KT-46234 intermediate source set with only one native target`() { + + val posixInImplementationMetadataConfigurationRegex = Regex(""".*implementationMetadataConfiguration:.*([pP])osix""") + val posixInIntransitiveMetadataConfigurationRegex = Regex(""".*intransitiveMetadataConfiguration:.*([pP])osix""") + + fun CompiledProject.containsPosixInImplementationMetadataConfiguration(): Boolean = + output.lineSequence().any { line -> + line.matches(posixInImplementationMetadataConfigurationRegex) + } + + fun CompiledProject.containsPosixInIntransitiveMetadataConfiguration(): Boolean = + output.lineSequence().any { line -> + line.matches(posixInIntransitiveMetadataConfigurationRegex) + } + + with(Project("commonize-kt-46234-singleNativeTarget")) { + build(":p1:listNativePlatformMainDependencies", "-Pkotlin.mpp.enableIntransitiveMetadataConfiguration=false") { + assertSuccessful() + + assertTrue( + containsPosixInImplementationMetadataConfiguration(), + "Expected dependency on posix in implementationMetadataConfiguration" + ) + + assertFalse( + containsPosixInIntransitiveMetadataConfiguration(), + "Expected **no** dependency on posix in intransitiveMetadataConfiguration" + ) + } + + build(":p1:listNativePlatformMainDependencies", "-Pkotlin.mpp.enableIntransitiveMetadataConfiguration=true") { + assertSuccessful() + + assertFalse( + containsPosixInImplementationMetadataConfiguration(), + "Expected **no** posix dependency in implementationMetadataConfiguration" + ) + + assertTrue( + containsPosixInIntransitiveMetadataConfiguration(), + "Expected dependency on posix in intransitiveMetadataConfiguration" + ) + } + + build("assemble") { + assertSuccessful() + } + } + } + private fun preparedProject(name: String): Project { return Project(name).apply { setupWorkingDir() diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/commonize-kt-46234-singleNativeTarget/build.gradle.kts b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/commonize-kt-46234-singleNativeTarget/build.gradle.kts new file mode 100644 index 00000000000..448f4930cb0 --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/commonize-kt-46234-singleNativeTarget/build.gradle.kts @@ -0,0 +1,10 @@ +plugins { + kotlin("multiplatform") apply false +} + +allprojects { + repositories { + mavenLocal() + mavenCentral() + } +} diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/commonize-kt-46234-singleNativeTarget/gradle.properties b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/commonize-kt-46234-singleNativeTarget/gradle.properties new file mode 100644 index 00000000000..1d227bf1304 --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/commonize-kt-46234-singleNativeTarget/gradle.properties @@ -0,0 +1,3 @@ +kotlin.mpp.enableGranularSourceSetsMetadata=true +kotlin.native.enableDependencyPropagation=false +kotlin.mpp.enableIntransitiveMetadataConfiguration=true \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/commonize-kt-46234-singleNativeTarget/p1/build.gradle.kts b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/commonize-kt-46234-singleNativeTarget/p1/build.gradle.kts new file mode 100644 index 00000000000..10b31f4de6e --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/commonize-kt-46234-singleNativeTarget/p1/build.gradle.kts @@ -0,0 +1,61 @@ +import org.jetbrains.kotlin.com.intellij.openapi.util.SystemInfo.* +import org.jetbrains.kotlin.gradle.plugin.KotlinSourceSet + +operator fun KotlinSourceSet.invoke(builder: SourceSetHierarchyBuilder.() -> Unit): KotlinSourceSet { + SourceSetHierarchyBuilder(this).builder() + return this +} + +class SourceSetHierarchyBuilder(private val node: KotlinSourceSet) { + operator fun KotlinSourceSet.unaryMinus() = this.dependsOn(node) +} + +plugins { + kotlin("multiplatform") +} + +kotlin { + + val nativePlatform = when { + isMac -> macosX64("nativePlatform") + isLinux -> linuxX64("nativePlatform") + isWindows -> mingwX64("nativePlatform") + else -> throw IllegalStateException("Unsupported host") + } + + val commonMain by sourceSets.getting + val nativeMain by sourceSets.creating + val nativePlatformMain by sourceSets.getting + + commonMain { + -nativeMain { + -nativePlatformMain + } + } + + tasks.register("listNativePlatformMainDependencies") { + doLast { + + val implementationMetadataConfigurationDependencies = project.configurations.getByName( + nativePlatformMain.implementationMetadataConfigurationName + ).files + + val intransitiveMetadataConfigurationDependencies = project.configurations.findByName( + "nativePlatformMainIntransitiveDependenciesMetadata" + )?.files.orEmpty() + + val dependencies = implementationMetadataConfigurationDependencies + + intransitiveMetadataConfigurationDependencies + + logger.quiet("NativePlatformMainDependency | Count: ${dependencies.size}") + + implementationMetadataConfigurationDependencies.forEach { dependencyFile -> + logger.quiet("implementationMetadataConfiguration: ${dependencyFile.path}") + } + + intransitiveMetadataConfigurationDependencies.forEach { dependencyFile -> + logger.quiet("intransitiveMetadataConfiguration: ${dependencyFile.path}") + } + } + } +} diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/commonize-kt-46234-singleNativeTarget/p1/src/nativePlatformMain/kotlin/NativePlatformMain.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/commonize-kt-46234-singleNativeTarget/p1/src/nativePlatformMain/kotlin/NativePlatformMain.kt new file mode 100644 index 00000000000..66907b37b4f --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/commonize-kt-46234-singleNativeTarget/p1/src/nativePlatformMain/kotlin/NativePlatformMain.kt @@ -0,0 +1,7 @@ +@file:Suppress("unused") + +import platform.posix.usleep + +fun main() { + usleep(100) +} \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/commonize-kt-46234-singleNativeTarget/settings.gradle.kts b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/commonize-kt-46234-singleNativeTarget/settings.gradle.kts new file mode 100644 index 00000000000..ac06873d297 --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/commonize-kt-46234-singleNativeTarget/settings.gradle.kts @@ -0,0 +1,12 @@ +pluginManagement { + repositories { + mavenLocal() + gradlePluginPortal() + } + val kotlin_version: String by settings + plugins { + kotlin("multiplatform").version(kotlin_version) + } +} + +include(":p1") \ No newline at end of file