2019-06-28 16:22:11 +03:00
|
|
|
package scientifik
|
|
|
|
|
2019-07-20 20:39:26 +03:00
|
|
|
import Scientifik
|
2019-06-28 16:22:11 +03:00
|
|
|
import org.gradle.api.Plugin
|
|
|
|
import org.gradle.api.Project
|
2019-07-24 15:03:12 +03:00
|
|
|
import org.gradle.api.tasks.Copy
|
2019-07-17 16:04:39 +03:00
|
|
|
import org.gradle.kotlin.dsl.*
|
2019-06-28 16:22:11 +03:00
|
|
|
import org.jetbrains.kotlin.gradle.dsl.KotlinMultiplatformExtension
|
2019-07-24 15:03:12 +03:00
|
|
|
import org.jetbrains.kotlin.gradle.targets.js.webpack.KotlinWebpack
|
2019-07-27 12:48:32 +03:00
|
|
|
import java.io.File
|
2019-06-28 16:22:11 +03:00
|
|
|
|
|
|
|
open class ScientifikMPPlugin : Plugin<Project> {
|
|
|
|
override fun apply(project: Project) {
|
2019-07-20 20:39:26 +03:00
|
|
|
val extension = project.scientifik
|
|
|
|
|
2019-06-28 16:22:11 +03:00
|
|
|
project.plugins.apply("org.jetbrains.kotlin.multiplatform")
|
2019-07-20 20:39:26 +03:00
|
|
|
project.plugins.apply("kotlinx-serialization")
|
2019-06-28 16:22:11 +03:00
|
|
|
|
2019-07-24 15:03:12 +03:00
|
|
|
project.repositories.applyRepos()
|
2019-07-17 16:04:39 +03:00
|
|
|
|
2019-06-28 16:22:11 +03:00
|
|
|
project.configure<KotlinMultiplatformExtension> {
|
|
|
|
jvm {
|
|
|
|
compilations.all {
|
|
|
|
kotlinOptions {
|
|
|
|
jvmTarget = "1.8"
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2019-07-21 17:40:08 +03:00
|
|
|
js {
|
|
|
|
browser {}
|
2019-06-28 16:22:11 +03:00
|
|
|
}
|
|
|
|
|
2019-07-17 16:04:39 +03:00
|
|
|
|
2019-06-28 16:22:11 +03:00
|
|
|
sourceSets.invoke {
|
|
|
|
val commonMain by getting {
|
|
|
|
dependencies {
|
|
|
|
api(kotlin("stdlib"))
|
2019-07-20 20:39:26 +03:00
|
|
|
project.afterEvaluate {
|
|
|
|
if (extension.serialization) {
|
2019-07-27 18:45:42 +03:00
|
|
|
implementation("org.jetbrains.kotlinx:kotlinx-serialization-runtime-common:${Scientifik.serializationVersion}")
|
2019-07-21 17:40:08 +03:00
|
|
|
}
|
|
|
|
if(extension.io){
|
2019-07-21 21:11:40 +03:00
|
|
|
api("org.jetbrains.kotlinx:kotlinx-io:${Scientifik.ioVersion}")
|
2019-07-20 20:39:26 +03:00
|
|
|
}
|
|
|
|
}
|
2019-06-28 16:22:11 +03:00
|
|
|
}
|
|
|
|
}
|
|
|
|
val commonTest by getting {
|
|
|
|
dependencies {
|
|
|
|
implementation(kotlin("test-common"))
|
|
|
|
implementation(kotlin("test-annotations-common"))
|
|
|
|
}
|
|
|
|
}
|
|
|
|
val jvmMain by getting {
|
|
|
|
dependencies {
|
|
|
|
api(kotlin("stdlib-jdk8"))
|
2019-07-22 18:57:47 +03:00
|
|
|
project.afterEvaluate {
|
2019-07-27 18:45:42 +03:00
|
|
|
if (extension.serialization) {
|
|
|
|
implementation("org.jetbrains.kotlinx:kotlinx-serialization-runtime:${Scientifik.serializationVersion}")
|
|
|
|
}
|
|
|
|
|
2019-07-22 18:57:47 +03:00
|
|
|
if (extension.io) {
|
|
|
|
api("org.jetbrains.kotlinx:kotlinx-io-jvm:${Scientifik.ioVersion}")
|
|
|
|
}
|
2019-07-21 17:40:08 +03:00
|
|
|
}
|
2019-06-28 16:22:11 +03:00
|
|
|
}
|
|
|
|
}
|
|
|
|
val jvmTest by getting {
|
|
|
|
dependencies {
|
|
|
|
implementation(kotlin("test"))
|
|
|
|
implementation(kotlin("test-junit"))
|
|
|
|
}
|
|
|
|
}
|
|
|
|
val jsMain by getting {
|
|
|
|
dependencies {
|
|
|
|
api(kotlin("stdlib-js"))
|
2019-07-22 18:57:47 +03:00
|
|
|
project.afterEvaluate {
|
2019-07-27 18:45:42 +03:00
|
|
|
if (extension.serialization) {
|
|
|
|
implementation("org.jetbrains.kotlinx:kotlinx-serialization-runtime-js:${Scientifik.serializationVersion}")
|
|
|
|
}
|
|
|
|
|
2019-07-22 18:57:47 +03:00
|
|
|
if (extension.io) {
|
|
|
|
api("org.jetbrains.kotlinx:kotlinx-io-js:${Scientifik.ioVersion}")
|
|
|
|
}
|
2019-07-21 17:40:08 +03:00
|
|
|
}
|
2019-06-28 16:22:11 +03:00
|
|
|
}
|
|
|
|
}
|
|
|
|
val jsTest by getting {
|
|
|
|
dependencies {
|
|
|
|
implementation(kotlin("test-js"))
|
|
|
|
}
|
|
|
|
}
|
2019-07-24 15:03:12 +03:00
|
|
|
}
|
|
|
|
|
|
|
|
targets.all {
|
|
|
|
sourceSets.all {
|
|
|
|
languageSettings.applySettings()
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
2019-07-17 16:04:39 +03:00
|
|
|
|
2019-07-24 15:03:12 +03:00
|
|
|
project.tasks.apply {
|
|
|
|
val jsBrowserWebpack by getting(KotlinWebpack::class) {
|
|
|
|
archiveClassifier = "js"
|
2019-07-20 20:39:26 +03:00
|
|
|
project.afterEvaluate {
|
2019-07-24 15:03:12 +03:00
|
|
|
val destination = listOf(archiveBaseName, archiveAppendix, archiveVersion, archiveClassifier)
|
|
|
|
.filter { it != null && it.isNotBlank() }
|
|
|
|
.joinToString("-")
|
|
|
|
destinationDirectory = destinationDirectory?.resolve(destination)
|
2019-07-17 16:04:39 +03:00
|
|
|
}
|
2019-07-24 15:03:12 +03:00
|
|
|
archiveFileName = "main.bundle.js"
|
2019-06-28 16:22:11 +03:00
|
|
|
}
|
|
|
|
|
2019-07-24 15:03:12 +03:00
|
|
|
project.afterEvaluate {
|
|
|
|
val installJsDist by creating(Copy::class) {
|
|
|
|
group = "distribution"
|
|
|
|
dependsOn(jsBrowserWebpack)
|
|
|
|
from(project.fileTree("src/jsMain/web"))
|
|
|
|
into(jsBrowserWebpack.destinationDirectory!!)
|
2019-07-27 12:48:32 +03:00
|
|
|
doLast{
|
2019-07-27 18:45:42 +03:00
|
|
|
val indexFile = File(jsBrowserWebpack.destinationDirectory!!,"index.html")
|
2019-07-27 12:48:32 +03:00
|
|
|
if(indexFile.exists()){
|
|
|
|
println("Run JS distribution at: ${indexFile.canonicalPath}")
|
|
|
|
}
|
|
|
|
}
|
2019-06-28 16:22:11 +03:00
|
|
|
}
|
2019-07-24 15:03:12 +03:00
|
|
|
|
|
|
|
findByName("assemble")?.dependsOn(installJsDist)
|
2019-06-28 16:22:11 +03:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|