From 6dc6ba51378635bd173a7edf424e75b445b32007 Mon Sep 17 00:00:00 2001 From: Alexander Gorshenev Date: Sun, 22 Apr 2018 15:32:26 +0300 Subject: [PATCH] Allow arch and family susbtitutions in manifest files. --- .../library/impl/KonanLibraryReaderImpl.kt | 6 ++++- .../jetbrains/kotlin/konan/util/DefFile.kt | 17 ------------ .../kotlin/konan/util/Substitution.kt | 27 +++++++++++++++++++ .../kotlin/konan/util/TargetDefFile.kt | 8 +----- 4 files changed, 33 insertions(+), 25 deletions(-) create mode 100644 shared/src/main/kotlin/org/jetbrains/kotlin/konan/util/Substitution.kt diff --git a/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/library/impl/KonanLibraryReaderImpl.kt b/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/library/impl/KonanLibraryReaderImpl.kt index 59ddb87fa17..26e4f5f3781 100644 --- a/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/library/impl/KonanLibraryReaderImpl.kt +++ b/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/library/impl/KonanLibraryReaderImpl.kt @@ -24,6 +24,8 @@ import org.jetbrains.kotlin.konan.file.File import org.jetbrains.kotlin.konan.properties.* import org.jetbrains.kotlin.config.LanguageVersionSettings import org.jetbrains.kotlin.konan.target.KonanTarget +import org.jetbrains.kotlin.konan.util.defaultTargetSubstitutions +import org.jetbrains.kotlin.konan.util.substitute class LibraryReaderImpl(var libraryFile: File, val currentAbiVersion: Int, val target: KonanTarget? = null, override val isDefaultLibrary: Boolean = false) @@ -39,7 +41,9 @@ class LibraryReaderImpl(var libraryFile: File, val currentAbiVersion: Int, private val reader = MetadataReaderImpl(inPlace) override val manifestProperties: Properties by lazy { - inPlace.manifestFile.loadProperties() + val properties = inPlace.manifestFile.loadProperties() + if (target != null) substitute(properties, defaultTargetSubstitutions(target)) + properties } val abiVersion: String diff --git a/shared/src/main/kotlin/org/jetbrains/kotlin/konan/util/DefFile.kt b/shared/src/main/kotlin/org/jetbrains/kotlin/konan/util/DefFile.kt index 463334db7e1..3d64e73ee72 100644 --- a/shared/src/main/kotlin/org/jetbrains/kotlin/konan/util/DefFile.kt +++ b/shared/src/main/kotlin/org/jetbrains/kotlin/konan/util/DefFile.kt @@ -141,21 +141,4 @@ private fun parseDefFile(file: File?, substitutions: Map): Tripl return Triple(properties, manifestAddendProperties, headerLines) } -// Performs substitution similar to: -// foo = ${foo} ${foo.${arch}} ${foo.${os}} -fun substitute(properties: Properties, substitutions: Map) { - for (key in properties.stringPropertyNames()) { - for (substitution in substitutions.values) { - val suffix = ".$substitution" - if (key.endsWith(suffix)) { - val baseKey = key.removeSuffix(suffix) - val oldValue = properties.getProperty(baseKey, "") - val appendedValue = properties.getProperty(key, "") - val newValue = if (oldValue != "") "$oldValue $appendedValue" else appendedValue - properties.setProperty(baseKey, newValue) - } - } - } -} - private fun Properties.duplicate() = Properties().apply { putAll(this@duplicate) } diff --git a/shared/src/main/kotlin/org/jetbrains/kotlin/konan/util/Substitution.kt b/shared/src/main/kotlin/org/jetbrains/kotlin/konan/util/Substitution.kt new file mode 100644 index 00000000000..10c49fd3477 --- /dev/null +++ b/shared/src/main/kotlin/org/jetbrains/kotlin/konan/util/Substitution.kt @@ -0,0 +1,27 @@ +package org.jetbrains.kotlin.konan.util + +import org.jetbrains.kotlin.konan.target.KonanTarget +import java.util.* + +fun defaultTargetSubstitutions(target: KonanTarget) = + mapOf( + "target" to target.visibleName, + "arch" to target.architecture.visibleName, + "family" to target.family.visibleName) + +// Performs substitution similar to: +// foo = ${foo} ${foo.${arch}} ${foo.${os}} +fun substitute(properties: Properties, substitutions: Map) { + for (key in properties.stringPropertyNames()) { + for (substitution in substitutions.values) { + val suffix = ".$substitution" + if (key.endsWith(suffix)) { + val baseKey = key.removeSuffix(suffix) + val oldValue = properties.getProperty(baseKey, "") + val appendedValue = properties.getProperty(key, "") + val newValue = if (oldValue != "") "$oldValue $appendedValue" else appendedValue + properties.setProperty(baseKey, newValue) + } + } + } +} diff --git a/shared/src/main/kotlin/org/jetbrains/kotlin/konan/util/TargetDefFile.kt b/shared/src/main/kotlin/org/jetbrains/kotlin/konan/util/TargetDefFile.kt index f2b929153f4..860af6b16fd 100644 --- a/shared/src/main/kotlin/org/jetbrains/kotlin/konan/util/TargetDefFile.kt +++ b/shared/src/main/kotlin/org/jetbrains/kotlin/konan/util/TargetDefFile.kt @@ -3,10 +3,4 @@ package org.jetbrains.kotlin.konan.util import org.jetbrains.kotlin.konan.target.KonanTarget import java.io.File -fun defaultTargetSubstitutions(target: KonanTarget) = - mapOf( - "target" to target.visibleName, - "arch" to target.architecture.visibleName, - "family" to target.family.visibleName) - -fun DefFile(file: File?, target: KonanTarget) = DefFile(file, defaultTargetSubstitutions(target)) \ No newline at end of file +fun DefFile(file: File?, target: KonanTarget) = DefFile(file, defaultTargetSubstitutions(target))