From 15eb28a2a8c5d0f09f49770e1c2054b176ff6141 Mon Sep 17 00:00:00 2001 From: alexander-gorshenev Date: Thu, 13 Sep 2018 18:02:57 +0300 Subject: [PATCH] =?UTF-8?q?Allow=20absent=20abiVersion=20and=20compilerVer?= =?UTF-8?q?sion=20in=20library=20manifest,=20just=E2=80=A6=20(#2061)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Allow absent abiVersion and compilerVersion in library manifest, just treat them as mismatching. * Teach `klib info` to print more of library versioning. --- .../org/jetbrains/kotlin/cli/klib/main.kt | 4 ++++ .../konan/library/KonanLibraryVersioning.kt | 14 +++++------ .../konan/library/SearchPathResolver.kt | 24 ++++++++++++------- 3 files changed, 26 insertions(+), 16 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 6e75a3b694c..25e9517dd73 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 @@ -97,12 +97,16 @@ class Library(val name: String, val requestedRepository: String?, val target: St fun info() { val library = libraryInRepoOrCurrentDir(repository, name) val headerAbiVersion = library.versions.abiVersion + val headerCompilerVersion = library.versions.compilerVersion + val headerLibraryVersion = library.versions.libraryVersion val moduleName = ModuleDeserializer(library.moduleHeaderData).moduleName println("") println("Resolved to: ${library.libraryName.File().absolutePath}") println("Module name: $moduleName") println("ABI version: $headerAbiVersion") + println("Compiler version: $headerCompilerVersion") + println("Library version: $headerLibraryVersion") val targets = library.targetList.joinToString(", ") print("Available targets: $targets\n") } diff --git a/shared/src/library/kotlin/org/jetbrains/kotlin/konan/library/KonanLibraryVersioning.kt b/shared/src/library/kotlin/org/jetbrains/kotlin/konan/library/KonanLibraryVersioning.kt index d1947daab66..bafcc7121cd 100644 --- a/shared/src/library/kotlin/org/jetbrains/kotlin/konan/library/KonanLibraryVersioning.kt +++ b/shared/src/library/kotlin/org/jetbrains/kotlin/konan/library/KonanLibraryVersioning.kt @@ -9,20 +9,20 @@ import org.jetbrains.kotlin.konan.parseKonanAbiVersion data class KonanLibraryVersioning( val libraryVersion: String?, - val compilerVersion: KonanVersion, - val abiVersion: KonanAbiVersion + val compilerVersion: KonanVersion?, + val abiVersion: KonanAbiVersion? ) fun Properties.writeKonanLibraryVersioning(versions: KonanLibraryVersioning) { - this.setProperty(KLIB_PROPERTY_ABI_VERSION, versions.abiVersion.toString()) + versions.abiVersion ?. let { this.setProperty(KLIB_PROPERTY_ABI_VERSION, it.toString()) } versions.libraryVersion ?. let { this.setProperty(KLIB_PROPERTY_LIBRARY_VERSION, it) } - this.setProperty(KLIB_PROPERTY_COMPILER_VERSION, "${versions.compilerVersion}") + versions.compilerVersion ?. let { this.setProperty(KLIB_PROPERTY_COMPILER_VERSION, "${versions.compilerVersion}") } } fun Properties.readKonanLibraryVersioning(): KonanLibraryVersioning { - val abiVersion = this.getProperty(KLIB_PROPERTY_ABI_VERSION)!!.parseKonanAbiVersion() + val abiVersion = this.getProperty(KLIB_PROPERTY_ABI_VERSION)?.parseKonanAbiVersion() val libraryVersion = this.getProperty(KLIB_PROPERTY_LIBRARY_VERSION) - val compilerVersion = this.getProperty(KLIB_PROPERTY_COMPILER_VERSION)!!.parseKonanVersion() + val compilerVersion = this.getProperty(KLIB_PROPERTY_COMPILER_VERSION)?.parseKonanVersion() return KonanLibraryVersioning(abiVersion = abiVersion, libraryVersion = libraryVersion, compilerVersion = compilerVersion) -} \ No newline at end of file +} 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 4fe0f171c8d..81fdfd78f88 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 @@ -172,27 +172,33 @@ internal fun SearchPathResolverWithTarget.libraryMatch(candidate: KonanLibraryIm val resolverTarget = this.target val candidatePath = candidate.libraryFile.absolutePath + val candidateCompilerVersion = candidate.versions.compilerVersion + val candidateAbiVersion = candidate.versions.abiVersion + val candidateLibraryVersion = candidate.versions.libraryVersion + if (resolverTarget != null && !candidate.targetList.contains(resolverTarget.visibleName)) { logger("skipping $candidatePath. The target doesn't match. Expected '$resolverTarget', found ${candidate.targetList}") return false } - if (knownCompilerVersions != null && - !knownCompilerVersions!!.contains(candidate.versions.compilerVersion)) { - logger("skipping $candidatePath. The compiler versions don't match. Expected '${knownCompilerVersions}', found '${candidate.versions.compilerVersion}'") + if (candidateCompilerVersion == null || + knownCompilerVersions != null && + !knownCompilerVersions!!.contains(candidateCompilerVersion)) { + logger("skipping $candidatePath. The compiler versions don't match. Expected '${knownCompilerVersions}', found '${candidateCompilerVersion}'") return false } - if (knownAbiVersions != null && - !knownAbiVersions!!.contains(candidate.versions.abiVersion)) { - logger("skipping $candidatePath. The abi versions don't match. Expected '${knownAbiVersions}', found '${candidate.versions.abiVersion}'") + if (candidateAbiVersion == null || + knownAbiVersions != null && + !knownAbiVersions!!.contains(candidateAbiVersion)) { + logger("skipping $candidatePath. The abi versions don't match. Expected '${knownAbiVersions}', found '${candidateAbiVersion}'") return false } - if (candidate.versions.libraryVersion != unresolved.libraryVersion && - candidate.versions.libraryVersion != null && + if (candidateLibraryVersion != unresolved.libraryVersion && + candidateLibraryVersion != null && unresolved.libraryVersion != null) { - logger("skipping $candidatePath. The library versions don't match. Expected '${unresolved.libraryVersion}', found '${candidate.versions.libraryVersion}'") + logger("skipping $candidatePath. The library versions don't match. Expected '${unresolved.libraryVersion}', found '${candidateLibraryVersion}'") return false }