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
|
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.*
|
||||||
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.plugin.ProjectLocalConfigurations
|
import org.jetbrains.kotlin.gradle.plugin.ProjectLocalConfigurations
|
||||||
import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinJvmWithJavaTargetPreset
|
import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinJvmWithJavaTargetPreset
|
||||||
import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinMultiplatformPlugin
|
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.CompilerOutputKind
|
||||||
import org.jetbrains.kotlin.konan.target.HostManager
|
import org.jetbrains.kotlin.konan.target.HostManager
|
||||||
import org.junit.Assert
|
import org.junit.Assert
|
||||||
import org.junit.Assume
|
|
||||||
import org.junit.Ignore
|
import org.junit.Ignore
|
||||||
import org.junit.Test
|
import org.junit.Test
|
||||||
import java.util.jar.JarFile
|
import java.util.jar.JarFile
|
||||||
@@ -1486,13 +1483,17 @@ class NewMultiplatformIT : BaseGradleIT() {
|
|||||||
assertSuccessful()
|
assertSuccessful()
|
||||||
assertContains("User-provided Kotlin/Native distribution: $currentDir")
|
assertContains("User-provided Kotlin/Native distribution: $currentDir")
|
||||||
assertNotContains("Project property 'org.jetbrains.kotlin.native.home' is deprecated")
|
assertNotContains("Project property 'org.jetbrains.kotlin.native.home' is deprecated")
|
||||||
|
assertContains(NO_NATIVE_STDLIB_WARNING)
|
||||||
|
assertContains(NO_NATIVE_STDLIB_PROPERTY_WARNING)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Deprecated property.
|
// Deprecated property.
|
||||||
build("tasks", "-Porg.jetbrains.kotlin.native.home=$currentDir") {
|
build("tasks", "-Porg.jetbrains.kotlin.native.home=$currentDir", "-Pkotlin.native.nostdlib=true") {
|
||||||
assertSuccessful()
|
assertSuccessful()
|
||||||
assertContains("User-provided Kotlin/Native distribution: $currentDir")
|
assertContains("User-provided Kotlin/Native distribution: $currentDir")
|
||||||
assertContains("Project property 'org.jetbrains.kotlin.native.home' is deprecated")
|
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") {
|
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.plugin.PropertiesProvider
|
||||||
import org.jetbrains.kotlin.gradle.targets.native.DisabledNativeTargetsReporter
|
import org.jetbrains.kotlin.gradle.targets.native.DisabledNativeTargetsReporter
|
||||||
import org.jetbrains.kotlin.gradle.utils.NativeCompilerDownloader
|
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.HostManager
|
||||||
import org.jetbrains.kotlin.konan.target.KonanTarget
|
import org.jetbrains.kotlin.konan.target.KonanTarget
|
||||||
|
|
||||||
@@ -131,7 +132,10 @@ abstract class AbstractKotlinNativeTargetPreset<T : KotlinNativeTarget>(
|
|||||||
return compilations.all { it.target.platformType == KotlinPlatformType.native }
|
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
|
project.kotlinExtension.sourceSets
|
||||||
.filter { it.isIntermediateNativeSourceSet() }
|
.filter { it.isIntermediateNativeSourceSet() }
|
||||||
@@ -143,7 +147,27 @@ abstract class AbstractKotlinNativeTargetPreset<T : KotlinNativeTarget>(
|
|||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
private const val KOTLIN_NATIVE_HOME_PRIVATE_PROPERTY = "konanHome"
|
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) :
|
open class KotlinNativeTargetPreset(name: String, project: Project, konanTarget: KonanTarget, kotlinPluginVersion: String) :
|
||||||
|
|||||||
+6
-1
@@ -5,8 +5,10 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.gradle.internals
|
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.plugin.mpp.KotlinProjectStructureMetadata
|
||||||
|
import org.jetbrains.kotlin.gradle.targets.native.DisabledNativeTargetsReporter
|
||||||
import org.w3c.dom.Document
|
import org.w3c.dom.Document
|
||||||
|
|
||||||
fun parseKotlinSourceSetMetadataFromXml(document: Document): KotlinProjectStructureMetadata? =
|
fun parseKotlinSourceSetMetadataFromXml(document: Document): KotlinProjectStructureMetadata? =
|
||||||
@@ -23,3 +25,6 @@ const val DISABLED_NATIVE_TARGETS_REPORTER_DISABLE_WARNING_PROPERTY_NAME =
|
|||||||
|
|
||||||
const val DISABLED_NATIVE_TARGETS_REPORTER_WARNING_PREFIX: String =
|
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