]> nmode's Git Repositories - signal-cli/blobdiff - build.gradle.kts
Use official graalvm native-image gradle plugin
[signal-cli] / build.gradle.kts
index b2bd53e43aefa19601743e778456b51011732efa..0ef51bda6ce667362b4e6b80ad53c39ba0b2c2b1 100644 (file)
@@ -2,9 +2,11 @@ plugins {
     java
     application
     eclipse
+    `check-lib-versions`
+    id("org.graalvm.buildtools.native") version "0.9.5"
 }
 
-version = "0.7.4"
+version = "0.9.0"
 
 java {
     sourceCompatibility = JavaVersion.VERSION_11
@@ -15,18 +17,26 @@ application {
     mainClass.set("org.asamk.signal.Main")
 }
 
+graalvmNative {
+    binaries {
+        this["main"].run {
+            configurationFileDirectories.from(file("graalvm-config-dir"))
+            buildArgs.add("--allow-incomplete-classpath")
+        }
+    }
+}
+
 repositories {
     mavenLocal()
     mavenCentral()
 }
 
 dependencies {
-    implementation("com.google.protobuf:protobuf-javalite:3.10.0")
-    implementation("com.github.turasa:signal-service-java:2.15.3_unofficial_18")
-    implementation("org.bouncycastle:bcprov-jdk15on:1.68")
-    implementation("net.sourceforge.argparse4j:argparse4j:0.8.1")
-    implementation("com.github.hypfvieh:dbus-java:3.2.4")
+    implementation("org.bouncycastle:bcprov-jdk15on:1.69")
+    implementation("net.sourceforge.argparse4j:argparse4j:0.9.0")
+    implementation("com.github.hypfvieh:dbus-java:3.3.0")
     implementation("org.slf4j:slf4j-simple:1.7.30")
+    implementation(project(":lib"))
 }
 
 configurations {
@@ -35,6 +45,12 @@ configurations {
     }
 }
 
+
+tasks.withType<AbstractArchiveTask>().configureEach {
+    isPreserveFileTimestamps = false
+    isReproducibleFileOrder = true
+}
+
 tasks.withType<JavaCompile> {
     options.encoding = "UTF-8"
 }
@@ -42,9 +58,9 @@ tasks.withType<JavaCompile> {
 tasks.withType<Jar> {
     manifest {
         attributes(
-                "Implementation-Title" to project.name,
-                "Implementation-Version" to project.version,
-                "Main-Class" to application.mainClass.get()
+            "Implementation-Title" to project.name,
+            "Implementation-Version" to project.version,
+            "Main-Class" to application.mainClass.get()
         )
     }
 }
@@ -57,73 +73,3 @@ tasks.withType<JavaExec> {
         args = groovy.util.Eval.me(appArgs) as MutableList<String>
     }
 }
-
-// Find any 3rd party libraries which have released new versions
-// to the central Maven repo since we last upgraded.
-val checkLibVersions by tasks.registering {
-    doLast {
-        val checked = kotlin.collections.HashSet<Dependency>()
-        allprojects {
-            configurations.forEach { configuration ->
-                configuration.allDependencies.forEach { dependency ->
-                    val version = dependency.version
-                    if (!checked.contains(dependency)) {
-                        val group = dependency.group
-                        val path = group?.replace(".", "/") ?: ""
-                        val name = dependency.name
-                        val metaDataUrl = "https://repo1.maven.org/maven2/$path/$name/maven-metadata.xml"
-                        try {
-                            val url = org.codehaus.groovy.runtime.ResourceGroovyMethods.toURL(metaDataUrl)
-                            val metaDataText = org.codehaus.groovy.runtime.ResourceGroovyMethods.getText(url)
-                            val metadata = groovy.util.XmlSlurper().parseText(metaDataText)
-                            val newest = (metadata.getProperty("versioning") as groovy.util.slurpersupport.GPathResult).getProperty("latest")
-                            if (version != newest.toString()) {
-                                println("UPGRADE {\"group\": \"$group\", \"name\": \"$name\", \"current\": \"$version\", \"latest\": \"$newest\"}")
-                            }
-                        } catch (e: Throwable) {
-                            logger.debug("Unable to download or parse $metaDataUrl: $e.message")
-                        }
-                        checked.add(dependency)
-                    }
-                }
-            }
-        }
-    }
-}
-
-val assembleNativeImage by tasks.registering {
-    dependsOn("assemble")
-
-    var graalVMHome = ""
-    doFirst {
-        graalVMHome = System.getenv("GRAALVM_HOME")
-                ?: throw GradleException("Required GRAALVM_HOME environment variable not set.")
-    }
-
-    doLast {
-        val nativeBinaryOutputPath = "$buildDir/native-image"
-        val nativeBinaryName = "signal-cli"
-
-        mkdir(nativeBinaryOutputPath)
-
-        exec {
-            workingDir = File(".")
-            commandLine("$graalVMHome/bin/native-image",
-                    "-H:Path=$nativeBinaryOutputPath",
-                    "-H:Name=$nativeBinaryName",
-                    "-H:JNIConfigurationFiles=graalvm-config-dir/jni-config.json",
-                    "-H:DynamicProxyConfigurationFiles=graalvm-config-dir/proxy-config.json",
-                    "-H:ResourceConfigurationFiles=graalvm-config-dir/resource-config.json",
-                    "-H:ReflectionConfigurationFiles=graalvm-config-dir/reflect-config.json",
-                    "--no-fallback",
-                    "--allow-incomplete-classpath",
-                    "--report-unsupported-elements-at-runtime",
-                    "--enable-url-protocols=http,https",
-                    "--enable-https",
-                    "--enable-all-security-services",
-                    "-cp",
-                    sourceSets.main.get().runtimeClasspath.asPath,
-                    application.mainClass.get())
-        }
-    }
-}