X-Git-Url: https://git.argeo.org/?a=blobdiff_plain;ds=sidebyside;f=src%2Forg%2Fargeo%2Fbuild%2FMake.java;h=beacf017ed4a68bd13e68fc78f5146020d6342cb;hb=d99c3c1e21b923f9a52fad75dd1e163c8dc553d1;hp=9593e0df00d01b38126b387e377e7a23bf1e6127;hpb=33fa4ce3d184f4d226d1875868434a48741af82c;p=cc0%2Fargeo-build.git diff --git a/src/org/argeo/build/Make.java b/src/org/argeo/build/Make.java index 9593e0d..beacf01 100644 --- a/src/org/argeo/build/Make.java +++ b/src/org/argeo/build/Make.java @@ -50,6 +50,12 @@ import aQute.bnd.osgi.Jar; public class Make { private final static Logger logger = System.getLogger(Make.class.getName()); + /** + * Environment properties on whether sources should be packaged separately or + * integrated in the bundles. + */ + private final static String ENV_BUILD_SOURCE_BUNDLES = "BUILD_SOURCE_BUNDLES"; + /** Name of the local-specific Makefile (sdk.mk). */ final static String SDK_MK = "sdk.mk"; /** Name of the branch definition Makefile (branch.mk). */ @@ -71,8 +77,15 @@ public class Make { /** The base of the a2 output for all layers. */ final Path a2Output; + /** Whether sources should be packaged separately */ + final boolean sourceBundles; + /** Constructor initialises the base directories. */ public Make() throws IOException { + sourceBundles = Boolean.parseBoolean(System.getenv(ENV_BUILD_SOURCE_BUNDLES)); + if (sourceBundles) + logger.log(Level.INFO, "Sources will be packaged separately"); + execDirectory = Paths.get(System.getProperty("user.dir")); Path sdkMkP = findSdkMk(execDirectory); Objects.requireNonNull(sdkMkP, "No " + SDK_MK + " found under " + execDirectory); @@ -182,12 +195,14 @@ public class Make { throw new IllegalArgumentException("One and only one --category must be specified"); String category = categories.get(0); + final String branch; Path branchMk = sdkSrcBase.resolve(BRANCH_MK); - if (!Files.exists(branchMk)) - throw new IllegalStateException("No " + branchMk + " file available"); - Map branchVariables = readeMakefileVariables(branchMk); - - String branch = branchVariables.get("BRANCH"); + if (Files.exists(branchMk)) { + Map branchVariables = readeMakefileVariables(branchMk); + branch = branchVariables.get("BRANCH"); + } else { + branch = null; + } long begin = System.currentTimeMillis(); // create jars in parallel @@ -222,18 +237,23 @@ public class Make { properties.load(in); } - Path branchBnd = sdkSrcBase.resolve("sdk/branches/" + branch + ".bnd"); - try (InputStream in = Files.newInputStream(branchBnd)) { - properties.load(in); + if (branch != null) { + Path branchBnd = sdkSrcBase.resolve("sdk/branches/" + branch + ".bnd"); + if (Files.exists(branchBnd)) + try (InputStream in = Files.newInputStream(branchBnd)) { + properties.load(in); + } } Path bndBnd = source.resolve("bnd.bnd"); - try (InputStream in = Files.newInputStream(bndBnd)) { - properties.load(in); - } + if (Files.exists(bndBnd)) + try (InputStream in = Files.newInputStream(bndBnd)) { + properties.load(in); + } // Normalise - properties.put("Bundle-SymbolicName", bundleSymbolicName); + if (!properties.containsKey("Bundle-SymbolicName")) + properties.put("Bundle-SymbolicName", bundleSymbolicName); // Calculate MANIFEST Path binP = compiled.resolve("bin"); @@ -330,16 +350,19 @@ public class Make { // add sources // TODO add effective BND, Eclipse project file, etc., in order to be able to // repackage - Files.walkFileTree(srcP, new SimpleFileVisitor() { - @Override - public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException { - jarOut.putNextEntry(new JarEntry("OSGI-OPT/src/" + srcP.relativize(file).toString())); - if (!Files.isDirectory(file)) - Files.copy(file, jarOut); - return FileVisitResult.CONTINUE; - } - }); - + if (sourceBundles) { + // TODO package sources separately + } else { + Files.walkFileTree(srcP, new SimpleFileVisitor() { + @Override + public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException { + jarOut.putNextEntry(new JarEntry("OSGI-OPT/src/" + srcP.relativize(file).toString())); + if (!Files.isDirectory(file)) + Files.copy(file, jarOut); + return FileVisitResult.CONTINUE; + } + }); + } } }