Plumbing KlibMetadataVersion and KlibIrVersion values to klib manifest
This commit is contained in:
committed by
alexander-gorshenev
parent
bf12f7eee0
commit
b0f077ff4b
@@ -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,
|
||||
|
||||
Reference in New Issue
Block a user