201 lines
6.9 KiB
Plaintext
201 lines
6.9 KiB
Plaintext
import org.jetbrains.compose.desktop.application.dsl.TargetFormat
|
|
import java.util.*
|
|
|
|
buildscript {
|
|
repositories {
|
|
google()
|
|
gradlePluginPortal()
|
|
}
|
|
}
|
|
|
|
plugins {
|
|
kotlin("jvm") version "2.0.20"
|
|
id("org.jetbrains.kotlin.plugin.compose") version "2.0.20"
|
|
id("org.jetbrains.compose") version "1.7.3"
|
|
kotlin("plugin.serialization") version "2.0.20"
|
|
id("com.github.gmazzo.buildconfig") version "5.5.0"
|
|
}
|
|
|
|
repositories {
|
|
google()
|
|
mavenCentral()
|
|
maven("https://maven.pkg.jetbrains.space/public/p/compose/dev")
|
|
maven("https://plugins.gradle.org/m2/")
|
|
}
|
|
|
|
dependencies {
|
|
implementation(compose.desktop.currentOs)
|
|
implementation(compose.components.resources)
|
|
implementation(compose.materialIconsExtended)
|
|
implementation("org.jetbrains.kotlinx:kotlinx-serialization-json:1.7.3")
|
|
|
|
// SQLite is needed to access the Pyfa databse.
|
|
// Instead of the single jar with the .so files for all the supported platforms, we use a custom
|
|
// jar with just the single .so file for the current platform.
|
|
// implementation("org.xerial:sqlite-jdbc:3.49.1.0")
|
|
implementation(
|
|
fileTree("libs") {
|
|
include(sqliteJdbcJarName())
|
|
}
|
|
)
|
|
implementation("org.slf4j:slf4j-api:2.0.17") // Used by org.xerial:sqlite-jdbc
|
|
implementation("org.slf4j:slf4j-nop:2.0.17") // Prevents a warning being printed by slf4j-api
|
|
|
|
// implementation("com.caoccao.javet:javet:4.1.1") // Core
|
|
// implementation("com.caoccao.javet:${javetNativeDependencyName()}:4.1.1")
|
|
|
|
implementation(":EveData")
|
|
implementation(":Esi")
|
|
implementation(":FittingEngine")
|
|
implementation(":ComposeWidgets")
|
|
|
|
testImplementation(compose.desktop.uiTestJUnit4)
|
|
testImplementation(kotlin("test", version = "2.0.20"))
|
|
}
|
|
|
|
// To avoid bloating the distribution with all the native JDBC implementations, I removed all but the necessary,
|
|
// per platform .so files from the jar in misc/sqlite-jdbc-3.49.1.0-original.jar, and put them in separate jars in
|
|
// libs/. This function returns the name of the jar for the running platform.
|
|
// The original jar was downloaded from https://github.com/xerial/sqlite-jdbc
|
|
fun sqliteJdbcJarName(): String {
|
|
val os = org.gradle.internal.os.OperatingSystem.current()
|
|
val osType = when {
|
|
os.isWindows -> "windows"
|
|
os.isMacOsX -> "macosx"
|
|
os.isLinux -> "linux"
|
|
else -> throw UnsupportedOperationException("$os is not currently supported by the custom sqlite-jdbc")
|
|
}
|
|
val arch = System.getProperty("os.arch")
|
|
val archType = if (arch == "aarch64" || arch == "arm64") "aarch64" else "x64"
|
|
return "sqlite-jdbc-3.49.1.0-$osType-$archType.jar"
|
|
}
|
|
|
|
//fun javetNativeDependencyName(): String {
|
|
// val os = org.gradle.internal.os.OperatingSystem.current()
|
|
// val osType = when {
|
|
// os.isWindows -> "windows"
|
|
// os.isMacOsX -> "macos"
|
|
// os.isLinux -> "linux"
|
|
// else -> throw UnsupportedOperationException("$os is not supported by Javet")
|
|
// }
|
|
// val arch = System.getProperty("os.arch")
|
|
// val archType = if (arch == "aarch64" || arch == "arm64") "arm64" else "x86_64"
|
|
// return "javet-v8-$osType-$archType"
|
|
//}
|
|
|
|
kotlin {
|
|
jvmToolchain(17)
|
|
|
|
compilerOptions.freeCompilerArgs.apply {
|
|
add("-Xlambdas=indy")
|
|
add("-Xcontext-receivers")
|
|
}
|
|
}
|
|
|
|
// Prevents the Java icon from being shown in the macOS dock when running tests
|
|
tasks.withType<Test>().configureEach {
|
|
systemProperty("apple.awt.UIElement", "true")
|
|
}
|
|
|
|
// Load local.properties
|
|
val localProperties = Properties().apply {
|
|
val localPropertiesFile = rootProject.file("local.properties")
|
|
if (localPropertiesFile.exists())
|
|
load(localPropertiesFile.inputStream())
|
|
}
|
|
|
|
val appName = "Theorycrafter"
|
|
val version = "1.8.0-atxxi" // Don't forget to update versionCode, packageVersion and releases.json
|
|
val versionCode = 16
|
|
val releaseType = "stable" // stable, beta, dev
|
|
val releasesInfoUrl = "https://theorycrafter.pro/releases.json"
|
|
//val releasesInfoUrl = "http://localhost:8000/releases.json"
|
|
|
|
buildConfig {
|
|
packageName("theorycrafter")
|
|
className("Theorycrafter")
|
|
|
|
// App stuff
|
|
buildConfigField("AppName", appName)
|
|
buildConfigField("Version", version)
|
|
buildConfigField("VersionCode", versionCode)
|
|
buildConfigField("theorycrafter.ReleaseType", "AppReleaseType", "ReleaseType.byId(\"$releaseType\")")
|
|
buildConfigField("BuildTimestamp", System.currentTimeMillis())
|
|
buildConfigField("ReleasesInfoUrl", releasesInfoUrl)
|
|
buildConfigField("MaintainerEmail", "evetheorycrafter@gmail.com")
|
|
|
|
// EVE SSO
|
|
buildConfigField("EveSsoClientId", localProperties.getProperty("eve.sso.client_id", ""))
|
|
buildConfigField("EveSsoCallbackUrl", localProperties.getProperty("eve.sso.callback_url", ""))
|
|
|
|
// Google Analytics
|
|
buildConfigField("GaMeasurementId", localProperties.getProperty("ga.measurement_id", ""))
|
|
buildConfigField("GaApiSecret", localProperties.getProperty("ga.api_secret", ""))
|
|
}
|
|
|
|
compose.desktop {
|
|
application {
|
|
mainClass = "theorycrafter.MainKt"
|
|
nativeDistributions {
|
|
targetFormats(/*TargetFormat.Dmg, TargetFormat.Msi, TargetFormat.Deb, TargetFormat.Rpm*/ TargetFormat.AppImage)
|
|
packageName = appName
|
|
packageVersion = "1.8.0"
|
|
|
|
modules("java.sql")
|
|
|
|
macOS {
|
|
iconFile.set(project.file("misc/icon/mac/theorycrafter.icns"))
|
|
jvmArgs += "-Dapple.awt.application.appearance=system"
|
|
}
|
|
windows {
|
|
menuGroup = "" // This adds a launcher to the start menu directly (without a group)
|
|
iconFile.set(project.file("misc/icon/win/theorycrafter.ico"))
|
|
}
|
|
linux {
|
|
iconFile.set(project.file("misc/icon/linux/theorycrafter.png"))
|
|
}
|
|
}
|
|
|
|
buildTypes.release.proguard {
|
|
configurationFiles.from(
|
|
project.file("proguard_rules/okhttp3.pro"),
|
|
project.file("proguard_rules/theorycrafter.pro"),
|
|
)
|
|
}
|
|
}
|
|
}
|
|
|
|
tasks.register("packageSource") {
|
|
description = "Packages the source code into a zip file"
|
|
group = "other"
|
|
|
|
val outputFile = layout.projectDirectory.file("${appName}-${version}-src.zip")
|
|
outputs.file(outputFile)
|
|
|
|
doLast {
|
|
val file = outputFile.asFile
|
|
|
|
// Ensure output directory exists
|
|
file.parentFile.mkdirs()
|
|
|
|
// Use git archive to create zip of tracked files
|
|
exec {
|
|
commandLine(
|
|
"git", "archive",
|
|
"--format=zip",
|
|
"--output=${file.absolutePath}",
|
|
"HEAD",
|
|
".", // Include everything
|
|
// Exclude these
|
|
":(exclude)website",
|
|
":(exclude).git",
|
|
":(exclude)*.gitignore",
|
|
":(exclude)*.gitattributes",
|
|
":(exclude).github",
|
|
":(exclude).idea",
|
|
":(exclude)*.DS_Store",
|
|
)
|
|
}
|
|
}
|
|
}
|