A little bit more of utils abstracting us from java api.

This commit is contained in:
Alexander Gorshenev
2017-06-28 12:29:28 +03:00
committed by alexander-gorshenev
parent 0582d8f1bd
commit edde21827c
8 changed files with 65 additions and 66 deletions
@@ -42,7 +42,7 @@ private fun maybeExecuteHelper(targetName: String) {
val distribution = Distribution(TargetManager(targetName))
val result = ctor.call(
distribution.dependenciesDir,
distribution.properties.properties,
distribution.properties,
distribution.dependencies
)
result.run()
@@ -16,21 +16,20 @@
package org.jetbrains.kotlin.backend.konan
import java.io.File
import org.jetbrains.kotlin.konan.target.*
import org.jetbrains.kotlin.backend.konan.util.*
class Distribution(val targetManager: TargetManager,
val propertyFileOverride: String? = null,
val runtimeFileOverride: String? = null) {
val target = targetManager.target
val targetName = targetManager.targetName
val hostSuffix = targetManager.hostSuffix
val hostTargetSuffix = targetManager.hostTargetSuffix
val targetSuffix = targetManager.targetSuffix
private fun findUserHome() = File(System.getProperty("user.home")).absolutePath
val userHome = findUserHome()
val localKonanDir = "$userHome/.konan"
val localKonanDir = "${File.userHome}/.konan"
private fun findKonanHome(): String {
val value = System.getProperty("konan.home", "dist")
@@ -39,8 +38,8 @@ class Distribution(val targetManager: TargetManager,
}
val konanHome = findKonanHome()
val propertyFile = propertyFileOverride ?: "$konanHome/konan/konan.properties"
val properties = KonanProperties(propertyFile)
val propertyFileName = propertyFileOverride ?: "$konanHome/konan/konan.properties"
val properties = File(propertyFileName).loadProperties()
val klib = "$konanHome/klib"
@@ -1,47 +0,0 @@
/*
* Copyright 2010-2017 JetBrains s.r.o.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.jetbrains.kotlin.backend.konan
import org.jetbrains.kotlin.backend.konan.util.*
public class KonanProperties(val propertyFile: String) {
val properties = Properties()
fun String.suffix(suf: String?): String =
if (suf == null) this
else "${this}.${suf}"
init {
val file = File(propertyFile)
file.bufferedReader().use { reader ->
properties.load(reader)
}
}
fun propertyString(key: String, suffix: String? = null): String?
= properties.getProperty(key.suffix(suffix))
fun propertyList(key: String, suffix: String? = null): List<String> {
val value = properties.getProperty(key.suffix(suffix))
return value?.split(' ') ?: emptyList()
}
fun hasProperty(key: String, suffix: String? = null): Boolean
= properties.getProperty(key.suffix(suffix)) != null
}
@@ -17,10 +17,10 @@
package org.jetbrains.kotlin.backend.konan
import org.jetbrains.kotlin.backend.konan.util.bufferedReader
import java.io.File
import java.lang.ProcessBuilder
import java.lang.ProcessBuilder.Redirect
import org.jetbrains.kotlin.konan.target.*
import org.jetbrains.kotlin.backend.konan.util.*
typealias BitcodeFile = String
typealias ObjectFile = String
@@ -32,7 +32,7 @@ internal abstract class PlatformFlags(val distribution: Distribution) {
val properties = distribution.properties
val hostSuffix = distribution.hostTargetSuffix
val targetSuffix = distribution.targetSuffix
val target = distribution.target
open val llvmLtoNooptFlags
= propertyTargetList("llvmLtoNooptFlags")
@@ -56,14 +56,10 @@ internal abstract class PlatformFlags(val distribution: Distribution) {
open fun linkCommandSuffix(): List<String> = emptyList()
protected fun propertyHostString(name: String)
= properties.propertyString(name, hostSuffix)!!
protected fun propertyHostList(name: String)
= properties.propertyList(name, hostSuffix)
protected fun propertyTargetString(name: String)
= properties.propertyString(name, targetSuffix)!!
= properties.targetString(name, target)!!
protected fun propertyTargetList(name: String)
= properties.propertyList(name, targetSuffix)
= properties.targetList(name, target)
}
@@ -20,10 +20,7 @@ import org.jetbrains.kotlin.backend.konan.library.KonanLibrary
import org.jetbrains.kotlin.backend.konan.library.KonanLibraryReader
import org.jetbrains.kotlin.backend.konan.library.MetadataReader
import org.jetbrains.kotlin.backend.konan.serialization.deserializeModule
import org.jetbrains.kotlin.backend.konan.util.File
import org.jetbrains.kotlin.backend.konan.util.loadProperties
import org.jetbrains.kotlin.backend.konan.util.Properties
import org.jetbrains.kotlin.backend.konan.util.unzipAs
import org.jetbrains.kotlin.backend.konan.util.*
import org.jetbrains.kotlin.config.LanguageVersionSettings
abstract class FileBasedLibraryReader(
@@ -55,6 +55,7 @@ class File(val path: String) {
fun mkdirs() = javaFile.mkdirs()
fun delete() = javaFile.delete()
fun deleteRecursively() = javaFile.deleteRecursively()
fun deleteOnExit() = javaFile.deleteOnExit()
fun readText() = javaFile.readText()
fun readBytes() = javaFile.readBytes()
fun writeText(text: String) = javaFile.writeText(text)
@@ -73,6 +74,11 @@ class File(val path: String) {
val userHome
get() = File(System.getProperty("user.home"))
fun createTempFile(name: String, suffix: String? = null, directory: File? = null): File {
val javaDirectory = directory ?.let { java.io.File(directory.path) }
return java.io.File.createTempFile(name, suffix, javaDirectory).path.File()
}
}
}
@@ -33,3 +33,20 @@ fun File.saveProperties(properties: Properties) {
}
fun Properties.saveToFile(file: File) = file.saveProperties(this)
fun Properties.propertyString(key: String, suffix: String? = null): String?
= this.getProperty(key.suffix(suffix))
fun Properties.propertyList(key: String, suffix: String? = null): List<String> {
val value = this.getProperty(key.suffix(suffix))
return value?.split(' ') ?: emptyList()
}
fun Properties.hasProperty(key: String, suffix: String? = null): Boolean
= this.getProperty(key.suffix(suffix)) != null
fun String.suffix(suf: String?): String =
if (suf == null) this
else "${this}.${suf}"
@@ -0,0 +1,31 @@
/*
* Copyright 2010-2017 JetBrains s.r.o.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.jetbrains.kotlin.backend.konan.util
import org.jetbrains.kotlin.konan.target.*
fun Properties.hostString(name: String): String?
= this.propertyString(name, TargetManager.host.targetSuffix)
fun Properties.hostList(name: String): List<String>
= this.propertyList(name, TargetManager.host.targetSuffix)
fun Properties.targetString(name: String, target: KonanTarget): String?
= this.propertyString(name, target.targetSuffix)
fun Properties.targetList(name: String, target: KonanTarget): List<String>
= this.propertyList(name, target.targetSuffix)