diff --git a/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/library/SearchPathResolver.kt b/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/library/SearchPathResolver.kt index a923ffc990c..c8751b6da86 100644 --- a/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/library/SearchPathResolver.kt +++ b/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/library/SearchPathResolver.kt @@ -37,7 +37,7 @@ fun defaultResolver(repositories: List, target: KonanTarget, distributio repositories, target, distribution.klib, - distribution.localKonanDir + distribution.localKonanDir.absolutePath ) fun SearchPathResolver.resolveImmediateLibraries(libraryNames: List, diff --git a/dependencies/build.gradle b/dependencies/build.gradle index 915e5c49a43..64af23f4fdc 100644 --- a/dependencies/build.gradle +++ b/dependencies/build.gradle @@ -171,5 +171,7 @@ task update(type: Copy) { } task rmDotKonan(type: Delete) { - delete "${System.getProperty("user.home")}/.konan" + def dir = System.getenv("KONAN_DATA_DIR") ?: "${System.getProperty("user.home")}/.konan" + delete dir } + diff --git a/klib/src/main/kotlin/org/jetbrains/kotlin/cli/klib/main.kt b/klib/src/main/kotlin/org/jetbrains/kotlin/cli/klib/main.kt index 1b91f39c4d8..17c9fd2413e 100644 --- a/klib/src/main/kotlin/org/jetbrains/kotlin/cli/klib/main.kt +++ b/klib/src/main/kotlin/org/jetbrains/kotlin/cli/klib/main.kt @@ -30,6 +30,7 @@ import org.jetbrains.kotlin.descriptors.impl.ModuleDescriptorImpl import org.jetbrains.kotlin.konan.file.File import org.jetbrains.kotlin.konan.target.Distribution import org.jetbrains.kotlin.konan.target.PlatformManager +import org.jetbrains.kotlin.konan.util.DependencyProcessor import org.jetbrains.kotlin.metadata.KonanLinkData import java.lang.System.out import kotlin.system.exitProcess @@ -84,8 +85,7 @@ fun error(text: String) { exitProcess(1) } -// TODO: Get rid of the hardcoded path. -val defaultRepository = File(File.userHome, ".konan/klib") +val defaultRepository = File(DependencyProcessor.localKonanDir.resolve("klib").absolutePath) open class ModuleDeserializer(val library: ByteArray) { protected val moduleHeader: KonanLinkData.LinkDataLibrary diff --git a/shared/src/main/kotlin/org/jetbrains/kotlin/konan/target/Distribution.kt b/shared/src/main/kotlin/org/jetbrains/kotlin/konan/target/Distribution.kt index 030e73278fc..241f14a9e98 100644 --- a/shared/src/main/kotlin/org/jetbrains/kotlin/konan/target/Distribution.kt +++ b/shared/src/main/kotlin/org/jetbrains/kotlin/konan/target/Distribution.kt @@ -26,7 +26,7 @@ class Distribution( private val konanHomeOverride: String? = null, private val runtimeFileOverride: String? = null) { - val localKonanDir = "${File.userHome}/.konan" + val localKonanDir = DependencyProcessor.localKonanDir private fun findKonanHome(): String { if (konanHomeOverride != null) return konanHomeOverride @@ -52,7 +52,7 @@ class Distribution( propertyFilesFromConfigDir(konanSubdir, genericName) private fun userPropertyFiles(genericName: String) = - propertyFilesFromConfigDir(localKonanDir, genericName) + propertyFilesFromConfigDir(localKonanDir.absolutePath, genericName) fun additionalPropertyFiles(genericName: String) = preconfiguredPropertyFiles(genericName) + userPropertyFiles(genericName) diff --git a/shared/src/main/kotlin/org/jetbrains/kotlin/konan/util/DependencyProcessor.kt b/shared/src/main/kotlin/org/jetbrains/kotlin/konan/util/DependencyProcessor.kt index 19a31ad8ed0..ba04b4b6937 100644 --- a/shared/src/main/kotlin/org/jetbrains/kotlin/konan/util/DependencyProcessor.kt +++ b/shared/src/main/kotlin/org/jetbrains/kotlin/konan/util/DependencyProcessor.kt @@ -45,9 +45,6 @@ private val Properties.downloadingAttemptIntervalMs : Long get() = getProperty("downloadingAttemptPauseMs")?.toLong() ?: DependencyDownloader.DEFAULT_ATTEMPT_INTERVAL_MS -private val Properties.homeDependencyCache : String - get() = getProperty("homeDependencyCache") ?: DependencyProcessor.DEFAULT_HOME_DEPENDENCY_CACHE - private fun Properties.findCandidates(dependencies: List): Map> { val dependencyProfiles = this.propertyList("dependencyProfiles") return dependencies.map { dependency -> @@ -73,7 +70,6 @@ private val KonanPropertiesLoader.dependenciesUrl : String get() = pr private val KonanPropertiesLoader.airplaneMode : Boolean get() = properties.airplaneMode private val KonanPropertiesLoader.downloadingAttempts : Int get() = properties.downloadingAttempts private val KonanPropertiesLoader.downloadingAttemptIntervalMs : Long get() = properties.downloadingAttemptIntervalMs -private val KonanPropertiesLoader.homeDependencyCache : String get() = properties.homeDependencyCache sealed class DependencySource { data class Local(val path: File) : DependencySource() @@ -91,7 +87,7 @@ sealed class DependencySource { class DependencyProcessor(dependenciesRoot: File, val dependenciesUrl: String, dependencyToCandidates: Map>, - homeDependencyCache: String = DEFAULT_HOME_DEPENDENCY_CACHE, + homeDependencyCache: File = defaultDependencyCacheDir, val airplaneMode: Boolean = false, maxAttempts: Int = DependencyDownloader.DEFAULT_MAX_ATTEMPTS, attemptIntervalMs: Long = DependencyDownloader.DEFAULT_ATTEMPT_INTERVAL_MS, @@ -99,9 +95,7 @@ class DependencyProcessor(dependenciesRoot: File, val keepUnstable: Boolean = true) { val dependenciesDirectory = dependenciesRoot.apply { mkdirs() } - val cacheDirectory = System.getProperty("user.home")?.let { - Paths.get(it).resolve(homeDependencyCache).toFile().apply { mkdirs() } - } ?: dependenciesRoot + val cacheDirectory = homeDependencyCache.apply { mkdirs() } val lockFile = File(cacheDirectory, ".lock").apply { if (!exists()) createNewFile() } @@ -212,11 +206,16 @@ class DependencyProcessor(dependenciesRoot: File, companion object { private val lock = ReentrantLock() - const val DEFAULT_HOME_DEPENDENCY_CACHE = ".konan/cache" + val localKonanDir: File by lazy { + File(System.getenv("KONAN_DATA_DIR") ?: (System.getProperty("user.home") + File.separator + ".konan")) + } @JvmStatic - val defaultDependenciesRoot - get() = Paths.get(System.getProperty("user.home")).resolve(".konan/dependencies").toFile() + val defaultDependenciesRoot: File + get() = localKonanDir.resolve("dependencies") + + val defaultDependencyCacheDir: File + get() = localKonanDir.resolve("cache") } private val resolvedDependencies = dependencyToCandidates.map { (dependency, candidates) -> diff --git a/tools/kotlin-native-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KonanPlugin.kt b/tools/kotlin-native-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KonanPlugin.kt index 22f016f6421..5640dfb8695 100644 --- a/tools/kotlin-native-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KonanPlugin.kt +++ b/tools/kotlin-native-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KonanPlugin.kt @@ -26,6 +26,7 @@ import org.jetbrains.kotlin.gradle.plugin.tasks.* import org.jetbrains.kotlin.konan.target.HostManager import org.jetbrains.kotlin.konan.target.KonanTarget import org.jetbrains.kotlin.konan.target.customerDistribution +import org.jetbrains.kotlin.konan.util.* import java.io.File import java.util.* import javax.inject.Inject @@ -129,7 +130,7 @@ internal fun Project.konanCompilerName(): String = "kotlin-native-${project.simpleOsName}-${this.konanVersion}" internal fun Project.konanCompilerDownloadDir(): String = - KonanCompilerDownloadTask.KONAN_PARENT_DIR + "/" + project.konanCompilerName() + DependencyProcessor.localKonanDir.resolve(project.konanCompilerName()).absolutePath // region Useful extensions and functions --------------------------------------- diff --git a/tools/kotlin-native-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/tasks/KonanCompilerDownloadTask.kt b/tools/kotlin-native-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/tasks/KonanCompilerDownloadTask.kt index e5612b48893..2b833317644 100644 --- a/tools/kotlin-native-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/tasks/KonanCompilerDownloadTask.kt +++ b/tools/kotlin-native-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/tasks/KonanCompilerDownloadTask.kt @@ -31,8 +31,6 @@ open class KonanCompilerDownloadTask : DefaultTask() { internal companion object { internal const val BASE_DOWNLOAD_URL = "https://download.jetbrains.com/kotlin/native/builds" - - internal val KONAN_PARENT_DIR = "${System.getProperty("user.home")}/.konan" } /** @@ -61,9 +59,10 @@ open class KonanCompilerDownloadTask : DefaultTask() { append(project.simpleOsName) } val konanCompiler = project.konanCompilerName() - logger.info("Downloading Kotlin/Native compiler from $downloadUrlDirectory/$konanCompiler into $KONAN_PARENT_DIR") + val parentDir = DependencyProcessor.localKonanDir + logger.info("Downloading Kotlin/Native compiler from $downloadUrlDirectory/$konanCompiler into $parentDir") DependencyProcessor( - File(KONAN_PARENT_DIR), + parentDir, downloadUrlDirectory, mapOf(konanCompiler to listOf(DependencySource.Remote.Public)) ).run()