Plumbing KlibMetadataVersion and KlibIrVersion values to klib manifest

This commit is contained in:
Alexander Gorshenev
2019-11-28 03:14:25 +03:00
committed by alexander-gorshenev
parent bf12f7eee0
commit b0f077ff4b
22 changed files with 128 additions and 136 deletions
@@ -1,29 +0,0 @@
package org.jetbrains.kotlin.library
import org.jetbrains.kotlin.konan.parseKonanVersion
import org.jetbrains.kotlin.konan.properties.Properties
import org.jetbrains.kotlin.konan.KonanVersion
data class KonanLibraryVersioning(
val libraryVersion: String?,
val compilerVersion: KonanVersion?,
val abiVersion: KotlinAbiVersion?
)
fun Properties.writeKonanLibraryVersioning(versions: KonanLibraryVersioning) {
versions.abiVersion ?. let { this.setProperty(KLIB_PROPERTY_ABI_VERSION, it.toString()) }
versions.libraryVersion ?. let { this.setProperty(KLIB_PROPERTY_LIBRARY_VERSION, it) }
versions.compilerVersion ?. let { this.setProperty(KLIB_PROPERTY_COMPILER_VERSION, "${versions.compilerVersion.toString(true, true)}") }
}
fun Properties.readKonanLibraryVersioning(): KonanLibraryVersioning {
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()
return KonanLibraryVersioning(
abiVersion = abiVersion,
libraryVersion = libraryVersion,
compilerVersion = compilerVersion
)
}
@@ -8,6 +8,8 @@ const val KLIB_PROPERTY_ABI_VERSION = "abi_version"
const val KLIB_PROPERTY_COMPILER_VERSION = "compiler_version"
const val KLIB_PROPERTY_DEPENDENCY_VERSION = "dependency_version"
const val KLIB_PROPERTY_LIBRARY_VERSION = "library_version"
const val KLIB_PROPERTY_METADATA_VERSION = "metadata_version"
const val KLIB_PROPERTY_IR_VERSION = "ir_version"
const val KLIB_PROPERTY_UNIQUE_NAME = "unique_name"
const val KLIB_PROPERTY_DEPENDS = "depends"
const val KLIB_PROPERTY_PACKAGE = "package"
@@ -21,7 +23,7 @@ const val KLIB_PROPERTY_EXPORT_FORWARD_DECLARATIONS = "exportForwardDeclarations
interface BaseKotlinLibrary {
val libraryName: String
val libraryFile: File
val versions: KonanLibraryVersioning
val versions: KotlinLibraryVersioning
// Whether this library is default (provided by distribution)?
val isDefault: Boolean
val manifestProperties: Properties
@@ -0,0 +1,35 @@
package org.jetbrains.kotlin.library
import org.jetbrains.kotlin.konan.properties.Properties
data class KotlinLibraryVersioning(
val libraryVersion: String?,
val compilerVersion: String?,
val abiVersion: KotlinAbiVersion?,
val metadataVersion: String?,
val irVersion: String?
)
fun Properties.writeKonanLibraryVersioning(versions: KotlinLibraryVersioning) {
versions.abiVersion ?. let { this.setProperty(KLIB_PROPERTY_ABI_VERSION, it.toString()) }
versions.libraryVersion ?. let { this.setProperty(KLIB_PROPERTY_LIBRARY_VERSION, it) }
versions.compilerVersion ?. let { this.setProperty(KLIB_PROPERTY_COMPILER_VERSION, it) }
versions.metadataVersion ?. let { this.setProperty(KLIB_PROPERTY_METADATA_VERSION, it) }
versions.irVersion ?. let { this.setProperty(KLIB_PROPERTY_IR_VERSION, it) }
}
fun Properties.readKonanLibraryVersioning(): KotlinLibraryVersioning {
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)
val metadataVersion = this.getProperty(KLIB_PROPERTY_METADATA_VERSION)
val irVersion = this.getProperty(KLIB_PROPERTY_IR_VERSION)
return KotlinLibraryVersioning(
abiVersion = abiVersion,
libraryVersion = libraryVersion,
compilerVersion = compilerVersion,
metadataVersion = metadataVersion,
irVersion = irVersion
)
}
@@ -8,7 +8,7 @@ package org.jetbrains.kotlin.library
import org.jetbrains.kotlin.konan.properties.Properties
interface BaseWriter {
val versions: KonanLibraryVersioning
val versions: KotlinLibraryVersioning
fun addLinkDependencies(libraries: List<KotlinLibrary>)
fun addManifestAddend(properties: Properties)
fun commit()
@@ -1,9 +1,7 @@
package org.jetbrains.kotlin.library
import org.jetbrains.kotlin.konan.KonanVersion
import org.jetbrains.kotlin.konan.CompilerVersion
import org.jetbrains.kotlin.konan.file.File
import org.jetbrains.kotlin.konan.properties.hasProperty
import org.jetbrains.kotlin.library.impl.createKotlinLibrary
import org.jetbrains.kotlin.util.*
const val KOTLIN_STDLIB_NAME = "stdlib"
@@ -19,7 +17,7 @@ interface SearchPathResolver<L: KotlinLibrary> : WithLogger {
interface SearchPathResolverWithAttributes<L: KotlinLibrary>: SearchPathResolver<L> {
val knownAbiVersions: List<KotlinAbiVersion>?
val knownCompilerVersions: List<KonanVersion>?
val knownCompilerVersions: List<CompilerVersion>?
}
// This is a simple library resolver that only cares for file names.
@@ -159,7 +157,7 @@ abstract class KotlinLibrarySearchPathResolver<L: KotlinLibrary>(
}
}
fun KonanVersion.compatible(other: KonanVersion) =
fun CompilerVersion.compatible(other: CompilerVersion) =
this.major == other.major
&& this.minor == other.minor
&& this.maintenance == other.maintenance
@@ -172,7 +170,7 @@ abstract class KotlinLibraryProperResolverWithAttributes<L: KotlinLibrary>(
repositories: List<String>,
directLibs: List<String>,
override val knownAbiVersions: List<KotlinAbiVersion>?,
override val knownCompilerVersions: List<KonanVersion>?,
override val knownCompilerVersions: List<CompilerVersion>?,
distributionKlib: String?,
localKotlinDir: String?,
skipCurrentDir: Boolean,
@@ -188,23 +186,13 @@ abstract class KotlinLibraryProperResolverWithAttributes<L: KotlinLibrary>(
val candidateAbiVersion = candidate.versions.abiVersion
val candidateLibraryVersion = candidate.versions.libraryVersion
val abiVersionMatch = candidateAbiVersion != null &&
knownAbiVersions != null &&
knownAbiVersions!!.contains(candidateAbiVersion)
val compilerVersionMatch = candidateCompilerVersion != null &&
knownCompilerVersions != null &&
knownCompilerVersions!!.any { it.compatible(candidateCompilerVersion) }
if (!abiVersionMatch && !compilerVersionMatch) {
if (!abiVersionMatch) {
logger.warning("skipping $candidatePath. The abi versions don't match. Expected '${knownAbiVersions}', found '${candidateAbiVersion}'")
if (knownCompilerVersions != null) {
val expected = knownCompilerVersions?.map { it.toString(false, false) }
val found = candidateCompilerVersion?.toString(true, true)
logger.warning("The compiler versions don't match either. Expected '${expected}', found '${found}'")
}
return false
}
@@ -34,7 +34,7 @@ open class BaseKotlinLibraryImpl(
access.inPlace { it.manifestFile.loadProperties() }
}
override val versions: KonanLibraryVersioning by lazy {
override val versions: KotlinLibraryVersioning by lazy {
manifestProperties.readKonanLibraryVersioning()
}
}
@@ -18,7 +18,7 @@ open class KotlinLibraryLayoutForWriter(
open class BaseWriterImpl(
val libraryLayout: KotlinLibraryLayoutForWriter,
moduleName: String,
override val versions: KonanLibraryVersioning,
override val versions: KotlinLibraryVersioning,
val nopack: Boolean = false
) : BaseWriter {
@@ -74,7 +74,7 @@ open class BaseWriterImpl(
class KoltinLibraryWriterImpl(
libDir: File,
moduleName: String,
versions: KonanLibraryVersioning,
versions: KotlinLibraryVersioning,
nopack: Boolean = false,
val layout: KotlinLibraryLayoutForWriter = KotlinLibraryLayoutForWriter(libDir),
@@ -90,7 +90,7 @@ fun buildKoltinLibrary(
linkDependencies: List<KotlinLibrary>,
metadata: SerializedMetadata,
ir: SerializedIrModule,
versions: KonanLibraryVersioning,
versions: KotlinLibraryVersioning,
output: String,
moduleName: String,
nopack: Boolean,