]> nmode's Git Repositories - signal-cli/commitdiff
Exclude libsignal-client testing libraries
authorAsamK <asamk@gmx.de>
Tue, 4 Mar 2025 09:04:34 +0000 (10:04 +0100)
committerAsamK <asamk@gmx.de>
Tue, 4 Mar 2025 09:04:34 +0000 (10:04 +0100)
build.gradle.kts
buildSrc/src/main/kotlin/ExcludeFileFromJar.kt [new file with mode: 0644]
graalvm-config-dir/resource-config.json

index e491dd7da6081c106991b52d1d844ce3ae335047..67a180fb0df5b83b0e16ab56864a3936de29f484 100644 (file)
@@ -46,7 +46,41 @@ graalvmNative {
     }
 }
 
+val artifactType = Attribute.of("artifactType", String::class.java)
+val minified = Attribute.of("minified", Boolean::class.javaObjectType)
 dependencies {
+    attributesSchema {
+        attribute(minified)
+    }
+    artifactTypes.getByName("jar") {
+        attributes.attribute(minified, false)
+    }
+}
+
+configurations.runtimeClasspath.configure {
+    attributes {
+        attribute(minified, true)
+    }
+}
+val excludePatterns = mapOf(
+    "libsignal-client" to setOf(
+        "libsignal_jni_testing_amd64.so",
+        "signal_jni_testing_amd64.dll",
+        "libsignal_jni_testing_amd64.dylib",
+        "libsignal_jni_testing_aarch64.dylib",
+    )
+)
+
+dependencies {
+    registerTransform(JarFileExcluder::class) {
+        from.attribute(minified, false).attribute(artifactType, "jar")
+        to.attribute(minified, true).attribute(artifactType, "jar")
+
+        parameters {
+            excludeFilesByArtifact = excludePatterns
+        }
+    }
+
     implementation(libs.bouncycastle)
     implementation(libs.jackson.databind)
     implementation(libs.argparse4j)
@@ -92,9 +126,11 @@ tasks.register("fatJar", type = Jar::class) {
         "META-INF/NOTICE*",
         "META-INF/LICENSE*",
         "META-INF/INDEX.LIST",
-        "**/module-info.class"
+        "**/module-info.class",
     )
     duplicatesStrategy = DuplicatesStrategy.WARN
-    from(configurations.runtimeClasspath.get().map { if (it.isDirectory) it else zipTree(it) })
+    doFirst {
+        from(configurations.runtimeClasspath.get().map { if (it.isDirectory) it else zipTree(it) })
+    }
     with(tasks.jar.get())
 }
diff --git a/buildSrc/src/main/kotlin/ExcludeFileFromJar.kt b/buildSrc/src/main/kotlin/ExcludeFileFromJar.kt
new file mode 100644 (file)
index 0000000..25862cc
--- /dev/null
@@ -0,0 +1,53 @@
+import org.gradle.api.artifacts.transform.*
+import org.gradle.api.file.FileSystemLocation
+import org.gradle.api.provider.Provider
+import org.gradle.api.tasks.Input
+import org.gradle.api.tasks.PathSensitive
+import org.gradle.api.tasks.PathSensitivity
+import java.io.File
+import java.io.FileInputStream
+import java.io.FileOutputStream
+import java.util.zip.ZipInputStream
+import java.util.zip.ZipOutputStream
+
+@CacheableTransform
+abstract class JarFileExcluder : TransformAction<JarFileExcluder.Parameters> {
+    interface Parameters : TransformParameters {
+        @get:Input
+        var excludeFilesByArtifact: Map<String, Set<String>>
+    }
+
+    @get:PathSensitive(PathSensitivity.NAME_ONLY)
+    @get:InputArtifact
+    abstract val inputArtifact: Provider<FileSystemLocation>
+
+    override
+    fun transform(outputs: TransformOutputs) {
+        val fileName = inputArtifact.get().asFile.name
+        for (entry in parameters.excludeFilesByArtifact) {
+            if (fileName.startsWith(entry.key)) {
+                val nameWithoutExtension = fileName.substring(0, fileName.lastIndexOf("."))
+                excludeFiles(inputArtifact.get().asFile, entry.value, outputs.file("${nameWithoutExtension}.jar"))
+                return
+            }
+        }
+        outputs.file(inputArtifact)
+    }
+
+    private fun excludeFiles(artifact: File, excludeFiles: Set<String>, jarFile: File) {
+        ZipInputStream(FileInputStream(artifact)).use { input ->
+            ZipOutputStream(FileOutputStream(jarFile)).use { output ->
+                var entry = input.nextEntry
+                while (entry != null) {
+                    if (!excludeFiles.contains(entry.name)) {
+                        output.putNextEntry(entry)
+                        input.copyTo(output)
+                        output.closeEntry()
+                    }
+
+                    entry = input.nextEntry
+                }
+            }
+        }
+    }
+}
index b9ead797f4e22f997b1762f483971435878da553..8bd8a7aff7ad0e1c4327674aae5ac76ab1d1f3fe 100644 (file)
     "pattern":"\\Qlibsignal_jni_amd64.dylib\\E"
   }, {
     "pattern":"\\Qlibsignal_jni_amd64.so\\E"
-  }, {
-    "pattern":"\\Qlibsignal_jni_testing_amd64.so\\E"
   }, {
     "pattern":"\\Qorg/asamk/signal/manager/config/ias.store\\E"
   }, {