Files
TachideskJUI/desktop/build.gradle.kts

217 lines
6.6 KiB
Kotlin

import Config.migrationCode
import Config.serverCode
import Config.tachideskVersion
import org.gradle.jvm.tasks.Jar
import org.jetbrains.compose.compose
import org.jetbrains.compose.desktop.application.dsl.TargetFormat
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
import proguard.gradle.ProGuardTask
plugins {
kotlin("jvm")
id("org.jetbrains.compose")
id("com.google.devtools.ksp")
id("com.github.gmazzo.buildconfig")
id("org.jmailen.kotlinter")
}
dependencies {
implementation(projects.core)
implementation(projects.i18n)
implementation(projects.data)
implementation(projects.uiCore)
implementation(projects.presentation)
// UI (Compose)
implementation(compose.desktop.currentOs)
implementation(compose.uiTooling)
implementation(compose.materialIconsExtended)
implementation(compose("org.jetbrains.compose.ui:ui-util"))
implementation(libs.voyager.core)
implementation(libs.voyager.navigation)
implementation(libs.voyager.transitions)
implementation(libs.accompanist.pager)
implementation(libs.accompanist.pagerIndicators)
implementation(libs.accompanist.flowLayout)
implementation(libs.kamel)
implementation(libs.materialDialogs.core)
// UI (Swing)
implementation(libs.darklaf)
// Threading
implementation(libs.coroutines.core)
implementation(libs.coroutines.swing)
// Json
implementation(libs.serialization.json)
// Xml
implementation(libs.serialization.xmlUtil.core)
implementation(libs.serialization.xmlUtil.serialization)
// Dependency Injection
implementation(libs.kotlinInject.runtime)
ksp(libs.kotlinInject.compiler)
// Http client
implementation(libs.ktor.core)
implementation(libs.ktor.okHttp)
implementation(libs.ktor.serialization)
implementation(libs.ktor.logging)
implementation(libs.ktor.websockets)
implementation(libs.ktor.auth)
// Logging
implementation(libs.logging.slf4j.api)
implementation(libs.logging.slf4j.jul)
implementation(libs.logging.log4j.api)
implementation(libs.logging.log4j.core)
implementation(libs.logging.log4j.slf4j)
implementation(libs.logging.ktlogging)
// Storage
implementation(libs.okio)
implementation(libs.appDirs)
// Preferences
implementation(libs.multiplatformSettings.core)
implementation(libs.multiplatformSettings.serialization)
implementation(libs.multiplatformSettings.coroutines)
// Utility
implementation(libs.krokiCoroutines)
implementation(libs.klock)
// Localization
implementation(libs.moko.core)
implementation(libs.moko.compose)
implementation(libs.locale)
// Testing
testImplementation(kotlin("test-junit"))
testImplementation(compose("org.jetbrains.compose.ui:ui-test-junit4"))
testImplementation(libs.coroutines.test)
}
java {
sourceCompatibility = Config.desktopJvmTarget
targetCompatibility = Config.desktopJvmTarget
}
tasks {
withType<KotlinCompile> {
kotlinOptions {
jvmTarget = Config.desktopJvmTarget.toString()
freeCompilerArgs = listOf(
"-Xopt-in=kotlin.RequiresOptIn",
"-Xopt-in=androidx.compose.ui.ExperimentalComposeUiApi"
)
}
}
test {
useJUnit()
}
withType<Jar> {
exclude("META-INF/*.RSA", "META-INF/*.SF", "META-INF/*.DSA")
}
registerTachideskTasks(project)
register<ProGuardTask>("optimizeUberJar") {
group = "compose desktop"
val packageUberJarForCurrentOS = getByName("packageUberJarForCurrentOS")
dependsOn(packageUberJarForCurrentOS)
val uberJar = packageUberJarForCurrentOS.outputs.files.first()
injars(uberJar)
outjars(File(uberJar.parentFile, "min/" + uberJar.name))
val javaHome = System.getProperty("java.home")
if (JavaVersion.current().isJava9Compatible) {
libraryjars("$javaHome/jmods")
} else {
libraryjars("$javaHome/lib/rt.jar")
libraryjars("$javaHome/lib/jce.jar")
}
configuration("proguard-rules.pro")
}
}
kotlin {
sourceSets.main {
kotlin.srcDir("build/generated/ksp/main/kotlin")
}
sourceSets.test {
kotlin.srcDir("build/generated/ksp/test/kotlin")
}
}
compose.desktop {
application {
mainClass = "ca.gosyer.MainKt"
nativeDistributions {
targetFormats(
// Windows
TargetFormat.Msi,
TargetFormat.Exe,
// Linux
TargetFormat.Deb,
TargetFormat.Rpm,
// MacOS
TargetFormat.Dmg
)
modules(
"java.compiler",
"java.instrument",
"java.management",
"java.naming",
"java.prefs",
"java.rmi",
"java.scripting",
"java.sql",
"jdk.crypto.ec",
"jdk.unsupported"
)
packageName = "Tachidesk-JUI"
description = "Tachidesk-JUI is a Jvm client for a Tachidesk Server"
copyright = "Mozilla Public License v2.0"
vendor = "Suwayomi"
windows {
dirChooser = true
upgradeUuid = "B2ED947E-81E4-4258-8388-2B1EDF5E0A30"
shortcut = true
menu = true
iconFile.set(rootProject.file("resources/icon.ico"))
menuGroup = "Suwayomi"
}
macOS {
bundleID = "ca.gosyer.tachideskjui"
packageName = rootProject.name
iconFile.set(rootProject.file("resources/icon.icns"))
}
linux {
iconFile.set(rootProject.file("resources/icon.png"))
}
}
}
}
fun String.wrap() = """"$this""""
buildConfig {
className("BuildConfig")
packageName(project.group.toString() + ".desktop.build")
useKotlinOutput { internalVisibility = true }
buildConfigField("String", "NAME", rootProject.name.wrap())
buildConfigField("String", "VERSION", project.version.toString().wrap())
buildConfigField("int", "MIGRATION_CODE", migrationCode.toString())
buildConfigField("boolean", "DEBUG", project.hasProperty("debugApp").toString())
buildConfigField("boolean", "IS_PREVIEW", project.hasProperty("preview").toString())
buildConfigField("int", "PREVIEW_BUILD", project.properties["preview"]?.toString()?.trim('"') ?: 0.toString())
// Tachidesk
buildConfigField("String", "TACHIDESK_SP_VERSION", tachideskVersion.wrap())
buildConfigField("int", "SERVER_CODE", serverCode.toString())
}