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")) } } } }