From d0a93e4a21a3c71a47f4bd0511d7862093731e2e Mon Sep 17 00:00:00 2001 From: Mathieu Baudier Date: Tue, 21 Mar 2023 10:47:11 +0100 Subject: [PATCH] Add legal information in bundles --- src/org/argeo/build/Make.java | 47 +++++++++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) diff --git a/src/org/argeo/build/Make.java b/src/org/argeo/build/Make.java index 8e178cd..324cae8 100644 --- a/src/org/argeo/build/Make.java +++ b/src/org/argeo/build/Make.java @@ -13,6 +13,7 @@ import java.io.PrintWriter; import java.lang.System.Logger; import java.lang.System.Logger.Level; import java.lang.management.ManagementFactory; +import java.nio.file.DirectoryStream; import java.nio.file.FileVisitResult; import java.nio.file.Files; import java.nio.file.Path; @@ -406,6 +407,12 @@ public class Make { } }); + // add legal notices and licenses + for (Path p : listLegalFilesToInclude(source).values()) { + jarOut.putNextEntry(new JarEntry(p.getFileName().toString())); + Files.copy(p, jarOut); + } + // add sources // TODO add effective BND, Eclipse project file, etc., in order to be able to // repackage @@ -425,6 +432,11 @@ public class Make { try (JarOutputStream srcJarOut = new JarOutputStream(Files.newOutputStream(srcJarP), srcManifest)) { copySourcesToJar(srcP, srcJarOut, ""); + // add legal notices and licenses + for (Path p : listLegalFilesToInclude(source).values()) { + jarOut.putNextEntry(new JarEntry(p.getFileName().toString())); + Files.copy(p, jarOut); + } } } else { copySourcesToJar(srcP, jarOut, "OSGI-OPT/src/"); @@ -432,6 +444,41 @@ public class Make { } } + /** List the relevant legal files to include, from the SDK source base. */ + Map listLegalFilesToInclude(Path bundleBase) throws IOException { + Map toInclude = new HashMap<>(); + DirectoryStream sdkSrcLegal = Files.newDirectoryStream(sdkSrcBase, (p) -> { + String fileName = p.getFileName().toString(); + return switch (fileName) { + case "NOTICE": + case "LICENSE": + case "COPYING": + case "COPYING.LESSER": + yield true; + default: + yield false; + }; + }); + for (Path p : sdkSrcLegal) + toInclude.put(p.getFileName().toString(), p); + DirectoryStream bundleLegal = Files.newDirectoryStream(bundleBase, (p) -> { + String fileName = p.getFileName().toString(); + return switch (fileName) { + case "NOTICE": + case "LICENSE": + case "COPYING": + case "COPYING.LESSER": + yield true; + default: + yield false; + }; + }); + // bundle can override + for (Path p : bundleLegal) + toInclude.put(p.getFileName().toString(), p); + return toInclude; + } + /* * UTILITIES */ -- 2.30.2