2019-12-17 15:31:33 +03:00
|
|
|
package scientifik
|
|
|
|
|
|
|
|
import Scientifik
|
|
|
|
import kotlinx.atomicfu.plugin.gradle.sourceSets
|
|
|
|
import org.gradle.api.Project
|
|
|
|
import org.gradle.kotlin.dsl.findByType
|
|
|
|
import org.gradle.kotlin.dsl.invoke
|
2020-03-16 20:56:23 +03:00
|
|
|
import org.gradle.kotlin.dsl.maven
|
|
|
|
import org.gradle.kotlin.dsl.repositories
|
2019-12-17 15:31:33 +03:00
|
|
|
import org.jetbrains.kotlin.gradle.dsl.KotlinMultiplatformExtension
|
|
|
|
|
2020-03-14 14:42:11 +03:00
|
|
|
enum class DependencyConfiguration {
|
|
|
|
API,
|
2020-03-16 15:22:16 +03:00
|
|
|
IMPLEMENTATION,
|
|
|
|
COMPILE_ONLY
|
2020-03-14 14:42:11 +03:00
|
|
|
}
|
|
|
|
|
|
|
|
enum class DependencySourceSet(val setName: String, val suffix: String) {
|
|
|
|
MAIN("main", "Main"),
|
|
|
|
TEST("test", "Test")
|
|
|
|
}
|
|
|
|
|
|
|
|
internal fun Project.useDependency(
|
|
|
|
vararg pairs: Pair<String, String>,
|
|
|
|
dependencySourceSet: DependencySourceSet = DependencySourceSet.MAIN,
|
|
|
|
dependencyConfiguration: DependencyConfiguration = DependencyConfiguration.API
|
|
|
|
) {
|
2019-12-17 15:31:33 +03:00
|
|
|
pluginManager.withPlugin("org.jetbrains.kotlin.multiplatform") {
|
|
|
|
extensions.findByType<KotlinMultiplatformExtension>()?.apply {
|
|
|
|
sourceSets {
|
2020-03-14 14:42:11 +03:00
|
|
|
pairs.forEach { (target, dep) ->
|
|
|
|
val name = target + dependencySourceSet.suffix
|
2019-12-17 15:31:33 +03:00
|
|
|
findByName(name)?.apply {
|
|
|
|
dependencies {
|
2020-03-14 14:42:11 +03:00
|
|
|
when (dependencyConfiguration) {
|
|
|
|
DependencyConfiguration.API -> api(dep)
|
|
|
|
DependencyConfiguration.IMPLEMENTATION -> implementation(dep)
|
2020-03-16 15:22:16 +03:00
|
|
|
DependencyConfiguration.COMPILE_ONLY-> compileOnly(dep)
|
2020-03-14 14:42:11 +03:00
|
|
|
}
|
2019-12-17 15:31:33 +03:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
2020-03-14 14:42:11 +03:00
|
|
|
|
|
|
|
pairs.find { it.first == "jvm" }?.let { dep ->
|
2019-12-17 15:31:33 +03:00
|
|
|
pluginManager.withPlugin("org.jetbrains.kotlin.jvm") {
|
2020-03-14 14:42:11 +03:00
|
|
|
sourceSets.findByName(dependencySourceSet.setName)?.apply {
|
|
|
|
dependencies.apply {
|
|
|
|
val configurationName = when (dependencyConfiguration) {
|
|
|
|
DependencyConfiguration.API -> apiConfigurationName
|
|
|
|
DependencyConfiguration.IMPLEMENTATION -> implementationConfigurationName
|
2020-03-16 15:22:16 +03:00
|
|
|
DependencyConfiguration.COMPILE_ONLY-> compileOnlyConfigurationName
|
2020-03-14 14:42:11 +03:00
|
|
|
}
|
|
|
|
add(configurationName, dep.second)
|
|
|
|
}
|
2019-12-17 15:31:33 +03:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2020-03-14 14:42:11 +03:00
|
|
|
pairs.find { it.first == "js" }?.let { dep ->
|
2019-12-17 15:31:33 +03:00
|
|
|
pluginManager.withPlugin("org.jetbrains.kotlin.js") {
|
2020-03-14 14:42:11 +03:00
|
|
|
sourceSets.findByName(dependencySourceSet.setName)?.apply {
|
|
|
|
dependencies.apply {
|
|
|
|
val configurationName = when (dependencyConfiguration) {
|
|
|
|
DependencyConfiguration.API -> apiConfigurationName
|
|
|
|
DependencyConfiguration.IMPLEMENTATION -> implementationConfigurationName
|
2020-03-16 15:22:16 +03:00
|
|
|
DependencyConfiguration.COMPILE_ONLY-> compileOnlyConfigurationName
|
2019-12-17 20:22:43 +03:00
|
|
|
}
|
2020-03-14 14:42:11 +03:00
|
|
|
add(configurationName, dep.second)
|
2019-12-17 15:31:33 +03:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2020-03-14 14:42:11 +03:00
|
|
|
class SerializationTargets(
|
|
|
|
val sourceSet: DependencySourceSet,
|
|
|
|
val configuration: DependencyConfiguration
|
|
|
|
) {
|
|
|
|
fun Project.cbor(
|
|
|
|
version: String = Scientifik.serializationVersion
|
|
|
|
) {
|
|
|
|
useDependency(
|
|
|
|
"common" to "org.jetbrains.kotlinx:kotlinx-serialization-cbor-common:$version",
|
|
|
|
"jvm" to "org.jetbrains.kotlinx:kotlinx-serialization-cbor:$version",
|
|
|
|
"js" to "org.jetbrains.kotlinx:kotlinx-serialization-cbor-js:$version",
|
|
|
|
"native" to "org.jetbrains.kotlinx:kotlinx-serialization-cbor-native:$version",
|
|
|
|
dependencySourceSet = sourceSet,
|
|
|
|
dependencyConfiguration = configuration
|
|
|
|
)
|
|
|
|
}
|
|
|
|
|
|
|
|
fun Project.protobuf(
|
|
|
|
version: String = Scientifik.serializationVersion
|
|
|
|
) {
|
|
|
|
useDependency(
|
|
|
|
"common" to "org.jetbrains.kotlinx:kotlinx-serialization-protobuf-common:$version",
|
|
|
|
"jvm" to "org.jetbrains.kotlinx:kotlinx-serialization-protobuf:$version",
|
|
|
|
"js" to "org.jetbrains.kotlinx:kotlinx-serialization-protobuf-js:$version",
|
|
|
|
"native" to "org.jetbrains.kotlinx:kotlinx-serialization-protobuf-native:$version",
|
|
|
|
dependencySourceSet = sourceSet,
|
|
|
|
dependencyConfiguration = configuration
|
|
|
|
)
|
|
|
|
}
|
|
|
|
|
|
|
|
fun Project.xml(
|
|
|
|
version: String = Scientifik.Serialization.xmlVersion
|
|
|
|
) {
|
2020-03-16 20:56:23 +03:00
|
|
|
repositories {
|
|
|
|
maven("https://dl.bintray.com/pdvrieze/maven")
|
|
|
|
}
|
2020-03-14 14:42:11 +03:00
|
|
|
useDependency(
|
2020-03-16 20:56:23 +03:00
|
|
|
"common" to "net.devrieze:xmlutil-serialization:$version",
|
|
|
|
"jvm" to "net.devrieze:xmlutil-serialization:$version",
|
|
|
|
"js" to "net.devrieze:xmlutil-serialization:$version",
|
2020-03-14 14:42:11 +03:00
|
|
|
dependencySourceSet = sourceSet,
|
|
|
|
dependencyConfiguration = configuration
|
|
|
|
)
|
|
|
|
}
|
|
|
|
|
|
|
|
fun Project.yaml(
|
|
|
|
version: String = Scientifik.Serialization.yamlVersion
|
|
|
|
) {
|
|
|
|
useDependency(
|
|
|
|
"jvm" to "com.charleskorn.kaml:kaml:$version",
|
|
|
|
dependencySourceSet = sourceSet,
|
|
|
|
dependencyConfiguration = configuration
|
|
|
|
)
|
|
|
|
}
|
|
|
|
|
|
|
|
fun Project.bson(
|
|
|
|
version: String = Scientifik.Serialization.bsonVersion
|
|
|
|
) {
|
|
|
|
useDependency(
|
|
|
|
"jvm" to "com.github.jershell:kbson:$version",
|
|
|
|
dependencySourceSet = sourceSet,
|
|
|
|
dependencyConfiguration = configuration
|
|
|
|
)
|
|
|
|
}
|
|
|
|
}
|
2019-12-17 15:31:33 +03:00
|
|
|
|
2020-03-14 14:42:11 +03:00
|
|
|
fun Project.serialization(
|
|
|
|
version: String = Scientifik.serializationVersion,
|
|
|
|
sourceSet: DependencySourceSet = DependencySourceSet.MAIN,
|
|
|
|
configuration: DependencyConfiguration = DependencyConfiguration.API,
|
|
|
|
block: SerializationTargets.() -> Unit = {}
|
|
|
|
) {
|
2019-12-17 16:51:32 +03:00
|
|
|
plugins.apply("org.jetbrains.kotlin.plugin.serialization")
|
|
|
|
useDependency(
|
2020-03-14 14:42:11 +03:00
|
|
|
"common" to "org.jetbrains.kotlinx:kotlinx-serialization-runtime-common:$version",
|
|
|
|
"jvm" to "org.jetbrains.kotlinx:kotlinx-serialization-runtime:$version",
|
|
|
|
"js" to "org.jetbrains.kotlinx:kotlinx-serialization-runtime-js:$version",
|
|
|
|
"native" to "org.jetbrains.kotlinx:kotlinx-serialization-runtime-native:$version",
|
|
|
|
dependencySourceSet = sourceSet
|
2019-12-17 16:51:32 +03:00
|
|
|
)
|
2020-03-14 14:42:11 +03:00
|
|
|
SerializationTargets(sourceSet, configuration).apply(block)
|
2019-12-17 16:51:32 +03:00
|
|
|
}
|
2019-12-17 15:31:33 +03:00
|
|
|
|
2020-03-14 14:42:11 +03:00
|
|
|
fun Project.coroutines(
|
|
|
|
version: String = Scientifik.coroutinesVersion,
|
|
|
|
sourceSet: DependencySourceSet = DependencySourceSet.MAIN,
|
|
|
|
configuration: DependencyConfiguration = DependencyConfiguration.API
|
|
|
|
) = useDependency(
|
|
|
|
"common" to "org.jetbrains.kotlinx:kotlinx-coroutines-core-common:$version",
|
|
|
|
"jvm" to "org.jetbrains.kotlinx:kotlinx-coroutines-core:$version",
|
|
|
|
"js" to "org.jetbrains.kotlinx:kotlinx-coroutines-core-js:$version",
|
|
|
|
"native" to "org.jetbrains.kotlinx:kotlinx-coroutines-core-native:$version",
|
|
|
|
dependencySourceSet = sourceSet,
|
|
|
|
dependencyConfiguration = configuration
|
2019-12-17 16:51:32 +03:00
|
|
|
)
|
|
|
|
|
2020-03-14 14:42:11 +03:00
|
|
|
//fun Project.atomic(version: String = Scientifik.atomicfuVersion) {
|
2019-12-17 16:51:32 +03:00
|
|
|
// plugins.apply("kotlinx-atomicfu")
|
|
|
|
// useDependency(
|
|
|
|
// "commonMain" to "org.jetbrains.kotlinx:atomicfu-common:$version",
|
|
|
|
// "jvmMain" to "org.jetbrains.kotlinx:atomicfu:$version",
|
|
|
|
// "jsMain" to "org.jetbrains.kotlinx:atomicfu-js:$version",
|
|
|
|
// "nativeMain" to "org.jetbrains.kotlinx:atomicfu-native:$version"
|
|
|
|
// )
|
|
|
|
//}
|