134 lines
4.9 KiB
Kotlin
Raw Normal View History

2019-06-28 16:22:11 +03:00
package scientifik
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
import java.io.File
2019-06-28 16:22:11 +03:00
open class ScientifikMPPlugin : Plugin<Project> {
override fun apply(project: Project) {
val extension = project.scientifik
2019-06-28 16:22:11 +03:00
project.plugins.apply("org.jetbrains.kotlin.multiplatform")
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"))
project.afterEvaluate {
if (extension.serialization) {
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-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 {
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 {
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"
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!!)
doLast{
val indexFile = File(jsBrowserWebpack.destinationDirectory!!,"index.html")
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
}
}
}
}