From 965e3287665a508fabe6a25443a2d2e0fb0bda04 Mon Sep 17 00:00:00 2001 From: "sebastian.sellmair" Date: Thu, 22 Apr 2021 15:10:51 +0200 Subject: [PATCH] CommonizerIT: implement `test KT-46248 single supported native target dependency propagation` to cover KT-46248 ^KT-46248 --- .../jetbrains/kotlin/gradle/CommonizerIT.kt | 30 ++++++++ .../build.gradle.kts | 10 +++ .../gradle.properties | 6 ++ .../p1/build.gradle.kts | 70 +++++++++++++++++++ .../p1/src/commonMain/kotlin/CommonMain.kt | 5 ++ .../p1/src/nativeMain/kotlin/NativeMain.kt | 7 ++ .../kotlin/NativeMainParent.kt | 7 ++ .../kotlin/NativePlatformMain.kt | 7 ++ .../settings.gradle.kts | 12 ++++ 9 files changed, 154 insertions(+) create mode 100644 libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/commonize-kt-46248-singleNativeTargetPropagation/build.gradle.kts create mode 100644 libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/commonize-kt-46248-singleNativeTargetPropagation/gradle.properties create mode 100644 libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/commonize-kt-46248-singleNativeTargetPropagation/p1/build.gradle.kts create mode 100644 libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/commonize-kt-46248-singleNativeTargetPropagation/p1/src/commonMain/kotlin/CommonMain.kt create mode 100644 libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/commonize-kt-46248-singleNativeTargetPropagation/p1/src/nativeMain/kotlin/NativeMain.kt create mode 100644 libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/commonize-kt-46248-singleNativeTargetPropagation/p1/src/nativeMainParent/kotlin/NativeMainParent.kt create mode 100644 libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/commonize-kt-46248-singleNativeTargetPropagation/p1/src/nativePlatformMain/kotlin/NativePlatformMain.kt create mode 100644 libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/commonize-kt-46248-singleNativeTargetPropagation/settings.gradle.kts 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 17ace8dce79..b27bb5316bd 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 @@ -301,6 +301,36 @@ class CommonizerIT : BaseGradleIT() { } } + @Test + fun `test KT-46248 single supported native target dependency propagation`() { + fun CompiledProject.containsPosixDependency(): Boolean = output.lineSequence().any { line -> + line.matches(Regex(""".*Dependency:.*[pP]osix""")) + } + + with(Project("commonize-kt-46248-singleNativeTargetPropagation")) { + build(":p1:listNativeMainDependencies") { + assertSuccessful() + assertTrue(containsPosixDependency(), "Expected dependency on posix in nativeMain") + } + + build(":p1:listNativeMainParentDependencies") { + assertSuccessful() + assertTrue(containsPosixDependency(), "Expected dependency on posix in nativeMainParent") + } + + build(":p1:listCommonMainDependencies") { + assertSuccessful() + assertFalse(containsPosixDependency(), "Expected **no** dependency on posix in commonMain (because of jvm target)") + } + + build("assemble") { + assertSuccessful() + assertTasksExecuted(":p1:compileCommonMainKotlinMetadata") + assertTasksExecuted(":p1:compileKotlinNativePlatform") + } + } + } + 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-46248-singleNativeTargetPropagation/build.gradle.kts b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/commonize-kt-46248-singleNativeTargetPropagation/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-46248-singleNativeTargetPropagation/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-46248-singleNativeTargetPropagation/gradle.properties b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/commonize-kt-46248-singleNativeTargetPropagation/gradle.properties new file mode 100644 index 00000000000..09a0fdb3d77 --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/commonize-kt-46248-singleNativeTargetPropagation/gradle.properties @@ -0,0 +1,6 @@ +kotlin.mpp.enableGranularSourceSetsMetadata=true +kotlin.native.enableDependencyPropagation=false +kotlin.mpp.enableCInteropCommonization=true +kotlin.mpp.enableHierarchicalCommonization=true +kotlin.mpp.enableNativeDistributionCommonizationCache=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-46248-singleNativeTargetPropagation/p1/build.gradle.kts b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/commonize-kt-46248-singleNativeTargetPropagation/p1/build.gradle.kts new file mode 100644 index 00000000000..4e302999545 --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/commonize-kt-46248-singleNativeTargetPropagation/p1/build.gradle.kts @@ -0,0 +1,70 @@ +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") +} + +fun registerListDependenciesTask(sourceSet: KotlinSourceSet) { + tasks.register("list${sourceSet.name.capitalize()}Dependencies") { + dependsOn("commonize") + doLast { + val dependencies = project.configurations.findByName( + "${sourceSet.name}IntransitiveDependenciesMetadata" + )?.files.orEmpty() + + logger.quiet("${sourceSet.name} Dependencies | Count: ${dependencies.size}") + + dependencies.forEach { dependencyFile -> + logger.quiet("Dependency: ${dependencyFile.path}") + } + } + } +} + +kotlin { + + when { + isMac -> macosX64("nativePlatform") + isLinux -> linuxX64("nativePlatform") + isWindows -> mingwX64("nativePlatform") + else -> throw IllegalStateException("Unsupported host") + } + + when { + isMac -> mingwX64("unsupportedNativePlatform") + else -> macosX64("unsupportedNativePlatform") + } + + jvm() + + val commonMain by sourceSets.getting + val jvmMain by sourceSets.getting + val nativeMain by sourceSets.creating + val nativeMainParent by sourceSets.creating + val nativePlatformMain by sourceSets.getting + val unsupportedNativePlatformMain by sourceSets.getting + + commonMain { + -jvmMain + -nativeMainParent { + -nativeMain { + -nativePlatformMain + -unsupportedNativePlatformMain + } + } + } + + registerListDependenciesTask(commonMain) + registerListDependenciesTask(nativeMain) + registerListDependenciesTask(nativeMainParent) +} diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/commonize-kt-46248-singleNativeTargetPropagation/p1/src/commonMain/kotlin/CommonMain.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/commonize-kt-46248-singleNativeTargetPropagation/p1/src/commonMain/kotlin/CommonMain.kt new file mode 100644 index 00000000000..2242a7f40a4 --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/commonize-kt-46248-singleNativeTargetPropagation/p1/src/commonMain/kotlin/CommonMain.kt @@ -0,0 +1,5 @@ +@file:Suppress("unused") + +fun commonMain(args: List) { + +} \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/commonize-kt-46248-singleNativeTargetPropagation/p1/src/nativeMain/kotlin/NativeMain.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/commonize-kt-46248-singleNativeTargetPropagation/p1/src/nativeMain/kotlin/NativeMain.kt new file mode 100644 index 00000000000..3f254ff2a00 --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/commonize-kt-46248-singleNativeTargetPropagation/p1/src/nativeMain/kotlin/NativeMain.kt @@ -0,0 +1,7 @@ +@file:Suppress("unused") + +import platform.posix.usleep + +fun nativeMain() { + usleep(100) +} \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/commonize-kt-46248-singleNativeTargetPropagation/p1/src/nativeMainParent/kotlin/NativeMainParent.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/commonize-kt-46248-singleNativeTargetPropagation/p1/src/nativeMainParent/kotlin/NativeMainParent.kt new file mode 100644 index 00000000000..a8e49d21f64 --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/commonize-kt-46248-singleNativeTargetPropagation/p1/src/nativeMainParent/kotlin/NativeMainParent.kt @@ -0,0 +1,7 @@ +@file:Suppress("unused") + +import platform.posix.usleep + +fun commonMain() { + usleep(100) +} \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/commonize-kt-46248-singleNativeTargetPropagation/p1/src/nativePlatformMain/kotlin/NativePlatformMain.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/commonize-kt-46248-singleNativeTargetPropagation/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-46248-singleNativeTargetPropagation/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-46248-singleNativeTargetPropagation/settings.gradle.kts b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/commonize-kt-46248-singleNativeTargetPropagation/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-46248-singleNativeTargetPropagation/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