From 6c60951bd86cf6674c65e9ef4cc193d7507c68f4 Mon Sep 17 00:00:00 2001 From: Alexander Gorshenev Date: Thu, 10 Oct 2019 17:37:36 +0300 Subject: [PATCH] Soveral additional library resolver tweaks --- .../org/jetbrains/kotlin/cli/klib/main.kt | 2 +- .../konan/library/SearchPathResolver.kt | 37 ++++++++++++------- 2 files changed, 24 insertions(+), 15 deletions(-) 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 160743bc982..d33a30d432d 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 @@ -13,7 +13,6 @@ import org.jetbrains.kotlin.descriptors.impl.ModuleDescriptorImpl import org.jetbrains.kotlin.descriptors.konan.isKonanStdlib import org.jetbrains.kotlin.konan.file.File import org.jetbrains.kotlin.library.KLIB_FILE_EXTENSION_WITH_DOT -import org.jetbrains.kotlin.library.resolverByName import org.jetbrains.kotlin.konan.target.Distribution import org.jetbrains.kotlin.konan.target.PlatformManager import org.jetbrains.kotlin.konan.util.DependencyProcessor @@ -22,6 +21,7 @@ import org.jetbrains.kotlin.konan.utils.KonanFactories.DefaultDeserializedDescri import org.jetbrains.kotlin.util.Logger import org.jetbrains.kotlin.library.metadata.KlibMetadataProtoBuf import org.jetbrains.kotlin.konan.library.KonanLibrary +import org.jetbrains.kotlin.konan.library.resolverByName import org.jetbrains.kotlin.library.metadata.parseModuleHeader import org.jetbrains.kotlin.storage.LockBasedStorageManager import java.lang.System.out diff --git a/shared/src/library/kotlin/org/jetbrains/kotlin/konan/library/SearchPathResolver.kt b/shared/src/library/kotlin/org/jetbrains/kotlin/konan/library/SearchPathResolver.kt index 7c8b3e7fdfc..ddd46a22121 100644 --- a/shared/src/library/kotlin/org/jetbrains/kotlin/konan/library/SearchPathResolver.kt +++ b/shared/src/library/kotlin/org/jetbrains/kotlin/konan/library/SearchPathResolver.kt @@ -7,6 +7,7 @@ import org.jetbrains.kotlin.konan.library.impl.createKonanLibrary import org.jetbrains.kotlin.konan.target.Distribution import org.jetbrains.kotlin.konan.target.KonanTarget import org.jetbrains.kotlin.library.* +import org.jetbrains.kotlin.library.impl.createKotlinLibrary import org.jetbrains.kotlin.util.DummyLogger import org.jetbrains.kotlin.util.Logger @@ -43,6 +44,25 @@ fun defaultResolver( logger ) +fun resolverByName( + repositories: List, + directLibs: List = emptyList(), + distributionKlib: String? = null, + localKotlinDir: String? = null, + skipCurrentDir: Boolean = false, + logger: Logger +): SearchPathResolver = + object : KotlinLibrarySearchPathResolver( + repositories, + directLibs, + distributionKlib, + localKotlinDir, + skipCurrentDir, + logger + ) { + override fun libraryBuilder(file: File, isDefault: Boolean) = createKonanLibrary(file, null, isDefault) + } + internal class KonanLibraryProperResolver( repositories: List, directLibs: List, @@ -60,25 +80,14 @@ internal class KonanLibraryProperResolver( distributionKlib, localKonanDir, skipCurrentDir, - logger, - {file: File, isDefaultLink: Boolean -> createKonanLibrary(file, target, isDefaultLink)} + logger ), SearchPathResolverWithTarget { + override fun libraryBuilder(file: File, isDefault: Boolean) = createKonanLibrary(file, target, isDefault) + override val distPlatformHead: File? get() = distributionKlib?.File()?.child("platform")?.child(target.visibleName) - override fun resolve(unresolved: UnresolvedLibrary, isDefaultLink: Boolean): KonanLibraryImpl { - val givenPath = unresolved.path - val fileSequence = resolutionSequence(givenPath) - val matching = fileSequence.map { createKonanLibrary(it, target, isDefaultLink) as KonanLibraryImpl } - .map { it.takeIf { libraryMatch(it, unresolved) } } - .filterNotNull() - - return matching.firstOrNull() ?: run { - logger.fatal("Could not find \"$givenPath\" in ${searchRoots.map { it.absolutePath }}.") - } - } - override fun libraryMatch(candidate: KonanLibrary, unresolved: UnresolvedLibrary): Boolean { val resolverTarget = this.target val candidatePath = candidate.libraryFile.absolutePath