Soveral additional library resolver tweaks
This commit is contained in:
committed by
alexander-gorshenev
parent
c59896b6d1
commit
6c60951bd8
@@ -13,7 +13,6 @@ import org.jetbrains.kotlin.descriptors.impl.ModuleDescriptorImpl
|
|||||||
import org.jetbrains.kotlin.descriptors.konan.isKonanStdlib
|
import org.jetbrains.kotlin.descriptors.konan.isKonanStdlib
|
||||||
import org.jetbrains.kotlin.konan.file.File
|
import org.jetbrains.kotlin.konan.file.File
|
||||||
import org.jetbrains.kotlin.library.KLIB_FILE_EXTENSION_WITH_DOT
|
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.Distribution
|
||||||
import org.jetbrains.kotlin.konan.target.PlatformManager
|
import org.jetbrains.kotlin.konan.target.PlatformManager
|
||||||
import org.jetbrains.kotlin.konan.util.DependencyProcessor
|
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.util.Logger
|
||||||
import org.jetbrains.kotlin.library.metadata.KlibMetadataProtoBuf
|
import org.jetbrains.kotlin.library.metadata.KlibMetadataProtoBuf
|
||||||
import org.jetbrains.kotlin.konan.library.KonanLibrary
|
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.library.metadata.parseModuleHeader
|
||||||
import org.jetbrains.kotlin.storage.LockBasedStorageManager
|
import org.jetbrains.kotlin.storage.LockBasedStorageManager
|
||||||
import java.lang.System.out
|
import java.lang.System.out
|
||||||
|
|||||||
+23
-14
@@ -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.Distribution
|
||||||
import org.jetbrains.kotlin.konan.target.KonanTarget
|
import org.jetbrains.kotlin.konan.target.KonanTarget
|
||||||
import org.jetbrains.kotlin.library.*
|
import org.jetbrains.kotlin.library.*
|
||||||
|
import org.jetbrains.kotlin.library.impl.createKotlinLibrary
|
||||||
import org.jetbrains.kotlin.util.DummyLogger
|
import org.jetbrains.kotlin.util.DummyLogger
|
||||||
import org.jetbrains.kotlin.util.Logger
|
import org.jetbrains.kotlin.util.Logger
|
||||||
|
|
||||||
@@ -43,6 +44,25 @@ fun defaultResolver(
|
|||||||
logger
|
logger
|
||||||
)
|
)
|
||||||
|
|
||||||
|
fun resolverByName(
|
||||||
|
repositories: List<String>,
|
||||||
|
directLibs: List<String> = emptyList(),
|
||||||
|
distributionKlib: String? = null,
|
||||||
|
localKotlinDir: String? = null,
|
||||||
|
skipCurrentDir: Boolean = false,
|
||||||
|
logger: Logger
|
||||||
|
): SearchPathResolver<KotlinLibrary> =
|
||||||
|
object : KotlinLibrarySearchPathResolver<KotlinLibrary>(
|
||||||
|
repositories,
|
||||||
|
directLibs,
|
||||||
|
distributionKlib,
|
||||||
|
localKotlinDir,
|
||||||
|
skipCurrentDir,
|
||||||
|
logger
|
||||||
|
) {
|
||||||
|
override fun libraryBuilder(file: File, isDefault: Boolean) = createKonanLibrary(file, null, isDefault)
|
||||||
|
}
|
||||||
|
|
||||||
internal class KonanLibraryProperResolver(
|
internal class KonanLibraryProperResolver(
|
||||||
repositories: List<String>,
|
repositories: List<String>,
|
||||||
directLibs: List<String>,
|
directLibs: List<String>,
|
||||||
@@ -60,25 +80,14 @@ internal class KonanLibraryProperResolver(
|
|||||||
distributionKlib,
|
distributionKlib,
|
||||||
localKonanDir,
|
localKonanDir,
|
||||||
skipCurrentDir,
|
skipCurrentDir,
|
||||||
logger,
|
logger
|
||||||
{file: File, isDefaultLink: Boolean -> createKonanLibrary(file, target, isDefaultLink)}
|
|
||||||
), SearchPathResolverWithTarget<KonanLibrary>
|
), SearchPathResolverWithTarget<KonanLibrary>
|
||||||
{
|
{
|
||||||
|
override fun libraryBuilder(file: File, isDefault: Boolean) = createKonanLibrary(file, target, isDefault)
|
||||||
|
|
||||||
override val distPlatformHead: File?
|
override val distPlatformHead: File?
|
||||||
get() = distributionKlib?.File()?.child("platform")?.child(target.visibleName)
|
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 {
|
override fun libraryMatch(candidate: KonanLibrary, unresolved: UnresolvedLibrary): Boolean {
|
||||||
val resolverTarget = this.target
|
val resolverTarget = this.target
|
||||||
val candidatePath = candidate.libraryFile.absolutePath
|
val candidatePath = candidate.libraryFile.absolutePath
|
||||||
|
|||||||
Reference in New Issue
Block a user