plugins { java application eclipse } version = "0.7.4" java { sourceCompatibility = JavaVersion.VERSION_11 targetCompatibility = JavaVersion.VERSION_11 } application { mainClass.set("org.asamk.signal.Main") } 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.slf4j:slf4j-simple:1.7.30") } configurations { implementation { resolutionStrategy.failOnVersionConflict() } } tasks.withType { options.encoding = "UTF-8" } tasks.withType { manifest { attributes( "Implementation-Title" to project.name, "Implementation-Version" to project.version, "Main-Class" to application.mainClass.get() ) } } tasks.withType { val appArgs: String? by project if (appArgs != null) { // allow passing command-line arguments to the main application e.g.: // $ gradle run -PappArgs="['-u', '+...', 'daemon', '--json']" args = groovy.util.Eval.me(appArgs) as MutableList } } // 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() 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()) } } }