X-Git-Url: https://git.argeo.org/?a=blobdiff_plain;f=src%2Forg%2Fargeo%2Fbuild%2FMake.java;h=8e178cd52630b2c62895276653184956f449a0ef;hb=a6ebf62be67d594d8c05eb56036ba4816c43c6e5;hp=782cfed024bd0af26af1cd359018d5e41d95cc9c;hpb=bd4ae9f18e5dd0c397ae0de060f6f6cf3ba1ee33;p=cc0%2Fargeo-build.git diff --git a/src/org/argeo/build/Make.java b/src/org/argeo/build/Make.java index 782cfed..8e178cd 100644 --- a/src/org/argeo/build/Make.java +++ b/src/org/argeo/build/Make.java @@ -1,7 +1,9 @@ package org.argeo.build; +import static java.lang.System.Logger.Level.DEBUG; import static java.lang.System.Logger.Level.ERROR; import static java.lang.System.Logger.Level.INFO; +import static java.lang.System.Logger.Level.WARNING; import java.io.File; import java.io.IOException; @@ -54,11 +56,18 @@ public class Make { private final static Logger logger = System.getLogger(Make.class.getName()); /** - * Environment properties on whether sources should be packaged separately or + * Environment variable on whether sources should be packaged separately or * integrated in the bundles. */ private final static String ENV_SOURCE_BUNDLES = "SOURCE_BUNDLES"; + /** + * Environment variable to override the default location for the Argeo Build + * configuration files. Typically used if Argeo Build has been compiled and + * packaged separately. + */ + private final static String ENV_ARGEO_BUILD_CONFIG = "ARGEO_BUILD_CONFIG"; + /** Name of the local-specific Makefile (sdk.mk). */ final static String SDK_MK = "sdk.mk"; /** Name of the branch definition Makefile (branch.mk). */ @@ -99,7 +108,19 @@ public class Make { sdkSrcBase = Paths.get(context.computeIfAbsent("SDK_SRC_BASE", (key) -> { throw new IllegalStateException(key + " not found"); })).toAbsolutePath(); - argeoBuildBase = sdkSrcBase.resolve("sdk/argeo-build"); + + Path argeoBuildBaseT = sdkSrcBase.resolve("sdk/argeo-build"); + if (!Files.exists(argeoBuildBaseT)) { + String fromEnv = System.getenv(ENV_ARGEO_BUILD_CONFIG); + if (fromEnv != null) + argeoBuildBaseT = Paths.get(fromEnv); + if (fromEnv == null || !Files.exists(argeoBuildBaseT)) { + throw new IllegalStateException( + "Argeo Build not found. Did you initialise the git submodules or set the " + + ENV_ARGEO_BUILD_CONFIG + " environment variable?"); + } + } + argeoBuildBase = argeoBuildBaseT; sdkBuildBase = Paths.get(context.computeIfAbsent("SDK_BUILD_BASE", (key) -> { throw new IllegalStateException(key + " not found"); @@ -119,7 +140,6 @@ public class Make { } /** Compile all the bundles which have been passed via the --bundle argument. */ - @SuppressWarnings("restriction") void compile(Map> options) throws IOException { List bundles = options.get("--bundles"); Objects.requireNonNull(bundles, "--bundles argument must be set"); @@ -143,16 +163,15 @@ public class Make { // and order by bundle name, for predictability Map a2Jars = new TreeMap<>(); - StringJoiner modulePath = new StringJoiner(File.pathSeparator); +// StringJoiner modulePath = new StringJoiner(File.pathSeparator); for (String a2Base : a2Bases) { categories: for (String a2Category : a2Categories) { Path a2Dir = Paths.get(a2Base).resolve(a2Category); if (!Files.exists(a2Dir)) continue categories; - modulePath.add(a2Dir.toString()); +// modulePath.add(a2Dir.toString()); for (Path jarP : Files.newDirectoryStream(a2Dir, (p) -> p.getFileName().toString().endsWith(".jar"))) { - // classPath.add(jarP.toString()); A2Jar a2Jar = new A2Jar(jarP); if (a2Jars.containsKey(a2Jar.name)) { A2Jar current = a2Jars.get(a2Jar.name); @@ -183,8 +202,14 @@ public class Make { for (String bundle : bundles) { StringBuilder sb = new StringBuilder(); Path bundlePath = execDirectory.resolve(bundle); - if (!Files.exists(bundlePath)) - throw new IllegalArgumentException("Bundle " + bundle + " not found in " + execDirectory); + if (!Files.exists(bundlePath)) { + if (bundles.size() == 1) { + logger.log(WARNING, "Bundle " + bundle + " not found in " + execDirectory + + ", assuming this is this directory, as only one bundle was requested."); + bundlePath = execDirectory; + } else + throw new IllegalArgumentException("Bundle " + bundle + " not found in " + execDirectory); + } sb.append(bundlePath.resolve("src")); sb.append("[-d"); compilerArgs.add(sb.toString()); @@ -197,8 +222,11 @@ public class Make { if (logger.isLoggable(INFO)) compilerArgs.add("-time"); -// for (String arg : compilerArgs) -// System.out.println(arg); + if (logger.isLoggable(DEBUG)) { + logger.log(DEBUG, "Compiler arguments:"); + for (String arg : compilerArgs) + logger.log(DEBUG, arg); + } boolean success = org.eclipse.jdt.core.compiler.batch.BatchCompiler.compile( compilerArgs.toArray(new String[compilerArgs.size()]), new PrintWriter(System.out), @@ -247,12 +275,17 @@ public class Make { logger.log(INFO, "Packaging took " + duration + " ms"); } - /* - * UTILITIES - */ /** Package a single bundle. */ void createBundle(String branch, String bundle, String category) throws IOException { - Path source = execDirectory.resolve(bundle); + final Path source; + if (!Files.exists(execDirectory.resolve(bundle))) { + logger.log(WARNING, + "Bundle " + bundle + " not found in " + execDirectory + ", assuming this is this directory."); + source = execDirectory; + } else { + source = execDirectory.resolve(bundle); + } + Path compiled = buildBase.resolve(bundle); String bundleSymbolicName = source.getFileName().toString(); @@ -399,6 +432,10 @@ public class Make { } } + /* + * UTILITIES + */ + /** Add sources to a jar file */ void copySourcesToJar(Path srcP, JarOutputStream srcJarOut, String prefix) throws IOException { Files.walkFileTree(srcP, new SimpleFileVisitor() { @Override