import org.jetbrains.compose.desktop.application.dsl.TargetFormat
plugins {
alias(libs.plugins.kotlinMultiplatform)
alias(libs.plugins.composeMultiplatform)
alias(libs.plugins.composeCompiler)
alias(libs.plugins.kotlinSerialization)
}
kotlin {
jvm()
sourceSets {
commonMain.dependencies {
implementation(compose.runtime)
implementation(compose.foundation)
implementation(compose.material3)
implementation(compose.ui)
implementation(compose.components.resources)
implementation(compose.components.uiToolingPreview)
implementation(libs.androidx.lifecycle.viewmodelCompose)
implementation(libs.androidx.lifecycle.runtimeCompose)
}
jvmMain.dependencies {
implementation(compose.desktop.currentOs)
implementation(libs.kotlinx.coroutinesSwing)
implementation(libs.kotlinx.datetime)
implementation(libs.kotlinx.serialization.json)
implementation(libs.cardiologist)
implementation(libs.kotlin.logging.jvm)
implementation(libs.logback.classic)
implementation(libs.material.kolor)
}
commonTest.dependencies {
implementation(kotlin("test"))
implementation(libs.kotlinx.coroutinesTest)
}
}
}
val appVersion = providers.gradleProperty("appVersion").orNull?.takeIf { it.isNotBlank() } ?: "0.0.1"
val generatedSrcDir = layout.buildDirectory.dir("generated/src/jvmMain/kotlin")
val generateBuildConfig = tasks.register("generateBuildConfig") {
description = "Generates BuildConfig.kt"
val outputDir = generatedSrcDir
val version = appVersion
inputs.property("version", version)
outputs.dir(outputDir)
doLast {
val dir = outputDir.get().asFile.resolve("com/rukira/wowbackup")
dir.mkdirs()
dir.resolve("BuildConfig.kt").writeText(
"""
|package com.rukira.wowbackup
|
|object BuildConfig {
| const val VERSION = "$version"
|}
""".trimMargin()
)
}
}
kotlin.sourceSets.named("jvmMain") {
kotlin.srcDir(generateBuildConfig)
}
compose.desktop {
application {
mainClass = "com.rukira.wowbackup.MainKt"
jvmArgs("-Dapple.awt.enableTemplateImages=true", "-Dapple.awt.UIElement=true")
nativeDistributions {
targetFormats(TargetFormat.Dmg, TargetFormat.Msi, TargetFormat.Deb)
packageName = "WoW Backup"
packageVersion = appVersion
modules("java.naming", "java.sql", "java.instrument", "jdk.unsupported", "java.net.http")
macOS {
bundleID = "com.rukira.wowbackup"
iconFile.set(project.file("src/jvmMain/resources/icon.icns"))
infoPlist {
extraKeysRawXml = """
LSUIElement
""".trimIndent()
}
}
windows {
iconFile.set(project.file("src/jvmMain/resources/icon.ico"))
upgradeUuid = "e5a8b2c4-1f3d-4a6e-9b7c-2d8f0e1a3b5c"
}
linux {
iconFile.set(project.file("src/jvmMain/resources/icon.png"))
}
}
}
}