From: AsamK Date: Tue, 4 Mar 2025 09:04:34 +0000 (+0100) Subject: Exclude libsignal-client testing libraries X-Git-Tag: v0.13.14~13 X-Git-Url: https://git.nmode.ca/signal-cli/commitdiff_plain/b92cbc6a7c93124afe07d1d14e9a4b3d255a5e2e?ds=sidebyside Exclude libsignal-client testing libraries --- diff --git a/build.gradle.kts b/build.gradle.kts index e491dd7d..67a180fb 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -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 index 00000000..25862cc9 --- /dev/null +++ b/buildSrc/src/main/kotlin/ExcludeFileFromJar.kt @@ -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 { + interface Parameters : TransformParameters { + @get:Input + var excludeFilesByArtifact: Map> + } + + @get:PathSensitive(PathSensitivity.NAME_ONLY) + @get:InputArtifact + abstract val inputArtifact: Provider + + 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, 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 + } + } + } + } +} diff --git a/graalvm-config-dir/resource-config.json b/graalvm-config-dir/resource-config.json index b9ead797..8bd8a7af 100644 --- a/graalvm-config-dir/resource-config.json +++ b/graalvm-config-dir/resource-config.json @@ -188,8 +188,6 @@ "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" }, {