From af4c68a09c9cbb45ccd146571c30e5dff7db917b Mon Sep 17 00:00:00 2001 From: Craig Raw Date: Wed, 14 May 2025 11:38:17 +0200 Subject: [PATCH] update tor resource library and switch to resource-filterjar plugin --- build.gradle | 12 +-- buildSrc/build.gradle | 4 - .../filterjar/FilterJarExtension.java | 69 ---------------- .../filterjar/FilterJarParameters.java | 10 --- .../filterjar/FilterJarPlugin.java | 33 -------- .../filterjar/FilterJarTransform.java | 79 ------------------- .../filterjar/JarFilterConfig.java | 19 ----- .../filterjar/JarFilterConfigImpl.java | 64 --------------- 8 files changed, 4 insertions(+), 286 deletions(-) delete mode 100644 buildSrc/src/main/java/com/sparrowwallet/filterjar/FilterJarExtension.java delete mode 100644 buildSrc/src/main/java/com/sparrowwallet/filterjar/FilterJarParameters.java delete mode 100644 buildSrc/src/main/java/com/sparrowwallet/filterjar/FilterJarPlugin.java delete mode 100644 buildSrc/src/main/java/com/sparrowwallet/filterjar/FilterJarTransform.java delete mode 100644 buildSrc/src/main/java/com/sparrowwallet/filterjar/JarFilterConfig.java delete mode 100644 buildSrc/src/main/java/com/sparrowwallet/filterjar/JarFilterConfigImpl.java diff --git a/build.gradle b/build.gradle index 567c66ae..decfad70 100644 --- a/build.gradle +++ b/build.gradle @@ -3,7 +3,7 @@ plugins { id 'org-openjfx-javafxplugin' id 'org.beryx.jlink' version '3.1.1' id 'org.gradlex.extra-java-module-info' version '1.9' - id 'com.sparrowwallet.filterjar' + id 'io.matthewnelson.kmp.tor.resource-filterjar' version '408.16.2' } def sparrowVersion = '2.1.4' @@ -77,7 +77,7 @@ dependencies { implementation('co.nstant.in:cbor:0.9') implementation('org.openpnp:openpnp-capture-java:0.0.28-5') implementation("io.matthewnelson.kmp-tor:runtime:2.2.1") - implementation("io.matthewnelson.kmp-tor:resource-exec-tor-gpl:408.16.0") + implementation("io.matthewnelson.kmp-tor:resource-exec-tor-gpl:408.16.2") implementation('org.jetbrains.kotlinx:kotlinx-coroutines-javafx:1.10.1') { exclude group: 'org.jetbrains.kotlin', module: 'kotlin-stdlib-common' } @@ -460,10 +460,6 @@ extraJavaModuleInfo { } } -String torOs = os.macOsX ? "macos" : (os.windows ? "mingw" : "linux-libc") -filterInfo { - filter('io.matthewnelson.kmp-tor', 'resource-lib-tor-gpl-jvm') { - include("io/matthewnelson/kmp/tor/resource/lib/tor/native/${torOs}/${releaseArch}") - exclude('io/matthewnelson/kmp/tor/resource/lib/tor/native/') - } +kmpTorResourceFilterJar { + keepTorCompilation("current","current") } \ No newline at end of file diff --git a/buildSrc/build.gradle b/buildSrc/build.gradle index f34a90b9..8cf7a830 100644 --- a/buildSrc/build.gradle +++ b/buildSrc/build.gradle @@ -20,9 +20,5 @@ gradlePlugin { id = "org-openjfx-javafxplugin" implementationClass = "org.openjfx.gradle.JavaFXPlugin" } - register("com.sparrowwallet.filterjar") { - id = "com.sparrowwallet.filterjar" - implementationClass = "com.sparrowwallet.filterjar.FilterJarPlugin" - } } } diff --git a/buildSrc/src/main/java/com/sparrowwallet/filterjar/FilterJarExtension.java b/buildSrc/src/main/java/com/sparrowwallet/filterjar/FilterJarExtension.java deleted file mode 100644 index a8f756ff..00000000 --- a/buildSrc/src/main/java/com/sparrowwallet/filterjar/FilterJarExtension.java +++ /dev/null @@ -1,69 +0,0 @@ -package com.sparrowwallet.filterjar; - -import org.gradle.api.Action; -import org.gradle.api.artifacts.Configuration; -import org.gradle.api.artifacts.ConfigurationContainer; -import org.gradle.api.attributes.Attribute; -import org.gradle.api.model.ObjectFactory; -import org.gradle.api.provider.MapProperty; -import org.gradle.api.tasks.SourceSet; - -import javax.inject.Inject; - -public abstract class FilterJarExtension { - static Attribute FILTERED_ATTRIBUTE = Attribute.of("filtered", Boolean.class); - - public abstract MapProperty getFilterConfigs(); - - @Inject - protected abstract ObjectFactory getObjects(); - - @Inject - protected abstract ConfigurationContainer getConfigurations(); - - public void filter(String group, String artifact, Action action) { - String name = group + ":" + artifact; - JarFilterConfigImpl config = new JarFilterConfigImpl(name, getObjects()); - config.setGroup(group); - config.setArtifact(artifact); - action.execute(config); - getFilterConfigs().put(name, config); - } - - /** - * Activate the plugin's functionality for dependencies of all scopes of the given source set - * (runtimeClasspath, compileClasspath, annotationProcessor). - * Note that the plugin activates the functionality for all source sets by default. - * Therefore, this method only has an effect for source sets for which a {@link #deactivate(Configuration)} - * has been performed. - * - * @param sourceSet the Source Set to activate (e.g. sourceSets.test) - */ - public void activate(SourceSet sourceSet) { - Configuration runtimeClasspath = getConfigurations().getByName(sourceSet.getRuntimeClasspathConfigurationName()); - Configuration compileClasspath = getConfigurations().getByName(sourceSet.getCompileClasspathConfigurationName()); - Configuration annotationProcessor = getConfigurations().getByName(sourceSet.getAnnotationProcessorConfigurationName()); - - activate(runtimeClasspath); - activate(compileClasspath); - activate(annotationProcessor); - } - - /** - * Activate the plugin's functionality for a single resolvable Configuration. - * - * @param resolvable a resolvable Configuration (e.g. configurations["customClasspath"]) - */ - public void activate(Configuration resolvable) { - resolvable.getAttributes().attribute(FILTERED_ATTRIBUTE, true); - } - - /** - * Deactivate the plugin's functionality for a single resolvable Configuration. - * - * @param resolvable a resolvable Configuration (e.g. configurations.annotationProcessor) - */ - public void deactivate(Configuration resolvable) { - resolvable.getAttributes().attribute(FILTERED_ATTRIBUTE, false); - } -} diff --git a/buildSrc/src/main/java/com/sparrowwallet/filterjar/FilterJarParameters.java b/buildSrc/src/main/java/com/sparrowwallet/filterjar/FilterJarParameters.java deleted file mode 100644 index 23565391..00000000 --- a/buildSrc/src/main/java/com/sparrowwallet/filterjar/FilterJarParameters.java +++ /dev/null @@ -1,10 +0,0 @@ -package com.sparrowwallet.filterjar; - -import org.gradle.api.artifacts.transform.TransformParameters; -import org.gradle.api.provider.MapProperty; -import org.gradle.api.tasks.Input; - -public interface FilterJarParameters extends TransformParameters { - @Input - MapProperty getFilterConfigs(); -} diff --git a/buildSrc/src/main/java/com/sparrowwallet/filterjar/FilterJarPlugin.java b/buildSrc/src/main/java/com/sparrowwallet/filterjar/FilterJarPlugin.java deleted file mode 100644 index fd284bc0..00000000 --- a/buildSrc/src/main/java/com/sparrowwallet/filterjar/FilterJarPlugin.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.sparrowwallet.filterjar; - -import org.gradle.api.Plugin; -import org.gradle.api.Project; -import org.gradle.api.plugins.JavaPlugin; -import org.gradle.api.tasks.SourceSetContainer; - -import static com.sparrowwallet.filterjar.FilterJarExtension.FILTERED_ATTRIBUTE; - -public class FilterJarPlugin implements Plugin { - @Override - public void apply(Project project) { - // Register the extension - FilterJarExtension extension = project.getExtensions().create("filterInfo", FilterJarExtension.class); - - project.getPlugins().withType(JavaPlugin.class).configureEach(_ -> { - // By default, activate plugin for all source sets - project.getExtensions().getByType(SourceSetContainer.class).all(extension::activate); - - // All jars have a filtered=false attribute by default - project.getDependencies().getArtifactTypes().maybeCreate("jar").getAttributes().attribute(FILTERED_ATTRIBUTE, false); - - // Register the transform - project.getDependencies().registerTransform(FilterJarTransform.class, transform -> { - transform.getFrom().attribute(FILTERED_ATTRIBUTE, false); - transform.getTo().attribute(FILTERED_ATTRIBUTE, true); - transform.parameters(params -> { - params.getFilterConfigs().putAll(extension.getFilterConfigs()); - }); - }); - }); - } -} diff --git a/buildSrc/src/main/java/com/sparrowwallet/filterjar/FilterJarTransform.java b/buildSrc/src/main/java/com/sparrowwallet/filterjar/FilterJarTransform.java deleted file mode 100644 index b8f9659d..00000000 --- a/buildSrc/src/main/java/com/sparrowwallet/filterjar/FilterJarTransform.java +++ /dev/null @@ -1,79 +0,0 @@ -package com.sparrowwallet.filterjar; - - -import org.gradle.api.artifacts.transform.InputArtifact; -import org.gradle.api.artifacts.transform.TransformAction; -import org.gradle.api.artifacts.transform.TransformOutputs; -import org.gradle.api.file.FileSystemLocation; -import org.gradle.api.provider.Provider; -import org.gradle.api.tasks.PathSensitive; -import org.gradle.api.tasks.PathSensitivity; - -import java.io.File; -import java.util.Map; -import java.util.Set; -import java.util.HashSet; -import java.util.jar.JarEntry; -import java.util.jar.JarFile; -import java.util.jar.JarOutputStream; -import java.nio.file.Files; - -public abstract class FilterJarTransform implements TransformAction { - @InputArtifact - @PathSensitive(PathSensitivity.NAME_ONLY) - public abstract Provider getInputArtifact(); - - @Override - public void transform(TransformOutputs outputs) { - File originalJar = getInputArtifact().get().getAsFile(); - String jarName = originalJar.getName(); - - // Get filter configurations from parameters - Map filterConfigs = getParameters().getFilterConfigs().get(); - - //Inclusions are prioritised ahead of exclusions - Set inclusions = new HashSet<>(); - Set exclusions = new HashSet<>(); - - // Check if this JAR matches any configured filters (simplified matching based on artifact name) - filterConfigs.forEach((key, config) -> { - if(jarName.contains(config.getArtifact())) { - inclusions.addAll(config.getInclusions()); - exclusions.addAll(config.getExclusions()); - } - }); - - try { - if(!exclusions.isEmpty()) { - filterJar(originalJar, getFilterJar(outputs, originalJar), inclusions, exclusions); - } else { - outputs.file(originalJar); - } - } catch(Exception e) { - throw new RuntimeException("Failed to transform jar: " + jarName, e); - } - } - - private void filterJar(File inputFile, File outputFile, Set inclusions, Set exclusions) throws Exception { - try(JarFile jarFile = new JarFile(inputFile); JarOutputStream jarOut = new JarOutputStream(Files.newOutputStream(outputFile.toPath()))) { - jarFile.entries().asIterator().forEachRemaining(entry -> { - String entryName = entry.getName(); - boolean shouldInclude = inclusions.stream().anyMatch(entryName::startsWith); - boolean shouldExclude = exclusions.stream().anyMatch(entryName::startsWith); - if(shouldInclude || !shouldExclude) { - try { - jarOut.putNextEntry(new JarEntry(entryName)); - jarFile.getInputStream(entry).transferTo(jarOut); - jarOut.closeEntry(); - } catch(Exception e) { - throw new RuntimeException("Error processing entry: " + entryName, e); - } - } - }); - } - } - - private File getFilterJar(TransformOutputs outputs, File originalJar) { - return outputs.file(originalJar.getName().substring(0, originalJar.getName().lastIndexOf('.')) + "-filtered.jar"); - } -} diff --git a/buildSrc/src/main/java/com/sparrowwallet/filterjar/JarFilterConfig.java b/buildSrc/src/main/java/com/sparrowwallet/filterjar/JarFilterConfig.java deleted file mode 100644 index 5bd792c7..00000000 --- a/buildSrc/src/main/java/com/sparrowwallet/filterjar/JarFilterConfig.java +++ /dev/null @@ -1,19 +0,0 @@ -package com.sparrowwallet.filterjar; - -import org.gradle.api.tasks.Input; - -import java.util.List; - -public interface JarFilterConfig { - @Input - String getGroup(); - - @Input - String getArtifact(); - - @Input - List getInclusions(); - - @Input - List getExclusions(); -} diff --git a/buildSrc/src/main/java/com/sparrowwallet/filterjar/JarFilterConfigImpl.java b/buildSrc/src/main/java/com/sparrowwallet/filterjar/JarFilterConfigImpl.java deleted file mode 100644 index 912ccd4d..00000000 --- a/buildSrc/src/main/java/com/sparrowwallet/filterjar/JarFilterConfigImpl.java +++ /dev/null @@ -1,64 +0,0 @@ -package com.sparrowwallet.filterjar; - -import org.gradle.api.Named; -import org.gradle.api.model.ObjectFactory; -import javax.inject.Inject; -import java.io.Serializable; -import java.util.ArrayList; -import java.util.List; - -public class JarFilterConfigImpl implements Named, JarFilterConfig, Serializable { - private final String name; - private String group; - private String artifact; - private final List inclusions; - private final List exclusions; - - @Inject - public JarFilterConfigImpl(String name, ObjectFactory objectFactory) { - this.name = name; - this.inclusions = new ArrayList<>(); - this.exclusions = new ArrayList<>(); - } - - @Override - public String getName() { - return name; - } - - @Override - public String getGroup() { - return group; - } - - public void setGroup(String group) { - this.group = group; - } - - @Override - public String getArtifact() { - return artifact; - } - - public void setArtifact(String artifact) { - this.artifact = artifact; - } - - @Override - public List getInclusions() { - return inclusions; - } - - public void include(String path) { - inclusions.add(path); - } - - @Override - public List getExclusions() { - return exclusions; - } - - public void exclude(String path) { - exclusions.add(path); - } -}