From 74232bbbcd17259fcaf4b3ff29e30e7a795bc945 Mon Sep 17 00:00:00 2001 From: Mathieu Baudier Date: Tue, 18 Oct 2022 11:44:37 +0200 Subject: [PATCH] Read branch directly from branch.mk --- osgi.mk | 4 +-- src/org/argeo/build/Make.java | 52 ++++++++++++++++++++++------------- 2 files changed, 35 insertions(+), 21 deletions(-) diff --git a/osgi.mk b/osgi.mk index 14374ec..d759efc 100644 --- a/osgi.mk +++ b/osgi.mk @@ -46,11 +46,11 @@ javadoc: $(BUILD_BASE)/built # Actual build (compilation + bundle packaging) $(BUILD_BASE)/built : BUNDLES_TO_BUILD = $(subst $(abspath $(BUILD_BASE))/,, $(subst to-build,, $?)) $(BUILD_BASE)/built : $(TODOS) - $(ARGEO_MAKE) all --branch $(BRANCH) --a2-bases $(A2_BASE) --dep-categories $(DEP_CATEGORIES) --category $(A2_CATEGORY) --bundles $(BUNDLES_TO_BUILD) + $(ARGEO_MAKE) all --a2-bases $(A2_BASE) --dep-categories $(DEP_CATEGORIES) --category $(A2_CATEGORY) --bundles $(BUNDLES_TO_BUILD) touch $(BUILD_BASE)/built $(A2_OUTPUT)/%.$(major).$(minor).jar : $(BUILD_BASE)/$$(subst $(A2_CATEGORY)/,,$$*)/to-build - $(ARGEO_MAKE) all --branch $(BRANCH) --a2-bases $(A2_BASE) --dep-categories $(DEP_CATEGORIES) --category $(A2_CATEGORY) --bundles $(subst $(A2_CATEGORY)/,,$*) + $(ARGEO_MAKE) all --a2-bases $(A2_BASE) --dep-categories $(DEP_CATEGORIES) --category $(A2_CATEGORY) --bundles $(subst $(A2_CATEGORY)/,,$*) $(BUILD_BASE)/%/to-build : $$(shell find $(SDK_SRC_BASE)/% -type f -not -path 'bin/*' -not -path '*/MANIFEST.MF' | sed 's/ /\\ /g') @rm -rf $(dir $@) diff --git a/src/org/argeo/build/Make.java b/src/org/argeo/build/Make.java index d92ca98..6f84344 100644 --- a/src/org/argeo/build/Make.java +++ b/src/org/argeo/build/Make.java @@ -51,6 +51,8 @@ public class Make { /** Name of the local-specific Makefile (sdk.mk). */ final static String SDK_MK = "sdk.mk"; + /** Name of the branch definition Makefile (branch.mk). */ + final static String BRANCH_MK = "branch.mk"; /** The execution directory (${user.dir}). */ final Path execDirectory; @@ -74,19 +76,7 @@ public class Make { Path sdkMkP = findSdkMk(execDirectory); Objects.requireNonNull(sdkMkP, "No " + SDK_MK + " found under " + execDirectory); - Map context = new HashMap<>(); - List sdkMkLines = Files.readAllLines(sdkMkP); - lines: for (String line : sdkMkLines) { - StringTokenizer st = new StringTokenizer(line, " :="); - if (!st.hasMoreTokens()) - continue lines; - String key = st.nextToken(); - if (!st.hasMoreTokens()) - continue lines; - String value = st.nextToken(); - context.put(key, value); - } - + Map context = readeMakefileVariables(sdkMkP); sdkSrcBase = Paths.get(context.computeIfAbsent("SDK_SRC_BASE", (key) -> { throw new IllegalStateException(key + " not found"); })).toAbsolutePath(); @@ -178,7 +168,7 @@ public class Make { } /** Package the bundles. */ - void bundle(Map> options) { + void bundle(Map> options) throws IOException { // check arguments List bundles = options.get("--bundles"); Objects.requireNonNull(bundles, "--bundles argument must be set"); @@ -191,10 +181,12 @@ public class Make { throw new IllegalArgumentException("One and only one --category must be specified"); String category = categories.get(0); - List branches = options.get("--branch"); - if (branches.size() != 1) - throw new IllegalArgumentException("One and only one --branch must be specified"); - String branch = branches.get(0); + 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"); long begin = System.currentTimeMillis(); // create jars in parallel @@ -338,7 +330,7 @@ public class Make { * Recursively find the base source directory (which contains the * {@value #SDK_MK} file). */ - private Path findSdkMk(Path directory) { + Path findSdkMk(Path directory) { Path sdkMkP = directory.resolve(SDK_MK); if (Files.exists(sdkMkP)) { return sdkMkP.toAbsolutePath(); @@ -348,6 +340,28 @@ public class Make { return findSdkMk(directory.getParent()); } + /** + * Reads Makefile variable assignments of the form =, :=, or ?=, ignoring white + * spaces. To be used with very simple included Makefiles only. + */ + Map readeMakefileVariables(Path path) throws IOException { + Map context = new HashMap<>(); + List sdkMkLines = Files.readAllLines(path); + lines: for (String line : sdkMkLines) { + StringTokenizer st = new StringTokenizer(line, " :=?"); + if (!st.hasMoreTokens()) + continue lines; + String key = st.nextToken(); + if (!st.hasMoreTokens()) + continue lines; + String value = st.nextToken(); + if (st.hasMoreTokens()) // probably not a simple variable assignment + continue lines; + context.put(key, value); + } + return context; + } + /** Main entry point, interpreting actions and arguments. */ public static void main(String... args) { if (args.length == 0) -- 2.30.2