2023-10-24 19:01:38 +00:00
|
|
|
import org.gradle.nativeplatform.platform.internal.DefaultNativePlatform
|
|
|
|
|
2023-01-27 02:34:46 +00:00
|
|
|
import java.util.stream.Collectors
|
|
|
|
|
2023-09-27 00:47:51 +00:00
|
|
|
def distDir = "${project.layout.buildDirectory.get()}/dist"
|
2023-01-27 02:34:46 +00:00
|
|
|
|
2023-10-16 03:37:22 +00:00
|
|
|
def distJvmArgs = new ArrayList<String>(project(':app').jvmRunArgs)
|
2023-01-27 02:34:46 +00:00
|
|
|
|
|
|
|
def releaseArguments = distJvmArgs + [
|
2023-06-12 01:08:43 +00:00
|
|
|
"-Dio.xpipe.app.version=$rootProject.versionString",
|
|
|
|
"-Dio.xpipe.app.build=$rootProject.versionString-${new Date().format('yyyyMMddHHmm')}",
|
2023-02-10 13:46:54 +00:00
|
|
|
"-Dio.xpipe.app.buildId=$rootProject.buildId",
|
2023-02-19 17:44:47 +00:00
|
|
|
"-Dio.xpipe.app.fullVersion=$rootProject.fullVersion",
|
2023-04-26 14:34:59 +00:00
|
|
|
"-Dio.xpipe.app.staging=$rootProject.isStage",
|
2023-01-27 02:34:46 +00:00
|
|
|
'-Dio.xpipe.app.sentryUrl=https://fd5f67ff10764b7e8a704bec9558c8fe@o1084459.ingest.sentry.io/6094279'
|
|
|
|
]
|
|
|
|
|
|
|
|
if (org.gradle.internal.os.OperatingSystem.current().isMacOsX()) {
|
2023-05-20 14:23:36 +00:00
|
|
|
releaseArguments += '-Xdock:name=XPipe'
|
2023-01-27 02:34:46 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
// To remove warnings, the plugin probably does not expect the JPackage tasks to be in a separate project
|
|
|
|
application {
|
|
|
|
mainModule = 'io.xpipe.app'
|
|
|
|
mainClass = 'io.xpipe.app.Main'
|
|
|
|
}
|
|
|
|
|
|
|
|
def appDependencies = project(':app').configurations.findByName('runtimeClasspath').getFiles().stream()
|
2023-10-25 14:20:49 +00:00
|
|
|
.filter(f -> !f.name.startsWith('javafx')) // Remove JavaFX dependencies
|
2023-01-27 02:34:46 +00:00
|
|
|
.collect(Collectors.toMap(f -> f.toPath().getFileName().toString(), f -> f, (f1, f2) -> f1))
|
|
|
|
.values()
|
|
|
|
def appModuleNames = ['app']
|
|
|
|
appDependencies.removeIf(f -> appModuleNames.stream()
|
|
|
|
.anyMatch(m -> f.toPath().getFileName().toString().contains("${m}.jar")))
|
|
|
|
def appModuleOutputFiles = ["${project(':app').buildDir}/libs/app.jar"]
|
|
|
|
dependencies {
|
|
|
|
implementation files(appDependencies.toArray())
|
|
|
|
implementation files(appModuleOutputFiles.toArray())
|
|
|
|
}
|
|
|
|
|
2023-08-20 09:42:34 +00:00
|
|
|
// Mac does not like a zero major version
|
|
|
|
def macVersion = rootProject.canonicalVersionString
|
|
|
|
if (Integer.parseInt(macVersion.substring(0, 1)) == 0) {
|
|
|
|
macVersion = "1" + macVersion.substring(1)
|
|
|
|
}
|
|
|
|
|
2023-10-24 19:01:38 +00:00
|
|
|
task prepareJavafxJmods(type: DefaultTask) {
|
|
|
|
doLast {
|
|
|
|
def currentOS = DefaultNativePlatform.currentOperatingSystem;
|
|
|
|
def platform = null
|
|
|
|
if (currentOS.isWindows()) {
|
|
|
|
platform = 'windows'
|
|
|
|
} else if (currentOS.isLinux()) {
|
|
|
|
platform = 'linux'
|
|
|
|
} else if (currentOS.isMacOsX()) {
|
|
|
|
platform = 'osx'
|
|
|
|
}
|
|
|
|
def assetName = "openjfx-${javafxVersion}_${platform}-${arch == 'x86_64' ? 'x64' : 'aarch64'}_bin-jmods.zip"
|
|
|
|
def url = "https://download2.gluonhq.com/openjfx/${javafxVersion}/${assetName}"
|
|
|
|
|
|
|
|
if (!file(layout.buildDirectory.file('javafx.zip')).exists()) {
|
|
|
|
download.run {
|
|
|
|
src url
|
|
|
|
dest layout.buildDirectory.file('javafx.zip')
|
|
|
|
overwrite false
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
copy {
|
|
|
|
from zipTree(layout.buildDirectory.file('javafx.zip'))
|
|
|
|
into layout.buildDirectory.dir('dist')
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2023-01-27 02:34:46 +00:00
|
|
|
jlink {
|
2023-09-27 00:47:51 +00:00
|
|
|
imageDir = file("${project.layout.buildDirectory.get()}/image")
|
2023-01-27 02:34:46 +00:00
|
|
|
options = [
|
|
|
|
// Disable this as this removes line numbers from stack traces!
|
|
|
|
// '--strip-debug',
|
|
|
|
'--no-header-files',
|
|
|
|
'--no-man-pages',
|
|
|
|
// '--strip-native-commands'
|
|
|
|
]
|
|
|
|
|
2023-10-24 19:01:38 +00:00
|
|
|
addExtraModulePath(layout.buildDirectory.dir("dist/javafx-jmods-${javafxVersion}").get().toString())
|
|
|
|
|
2023-01-27 02:34:46 +00:00
|
|
|
launcher {
|
|
|
|
moduleName = 'io.xpipe.app'
|
|
|
|
mainClassName = 'io.xpipe.app.Main'
|
|
|
|
name = 'xpiped'
|
|
|
|
jvmArgs = releaseArguments
|
|
|
|
}
|
|
|
|
|
|
|
|
jpackage {
|
|
|
|
imageOutputDir = file("$distDir/jpackage")
|
|
|
|
imageName = 'xpiped'
|
|
|
|
if (org.gradle.internal.os.OperatingSystem.current().isWindows()) {
|
|
|
|
icon = "logo/logo.ico"
|
2023-02-02 13:58:50 +00:00
|
|
|
appVersion = rootProject.canonicalVersionString
|
2023-01-27 02:34:46 +00:00
|
|
|
} else if (org.gradle.internal.os.OperatingSystem.current().isLinux()) {
|
|
|
|
icon = "logo/logo.png"
|
2023-02-02 13:58:50 +00:00
|
|
|
appVersion = rootProject.canonicalVersionString
|
2023-01-27 02:34:46 +00:00
|
|
|
} else {
|
|
|
|
icon = "logo/logo.icns"
|
2023-09-27 00:47:51 +00:00
|
|
|
resourceDir = file("${project.layout.buildDirectory.get()}/macos_resources")
|
2023-08-20 09:42:34 +00:00
|
|
|
appVersion = macVersion
|
2023-01-27 02:34:46 +00:00
|
|
|
}
|
|
|
|
skipInstaller = true
|
2023-05-20 14:23:36 +00:00
|
|
|
applicationName = 'XPipe'
|
2023-01-27 02:34:46 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
tasks.named('jlink').get().dependsOn(rootProject.getTasksByName("jar", true))
|
2023-10-24 19:01:38 +00:00
|
|
|
tasks.named('jlink').get().dependsOn(prepareJavafxJmods)
|
2023-01-27 02:34:46 +00:00
|
|
|
|
|
|
|
def outputName = org.gradle.internal.os.OperatingSystem.current().isMacOsX() ? 'xpiped.app/Contents/Resources' : 'xpiped'
|
2023-04-04 16:11:31 +00:00
|
|
|
def extModules = project.allExtensions.toList()
|
2023-02-10 13:46:54 +00:00
|
|
|
task copyBundledExtensions(type: DefaultTask,
|
|
|
|
dependsOn: extModules.stream().map { it.getTasksByName('createExtOutput', true)[0] }.toList()) {
|
2023-01-27 02:34:46 +00:00
|
|
|
doLast {
|
2023-02-10 13:46:54 +00:00
|
|
|
for (def extProject : extModules) {
|
|
|
|
def dir = "${extProject.buildDir}/libs_ext"
|
2023-01-27 02:34:46 +00:00
|
|
|
if (file(dir).exists()) {
|
|
|
|
copy {
|
|
|
|
from(dir)
|
|
|
|
into "$distDir/jpackage/$outputName/extensions/${extProject.name}"
|
|
|
|
include '*.jar'
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
2023-08-20 06:51:17 +00:00
|
|
|
|
|
|
|
task prepareMacOSInfo(type: DefaultTask) {
|
|
|
|
doLast {
|
2023-09-27 00:47:51 +00:00
|
|
|
file("${project.layout.buildDirectory.get()}/macos_resources").mkdirs()
|
2023-08-20 06:51:17 +00:00
|
|
|
copy {
|
2023-09-27 00:47:51 +00:00
|
|
|
from replaceVariablesInFile("$projectDir/misc/mac/Info.plist",
|
|
|
|
Map.of('__NAME__',
|
|
|
|
rootProject.productName,
|
|
|
|
'__VERSION__',
|
|
|
|
rootProject.versionString,
|
|
|
|
'__BUNDLE__',
|
|
|
|
rootProject.isStage ? 'io.xpipe.ptb-app' : 'io.xpipe.app'))
|
|
|
|
into file("${project.layout.buildDirectory.get()}/macos_resources")
|
2023-08-20 06:51:17 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
if (org.gradle.internal.os.OperatingSystem.current().isMacOsX()) {
|
2023-08-20 09:42:34 +00:00
|
|
|
jpackageImage.dependsOn(prepareMacOSInfo)
|
2023-08-20 06:51:17 +00:00
|
|
|
}
|
|
|
|
|
2023-01-27 02:34:46 +00:00
|
|
|
jpackage.finalizedBy(copyBundledExtensions)
|