diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/NewMultiplatformIT.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/NewMultiplatformIT.kt index 1c2908f7555..20c6bf3b23d 100644 --- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/NewMultiplatformIT.kt +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/NewMultiplatformIT.kt @@ -4,9 +4,7 @@ */ package org.jetbrains.kotlin.gradle -import org.jetbrains.kotlin.gradle.internals.DISABLED_NATIVE_TARGETS_REPORTER_DISABLE_WARNING_PROPERTY_NAME -import org.jetbrains.kotlin.gradle.internals.DISABLED_NATIVE_TARGETS_REPORTER_WARNING_PREFIX -import org.jetbrains.kotlin.gradle.internals.GRADLE_NO_METADATA_WARNING +import org.jetbrains.kotlin.gradle.internals.* import org.jetbrains.kotlin.gradle.plugin.ProjectLocalConfigurations import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinJvmWithJavaTargetPreset import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinMultiplatformPlugin @@ -20,7 +18,6 @@ import org.jetbrains.kotlin.gradle.util.* import org.jetbrains.kotlin.konan.target.CompilerOutputKind import org.jetbrains.kotlin.konan.target.HostManager import org.junit.Assert -import org.junit.Assume import org.junit.Ignore import org.junit.Test import java.util.jar.JarFile @@ -1486,13 +1483,17 @@ class NewMultiplatformIT : BaseGradleIT() { assertSuccessful() assertContains("User-provided Kotlin/Native distribution: $currentDir") assertNotContains("Project property 'org.jetbrains.kotlin.native.home' is deprecated") + assertContains(NO_NATIVE_STDLIB_WARNING) + assertContains(NO_NATIVE_STDLIB_PROPERTY_WARNING) } // Deprecated property. - build("tasks", "-Porg.jetbrains.kotlin.native.home=$currentDir") { + build("tasks", "-Porg.jetbrains.kotlin.native.home=$currentDir", "-Pkotlin.native.nostdlib=true") { assertSuccessful() assertContains("User-provided Kotlin/Native distribution: $currentDir") assertContains("Project property 'org.jetbrains.kotlin.native.home' is deprecated") + assertNotContains(NO_NATIVE_STDLIB_WARNING) + assertNotContains(NO_NATIVE_STDLIB_PROPERTY_WARNING) } build("tasks", "-Pkotlin.native.version=1.3-eap-10779") { diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/native/KotlinNativeTargetPreset.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/native/KotlinNativeTargetPreset.kt index 06653913336..8cca0b0e3d1 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/native/KotlinNativeTargetPreset.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/native/KotlinNativeTargetPreset.kt @@ -17,6 +17,7 @@ import org.jetbrains.kotlin.gradle.plugin.* import org.jetbrains.kotlin.gradle.plugin.PropertiesProvider import org.jetbrains.kotlin.gradle.targets.native.DisabledNativeTargetsReporter import org.jetbrains.kotlin.gradle.utils.NativeCompilerDownloader +import org.jetbrains.kotlin.gradle.utils.SingleWarningPerBuild import org.jetbrains.kotlin.konan.target.HostManager import org.jetbrains.kotlin.konan.target.KonanTarget @@ -131,7 +132,10 @@ abstract class AbstractKotlinNativeTargetPreset( return compilations.all { it.target.platformType == KotlinPlatformType.native } } - val stdlib = defaultLibs(stdlibOnly = true).single() + val stdlib = defaultLibs(stdlibOnly = true).singleOrNull() ?: run { + warnAboutMissingNativeStdlib(project) + return@whenEvaluated + } project.kotlinExtension.sourceSets .filter { it.isIntermediateNativeSourceSet() } @@ -143,7 +147,27 @@ abstract class AbstractKotlinNativeTargetPreset( companion object { private const val KOTLIN_NATIVE_HOME_PRIVATE_PROPERTY = "konanHome" + + private fun warnAboutMissingNativeStdlib(project: Project) { + if (!project.hasProperty("kotlin.native.nostdlib")) { + SingleWarningPerBuild.show( + project, + buildString { + append(NO_NATIVE_STDLIB_WARNING) + if (PropertiesProvider(project).nativeHome != null) + append(NO_NATIVE_STDLIB_PROPERTY_WARNING) + } + ) + } + } + + internal const val NO_NATIVE_STDLIB_WARNING = + "The Kotlin/Native distribution used in this build does not provide the standard library. " + + internal const val NO_NATIVE_STDLIB_PROPERTY_WARNING = + "Make sure that the '${PropertiesProvider.KOTLIN_NATIVE_HOME}' property points to a valid Kotlin/Native distribution." } + } open class KotlinNativeTargetPreset(name: String, project: Project, konanTarget: KonanTarget, kotlinPluginVersion: String) : diff --git a/libraries/tools/kotlin-gradle-plugin/src/test/kotlin/org/jetbrains/kotlin/gradle/internals/ExposedForIntegrationTests.kt b/libraries/tools/kotlin-gradle-plugin/src/test/kotlin/org/jetbrains/kotlin/gradle/internals/ExposedForIntegrationTests.kt index 60cd8af3a71..8fb40228223 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/test/kotlin/org/jetbrains/kotlin/gradle/internals/ExposedForIntegrationTests.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/test/kotlin/org/jetbrains/kotlin/gradle/internals/ExposedForIntegrationTests.kt @@ -5,8 +5,10 @@ package org.jetbrains.kotlin.gradle.internals -import org.jetbrains.kotlin.gradle.targets.native.DisabledNativeTargetsReporter +import org.jetbrains.kotlin.gradle.plugin.mpp.AbstractKotlinNativeTargetPreset.Companion.NO_NATIVE_STDLIB_PROPERTY_WARNING +import org.jetbrains.kotlin.gradle.plugin.mpp.AbstractKotlinNativeTargetPreset.Companion.NO_NATIVE_STDLIB_WARNING import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinProjectStructureMetadata +import org.jetbrains.kotlin.gradle.targets.native.DisabledNativeTargetsReporter import org.w3c.dom.Document fun parseKotlinSourceSetMetadataFromXml(document: Document): KotlinProjectStructureMetadata? = @@ -22,4 +24,7 @@ const val DISABLED_NATIVE_TARGETS_REPORTER_DISABLE_WARNING_PROPERTY_NAME = DisabledNativeTargetsReporter.DISABLE_WARNING_PROPERTY_NAME const val DISABLED_NATIVE_TARGETS_REPORTER_WARNING_PREFIX: String = - DisabledNativeTargetsReporter.WARNING_PREFIX \ No newline at end of file + DisabledNativeTargetsReporter.WARNING_PREFIX + +const val NO_NATIVE_STDLIB_WARNING = NO_NATIVE_STDLIB_WARNING +const val NO_NATIVE_STDLIB_PROPERTY_WARNING = NO_NATIVE_STDLIB_PROPERTY_WARNING \ No newline at end of file