Fix failure with Kotlin/Native distributions that have no stdlib

Add a warning message during Gradle configuration phase if the
Kotlin/Native distribution is missing the stdlib.

Issue #KT-35033 Fixed
This commit is contained in:
sergey.igushkin
2019-11-21 17:30:43 +03:00
committed by Sergey Igushkin
parent 6a28d1da82
commit 88dae8025e
3 changed files with 38 additions and 8 deletions
@@ -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") {
@@ -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<T : KotlinNativeTarget>(
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<T : KotlinNativeTarget>(
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) :
@@ -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
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