From cfe76343d50faba0fed46e87178e4dbcbdcf901f Mon Sep 17 00:00:00 2001 From: Pavel Punegov Date: Fri, 1 Apr 2022 16:04:19 +0300 Subject: [PATCH] [Commonizer][test] Get K/N distribution in the test instead of the build Get distribution and home path in the test to simplify gradle build. Using NativeCompilerDownloader in the build led to the undesired results where test get old K/N compiler from the bootstrap, also blocking K/N version class development. --- native/commonizer-api/build.gradle.kts | 68 ++----------------- .../kotlin/commonizer/utils/konanHome.kt | 28 ++++++-- 2 files changed, 28 insertions(+), 68 deletions(-) diff --git a/native/commonizer-api/build.gradle.kts b/native/commonizer-api/build.gradle.kts index d1eaafe34b1..33a0de5f118 100644 --- a/native/commonizer-api/build.gradle.kts +++ b/native/commonizer-api/build.gradle.kts @@ -1,18 +1,3 @@ -import org.jetbrains.kotlin.gradle.utils.NativeCompilerDownloader - -buildscript { - val cacheRedirectorEnabled = findProperty("cacheRedirectorEnabled")?.toString()?.toBoolean() ?: false - dependencies { - classpath("org.jetbrains.kotlin:kotlin-build-gradle-plugin:0.0.36") - } - repositories { - if (cacheRedirectorEnabled) - maven("https://cache-redirector.jetbrains.com/maven.pkg.jetbrains.space/kotlin/p/kotlin/kotlin-dependencies") - else - maven("https://maven.pkg.jetbrains.space/kotlin/p/kotlin/kotlin-dependencies") - } -} - plugins { kotlin("jvm") id("jps-compatible") @@ -32,6 +17,11 @@ dependencies { testImplementation(commonDependency("junit:junit")) testImplementation(projectTests(":compiler:tests-common")) testRuntimeOnly(project(":native:kotlin-klib-commonizer")) + testImplementation(project(":kotlin-gradle-plugin")) + testImplementation(project(":kotlin-gradle-plugin-model")) + testImplementation(gradleApi()) + testImplementation(gradleTestKit()) + testImplementation(gradleKotlinDsl()) } sourceSets { @@ -39,57 +29,9 @@ sourceSets { "test" { projectDefault() } } -/** - * TODO: This version hack on migrating period K/N into repository Kotlin, in new build infrostructure zero maintance claus isn't dropped, - * so for old builds we need to keep this version to string representation till total switch on new infrostructure. - */ -val konanVersion = object : org.jetbrains.kotlin.konan.CompilerVersion by NativeCompilerDownloader.DEFAULT_KONAN_VERSION { - override fun toString(showMeta: Boolean, showBuild: Boolean) = buildString { - if (major > 1 - || minor > 5 - || maintenance > 20 - ) - return NativeCompilerDownloader.DEFAULT_KONAN_VERSION.toString(showMeta, showBuild) - append(major) - append('.') - append(minor) - if (maintenance != 0) { - append('.') - append(maintenance) - } - if (milestone != -1) { - append("-M") - append(milestone) - } - if (showMeta) { - append('-') - append(meta.metaString) - } - if (showBuild && build != -1) { - append('-') - append(build) - } - } - - override fun toString() = toString( - meta != org.jetbrains.kotlin.konan.MetaVersion.RELEASE, - meta != org.jetbrains.kotlin.konan.MetaVersion.RELEASE - ) -} - -tasks.register("downloadNativeCompiler") { - doFirst { - if (NativeCompilerDownloader(project, konanVersion).compilerDirectory.exists()) return@doFirst - NativeCompilerDownloader(project, konanVersion).downloadIfNeeded() - } -} - - projectTest(parallel = false) { dependsOn(":dist") - dependsOn("downloadNativeCompiler") workingDir = projectDir - environment("KONAN_HOME", NativeCompilerDownloader(project, konanVersion).compilerDirectory.absolutePath) } runtimeJar() diff --git a/native/commonizer-api/test/org/jetbrains/kotlin/commonizer/utils/konanHome.kt b/native/commonizer-api/test/org/jetbrains/kotlin/commonizer/utils/konanHome.kt index 0a5545330e0..ddca0b9648d 100644 --- a/native/commonizer-api/test/org/jetbrains/kotlin/commonizer/utils/konanHome.kt +++ b/native/commonizer-api/test/org/jetbrains/kotlin/commonizer/utils/konanHome.kt @@ -5,10 +5,28 @@ package org.jetbrains.kotlin.commonizer.utils +import org.gradle.api.internal.project.ProjectInternal +import org.gradle.testfixtures.ProjectBuilder +import org.jetbrains.kotlin.gradle.dsl.KotlinMultiplatformExtension +import org.jetbrains.kotlin.gradle.dsl.kotlinExtension +import org.jetbrains.kotlin.gradle.utils.NativeCompilerDownloader import java.io.File -internal val konanHome: File - get() { - val konanHomePath = System.getenv("KONAN_HOME")?.toString() ?: error("Missing KONAN_HOME environment variable") - return File(konanHomePath) - } +internal val konanHome: File by lazy { + val project = ProjectBuilder + .builder() + .build() + ?.run { + project.plugins.apply("kotlin-multiplatform") + + (project.kotlinExtension as KotlinMultiplatformExtension).apply { + macosX64() + macosArm64() + linuxX64() + mingwX64() + } + this + } as ProjectInternal + project.evaluate() + NativeCompilerDownloader(project).compilerDirectory +} \ No newline at end of file