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). */
/** 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);
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<String, String> branchVariables = readeMakefileVariables(branchMk);
-
- String branch = branchVariables.get("BRANCH");
+ if (Files.exists(branchMk)) {
+ Map<String, String> branchVariables = readeMakefileVariables(branchMk);
+ branch = branchVariables.get("BRANCH");
+ } else {
+ branch = null;
+ }
long begin = System.currentTimeMillis();
// create jars in parallel
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");
// add sources
// TODO add effective BND, Eclipse project file, etc., in order to be able to
// repackage
- Files.walkFileTree(srcP, new SimpleFileVisitor<Path>() {
- @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<Path>() {
+ @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;
+ }
+ });
+ }
}
}