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:
committed by
Sergey Igushkin
parent
6a28d1da82
commit
88dae8025e
+6
-5
@@ -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") {
|
||||
|
||||
+25
-1
@@ -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) :
|
||||
|
||||
+7
-2
@@ -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
|
||||
Reference in New Issue
Block a user