Builds based on Make
authorMathieu Baudier <mbaudier@argeo.org>
Sat, 12 Feb 2022 10:25:00 +0000 (11:25 +0100)
committerMathieu Baudier <mbaudier@argeo.org>
Sat, 12 Feb 2022 10:25:00 +0000 (11:25 +0100)
13 files changed:
.gitignore
Makefile [new file with mode: 0644]
branch.properties [new file with mode: 0644]
configure [new file with mode: 0644]
org.argeo.app.theme.default/.classpath [new file with mode: 0644]
org.argeo.app.theme.default/.project
org.argeo.app.theme.default/rap/work.css [deleted file]
org.argeo.app.theme.default/src/rap/work.css [new file with mode: 0644]
org.argeo.app.theme.default/src/swt/app.css [new file with mode: 0644]
org.argeo.app.theme.default/swt/app.css [deleted file]
org.argeo.app.ui.rap/src/.gitignore [new file with mode: 0644]
sdk/ecj.args [new file with mode: 0644]
sdk/osgi.mk [new file with mode: 0644]

index 950facde1d6e1cd331c2a052207a807463e8a3dd..142a5c9b0c7d32c2c18d7c7dbec116532834d564 100644 (file)
@@ -3,3 +3,4 @@
 **/generated/
 **/MANIFEST.MF
 **/.DS_Store
+/sdk.mk
diff --git a/Makefile b/Makefile
new file mode 100644 (file)
index 0000000..7d4c9cb
--- /dev/null
+++ b/Makefile
@@ -0,0 +1,32 @@
+include sdk.mk
+.PHONY: clean all osgi
+
+all: osgi
+
+A2_CATEGORY = org.argeo.suite
+
+BUNDLES = \
+org.argeo.app.api \
+org.argeo.app.core \
+org.argeo.app.servlet.odk \
+org.argeo.app.servlet.publish \
+org.argeo.app.ui \
+org.argeo.app.theme.default \
+org.argeo.app.ui.rap \
+
+A2_OUTPUT = $(SDK_BUILD_BASE)/a2
+A2_BASE = $(A2_OUTPUT)
+
+DEP_CATEGORIES = \
+org.argeo.tp \
+org.argeo.tp.apache \
+org.argeo.tp.jetty \
+org.argeo.tp.eclipse.equinox \
+org.argeo.tp.eclipse.rap \
+org.argeo.tp.jcr \
+org.argeo.cms
+
+clean:
+       rm -rf $(BUILD_BASE)
+
+include  $(SDK_SRC_BASE)/sdk/osgi.mk
\ No newline at end of file
diff --git a/branch.properties b/branch.properties
new file mode 100644 (file)
index 0000000..7a7e579
--- /dev/null
@@ -0,0 +1,2 @@
+MAJOR=2
+MINOR=3
diff --git a/configure b/configure
new file mode 100644 (file)
index 0000000..da5dffb
--- /dev/null
+++ b/configure
@@ -0,0 +1,55 @@
+#!/bin/sh
+
+# We build where we are
+SDK_BUILD_BASE=$(pwd -P)/output
+
+# Source are located where this script is
+SDK_SRC_BASE="$(cd "$(dirname "$0")"; pwd -P)"
+
+SDK_MK=$SDK_SRC_BASE/sdk.mk
+
+#echo SDK_BUILD_BASE=$SDK_BUILD_BASE
+#echo SDK_SRC_BASE=$SDK_SRC_BASE
+#echo SDK_MK=$SDK_MK
+
+if [ -f "$SDK_MK" ]; 
+then
+
+echo "File $SDK_MK already exists. Remove it in order to configure a new build location:"
+echo "rm $SDK_MK"
+exit 1
+
+else
+
+if [ -z "$JAVA_HOME" ]
+then
+echo "Environment variable JAVA_HOME must be set"
+exit 1
+fi
+
+# Create build directory, so that it can be used right away
+# and we check whether we have the rights
+mkdir -p $SDK_BUILD_BASE
+if [ -f "$SDK_MK" ];
+then
+echo "Cannot create $SDK_BUILD_BASE, SDK configuration has failed."
+exit 2
+fi
+
+# Generate sdk.mk
+cat > "$SDK_MK" <<EOF
+SDK_SRC_BASE := $SDK_SRC_BASE
+SDK_BUILD_BASE := $SDK_BUILD_BASE
+JAVA_HOME := $JAVA_HOME
+
+include \$(SDK_SRC_BASE)/branch.properties
+EOF
+
+
+echo SDK was configured.
+echo "JAVA_HOME        : $JAVA_HOME"
+echo "Base for sources : $SDK_SRC_BASE"
+echo "Base for builds  : $SDK_BUILD_BASE"
+exit 0
+fi
+
diff --git a/org.argeo.app.theme.default/.classpath b/org.argeo.app.theme.default/.classpath
new file mode 100644 (file)
index 0000000..e801ebf
--- /dev/null
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+       <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-11"/>
+       <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+       <classpathentry kind="src" path="src"/>
+       <classpathentry kind="output" path="bin"/>
+</classpath>
index 1a71c0834f8e96d6fdf5b0f104fa83684f6a3ad5..77b8e042db42527fec60afd2c8c67cae4b4e7320 100644 (file)
@@ -5,6 +5,11 @@
        <projects>
        </projects>
        <buildSpec>
+               <buildCommand>
+                       <name>org.eclipse.jdt.core.javabuilder</name>
+                       <arguments>
+                       </arguments>
+               </buildCommand>
                <buildCommand>
                        <name>org.eclipse.pde.ManifestBuilder</name>
                        <arguments>
@@ -23,5 +28,6 @@
        </buildSpec>
        <natures>
                <nature>org.eclipse.pde.PluginNature</nature>
+               <nature>org.eclipse.jdt.core.javanature</nature>
        </natures>
 </projectDescription>
diff --git a/org.argeo.app.theme.default/rap/work.css b/org.argeo.app.theme.default/rap/work.css
deleted file mode 100644 (file)
index c0aaeb1..0000000
+++ /dev/null
@@ -1,181 +0,0 @@
-.argeo-suite-header {
-       color: white;
-       background-color: #00294b;
-}
-
-.argeo-suite-headerTitle {
-       font: bold 18px sans-serif;
-       color: white;
-       background-color: #00294b;
-}
-
-.argeo-suite-leadPane {
-       background-color: #eee;
-}
-
-Label.argeo-suite-leadPane {
-       font: 14px sans-serif;
-       color: #888;
-       background-color: #eee;
-}
-
-Button.argeo-suite-leadPane:hover {
-       cursor:pointer;
-}
-
-.argeo-suite-recentItems {
-       font: bold 14px sans-serif;
-       color: white;
-       background-color: #00294b;
-       padding: 8px 16px;
-}
-
-.argeo-suite-titleContainer {
-       background-color: #00294b;
-       padding: 6px 8px 4px 8px;
-}
-
-.argeo-suite-titleLabel {
-       font: bold 14px sans-serif;
-       color: white;
-       background-color: #00294b;
-}
-
-.argeo-suite-subTitleLabel {
-       font: italic 14px sans-serif;
-       color: #777;
-       padding: 4px 8px;
-}
-
-.argeo-suite-simpleLabel {
-       font: bold 14px sans-serif;
-       padding: 0px;
-}
-
-.argeo-suite-simpleText {
-       font: 14px sans-serif;
-       padding: 0px;
-}
-
-.argeo-suite-titleCell {
-       font: bold 14px sans-serif;
-       background-color: #ddd;
-}
-
-.argeo-suite-inlineButton {
-       padding: 0px 4px;
-       font: 12px sans-serif;
-       border: 1px solid white;
-       color: white;
-       background-image: none;
-       background-color: #00294b;
-}
-
-.argeo-suite-inlineButton:hover {
-       color: #00294b;
-       background-color: white;
-}
-
-Composite.argeo-suite-mainTabBody {
-       background-color: #eee;
-       border: 1px solid #bbb;
-}
-
-.argeo-suite-mainTab {
-       background-color: #eee;
-       border: 1px solid #888;
-}
-
-ToolItem.argeo-suite-mainTab {
-       border: none;
-       background-color: #eee;
-}
-
-ToolItem.argeo-suite-mainTab:hover {
-       background-color: #eee;
-}
-
-
-Button.argeo-suite-mainTab {
-       border: 1px solid #eee;
-       background-color: #eee;
-}
-
-.argeo-suite-mainTab:hover {
-       background-color: #eee;
-}
-
-Button.argeo-suite-mainTab:hover {
-       cursor: pointer;
-       background-color: #eee;
-}
-
-.argeo-suite-mainTabSelected {
-       font: bold 14px sans-serif;
-       color: white;
-       /*background-color: #00294b;*/
-       background-color: #5882b5;
-       border:1px solid #888;
-}
-
-ToolItem.argeo-suite-mainTabSelected {
-       border: none;
-}
-
-ToolItem.argeo-suite-mainTabSelected:hover {
-       background-color: #5882b5;
-}
-
-Button.argeo-suite-mainTabSelected {
-       border: none;
-}
-
-Sash {
-  border: 1px solid white;
-  background-image: none;
-  background-color: white;
-}
-
-Sash:hover {
-  border: 1px solid #5882b5;
-  background-color: #5882b5;
-}
-
-TreeItem{
-       background-color:#fff;
-}
-
-Tree-RowOverlay:selected {
-       color:#fff;
-       background-color:#5882b5;
-}
-
-TableItem{
-       background-color:#fff;
-}
-
-Table-RowOverlay:selected {
-       color:#fff;
-       background-color:#5882b5;
-}
-
-.argeo-suite-navigationBar{
-       background-color:#ddd;
-}
-
-.argeo-suite-navigationTitle{
-       background-color:#ddd;
-       font:bold 14px sans-serif;
-}
-
-.argeo-suite-navigationButton{
-       color:#777;
-       background-color:#ddd;
-       font:bold 14px sans-serif;
-}
-
-.argeo-suite-navigationButton:hover{
-       cursor:pointer;
-       color:#ddd;
-       background-color:#777;
-}
diff --git a/org.argeo.app.theme.default/src/rap/work.css b/org.argeo.app.theme.default/src/rap/work.css
new file mode 100644 (file)
index 0000000..c0aaeb1
--- /dev/null
@@ -0,0 +1,181 @@
+.argeo-suite-header {
+       color: white;
+       background-color: #00294b;
+}
+
+.argeo-suite-headerTitle {
+       font: bold 18px sans-serif;
+       color: white;
+       background-color: #00294b;
+}
+
+.argeo-suite-leadPane {
+       background-color: #eee;
+}
+
+Label.argeo-suite-leadPane {
+       font: 14px sans-serif;
+       color: #888;
+       background-color: #eee;
+}
+
+Button.argeo-suite-leadPane:hover {
+       cursor:pointer;
+}
+
+.argeo-suite-recentItems {
+       font: bold 14px sans-serif;
+       color: white;
+       background-color: #00294b;
+       padding: 8px 16px;
+}
+
+.argeo-suite-titleContainer {
+       background-color: #00294b;
+       padding: 6px 8px 4px 8px;
+}
+
+.argeo-suite-titleLabel {
+       font: bold 14px sans-serif;
+       color: white;
+       background-color: #00294b;
+}
+
+.argeo-suite-subTitleLabel {
+       font: italic 14px sans-serif;
+       color: #777;
+       padding: 4px 8px;
+}
+
+.argeo-suite-simpleLabel {
+       font: bold 14px sans-serif;
+       padding: 0px;
+}
+
+.argeo-suite-simpleText {
+       font: 14px sans-serif;
+       padding: 0px;
+}
+
+.argeo-suite-titleCell {
+       font: bold 14px sans-serif;
+       background-color: #ddd;
+}
+
+.argeo-suite-inlineButton {
+       padding: 0px 4px;
+       font: 12px sans-serif;
+       border: 1px solid white;
+       color: white;
+       background-image: none;
+       background-color: #00294b;
+}
+
+.argeo-suite-inlineButton:hover {
+       color: #00294b;
+       background-color: white;
+}
+
+Composite.argeo-suite-mainTabBody {
+       background-color: #eee;
+       border: 1px solid #bbb;
+}
+
+.argeo-suite-mainTab {
+       background-color: #eee;
+       border: 1px solid #888;
+}
+
+ToolItem.argeo-suite-mainTab {
+       border: none;
+       background-color: #eee;
+}
+
+ToolItem.argeo-suite-mainTab:hover {
+       background-color: #eee;
+}
+
+
+Button.argeo-suite-mainTab {
+       border: 1px solid #eee;
+       background-color: #eee;
+}
+
+.argeo-suite-mainTab:hover {
+       background-color: #eee;
+}
+
+Button.argeo-suite-mainTab:hover {
+       cursor: pointer;
+       background-color: #eee;
+}
+
+.argeo-suite-mainTabSelected {
+       font: bold 14px sans-serif;
+       color: white;
+       /*background-color: #00294b;*/
+       background-color: #5882b5;
+       border:1px solid #888;
+}
+
+ToolItem.argeo-suite-mainTabSelected {
+       border: none;
+}
+
+ToolItem.argeo-suite-mainTabSelected:hover {
+       background-color: #5882b5;
+}
+
+Button.argeo-suite-mainTabSelected {
+       border: none;
+}
+
+Sash {
+  border: 1px solid white;
+  background-image: none;
+  background-color: white;
+}
+
+Sash:hover {
+  border: 1px solid #5882b5;
+  background-color: #5882b5;
+}
+
+TreeItem{
+       background-color:#fff;
+}
+
+Tree-RowOverlay:selected {
+       color:#fff;
+       background-color:#5882b5;
+}
+
+TableItem{
+       background-color:#fff;
+}
+
+Table-RowOverlay:selected {
+       color:#fff;
+       background-color:#5882b5;
+}
+
+.argeo-suite-navigationBar{
+       background-color:#ddd;
+}
+
+.argeo-suite-navigationTitle{
+       background-color:#ddd;
+       font:bold 14px sans-serif;
+}
+
+.argeo-suite-navigationButton{
+       color:#777;
+       background-color:#ddd;
+       font:bold 14px sans-serif;
+}
+
+.argeo-suite-navigationButton:hover{
+       cursor:pointer;
+       color:#ddd;
+       background-color:#777;
+}
diff --git a/org.argeo.app.theme.default/src/swt/app.css b/org.argeo.app.theme.default/src/swt/app.css
new file mode 100644 (file)
index 0000000..4ac745d
--- /dev/null
@@ -0,0 +1,129 @@
+.argeo-suite-header {
+       color: white;
+       background-color: #00294b;
+}
+
+.argeo-suite-headerTitle {
+       font: bold 14px sans-serif;
+       color: white;
+       background-color: #00294b;
+}
+
+.argeo-suite-leadPane {
+       background-color: #eee;
+}
+
+Label.argeo-suite-leadPane {
+       font: 11px sans-serif;
+       color: #888;
+       background-color: #eee;
+}
+
+Button.argeo-suite-leadPane:hover {
+       cursor: pointer;
+}
+
+.argeo-suite-recentItems {
+       font: bold 13px sans-serif;
+       color: white;
+       background-color: #00294b;
+       padding: 8px 16px;
+}
+
+.argeo-suite-titleContainer {
+       background-color: #00294b;
+}
+
+.argeo-suite-titleLabel {
+       font: bold 13px sans-serif;
+       margin: 6px 8px 4px 8px;
+       color: white;
+       background-color: #00294b;
+}
+
+.argeo-suite-subTitleLabel {
+       font: italic 14px sans-serif;
+       color: #777;
+       margin: 4px 8px;
+}
+
+.argeo-suite-formLine {
+       padding: 4px 8px 4px 16px;
+}
+
+.argeo-suite-simpleLabel {
+       font: normal 11px sans-serif;
+       border: 8px solid #eee;
+}
+
+.argeo-suite-simpleText {
+       
+}
+
+.argeo-suite-simpleInput {
+       padding: 4px 8px 4px 8px;
+}
+
+.argeo-suite-titleCell {
+       font: bold 11px sans-serif;
+       background-color: #ddd;
+}
+
+.argeo-suite-inlineButton {
+       padding: 0px 4px;
+       font: 12px sans-serif;
+       border: 1px solid white;
+       color: white;
+       background-image: none;
+       background-color: #00294b;
+}
+
+.argeo-suite-inlineButton:hover {
+       color: #00294b;
+       background-color: white;
+}
+
+Composite.argeo-suite-mainTabBody {
+       background-color: #eee;
+       border: 1px solid #bbb;
+}
+
+.argeo-suite-mainTab {
+       background-color: #eee;
+       border: 1px solid #bbb;
+}
+
+ToolItem.argeo-suite-mainTab {
+       border: none;
+       background-color: #eee;
+}
+
+Button.argeo-suite-mainTab {
+       border: none;
+       background-color: #eee;
+}
+
+.argeo-suite-mainTab:hover {
+       background-color: #eee;
+}
+
+Button.argeo-suite-mainTab:hover {
+       cursor: pointer;
+       background-color: #eee;
+}
+
+.argeo-suite-mainTabSelected {
+       font: bold 14px sans-serif;
+       color: white;
+       /*background-color: #00294b;*/
+       background-color: #5882b5;
+       border: 1px solid #00294b;
+}
+
+ToolItem.argeo-suite-mainTabSelected {
+       border: none;
+}
+
+Button.argeo-suite-mainTabSelected {
+       border: none;
+}
\ No newline at end of file
diff --git a/org.argeo.app.theme.default/swt/app.css b/org.argeo.app.theme.default/swt/app.css
deleted file mode 100644 (file)
index 4ac745d..0000000
+++ /dev/null
@@ -1,129 +0,0 @@
-.argeo-suite-header {
-       color: white;
-       background-color: #00294b;
-}
-
-.argeo-suite-headerTitle {
-       font: bold 14px sans-serif;
-       color: white;
-       background-color: #00294b;
-}
-
-.argeo-suite-leadPane {
-       background-color: #eee;
-}
-
-Label.argeo-suite-leadPane {
-       font: 11px sans-serif;
-       color: #888;
-       background-color: #eee;
-}
-
-Button.argeo-suite-leadPane:hover {
-       cursor: pointer;
-}
-
-.argeo-suite-recentItems {
-       font: bold 13px sans-serif;
-       color: white;
-       background-color: #00294b;
-       padding: 8px 16px;
-}
-
-.argeo-suite-titleContainer {
-       background-color: #00294b;
-}
-
-.argeo-suite-titleLabel {
-       font: bold 13px sans-serif;
-       margin: 6px 8px 4px 8px;
-       color: white;
-       background-color: #00294b;
-}
-
-.argeo-suite-subTitleLabel {
-       font: italic 14px sans-serif;
-       color: #777;
-       margin: 4px 8px;
-}
-
-.argeo-suite-formLine {
-       padding: 4px 8px 4px 16px;
-}
-
-.argeo-suite-simpleLabel {
-       font: normal 11px sans-serif;
-       border: 8px solid #eee;
-}
-
-.argeo-suite-simpleText {
-       
-}
-
-.argeo-suite-simpleInput {
-       padding: 4px 8px 4px 8px;
-}
-
-.argeo-suite-titleCell {
-       font: bold 11px sans-serif;
-       background-color: #ddd;
-}
-
-.argeo-suite-inlineButton {
-       padding: 0px 4px;
-       font: 12px sans-serif;
-       border: 1px solid white;
-       color: white;
-       background-image: none;
-       background-color: #00294b;
-}
-
-.argeo-suite-inlineButton:hover {
-       color: #00294b;
-       background-color: white;
-}
-
-Composite.argeo-suite-mainTabBody {
-       background-color: #eee;
-       border: 1px solid #bbb;
-}
-
-.argeo-suite-mainTab {
-       background-color: #eee;
-       border: 1px solid #bbb;
-}
-
-ToolItem.argeo-suite-mainTab {
-       border: none;
-       background-color: #eee;
-}
-
-Button.argeo-suite-mainTab {
-       border: none;
-       background-color: #eee;
-}
-
-.argeo-suite-mainTab:hover {
-       background-color: #eee;
-}
-
-Button.argeo-suite-mainTab:hover {
-       cursor: pointer;
-       background-color: #eee;
-}
-
-.argeo-suite-mainTabSelected {
-       font: bold 14px sans-serif;
-       color: white;
-       /*background-color: #00294b;*/
-       background-color: #5882b5;
-       border: 1px solid #00294b;
-}
-
-ToolItem.argeo-suite-mainTabSelected {
-       border: none;
-}
-
-Button.argeo-suite-mainTabSelected {
-       border: none;
-}
\ No newline at end of file
diff --git a/org.argeo.app.ui.rap/src/.gitignore b/org.argeo.app.ui.rap/src/.gitignore
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/sdk/ecj.args b/sdk/ecj.args
new file mode 100644 (file)
index 0000000..852a33d
--- /dev/null
@@ -0,0 +1,4 @@
+-source 17
+-target 11
+-nowarn
+-time 
\ No newline at end of file
diff --git a/sdk/osgi.mk b/sdk/osgi.mk
new file mode 100644 (file)
index 0000000..a97a937
--- /dev/null
@@ -0,0 +1,67 @@
+
+
+#
+# GENERIC
+#
+JVM := $(JAVA_HOME)/bin/java
+JAVADOC := $(JAVA_HOME)/bin/javadoc
+ECJ_JAR := $(SDK_BUILD_BASE)/a2/org.argeo.tp.sdk/org.eclipse.jdt.core.compiler.batch.3.28.jar
+BND_TOOL := /usr/bin/bnd
+
+BUILD_BASE = $(SDK_BUILD_BASE)/$(A2_CATEGORY)
+
+WORKSPACE_BNDS := $(shell cd $(SDK_SRC_BASE) && find cnf -name '*.bnd')
+BUILD_WORKSPACE_BNDS := $(WORKSPACE_BNDS:%=$(BUILD_BASE)/%)
+
+A2_JARS = $(foreach category, $(DEP_CATEGORIES), $(shell find $(A2_BASE)/$(category) -name '*.jar'))
+A2_CLASSPATH = $(subst $(space),$(pathsep),$(strip $(A2_JARS)))
+
+A2_BUNDLES = $(foreach bundle, $(BUNDLES),$(A2_OUTPUT)/$(A2_CATEGORY)/$(shell basename $(bundle)).$(MAJOR).$(MINOR).jar)
+
+JAVA_SRCS = $(foreach bundle, $(BUNDLES), $(shell find $(bundle) -name '*.java'))
+BNDS = $(foreach bundle, $(BUNDLES), $(BUILD_BASE)/$(shell basename $(bundle))/bnd.bnd)
+ECJ_SRCS = $(foreach bundle, $(BUNDLES), $(bundle)/src[-d $(BUILD_BASE)/$(shell basename $(bundle))/bin])
+
+JAVADOC_SRCS = $(foreach bundle, $(JAVADOC_BUNDLES),$(bundle)/src)
+
+osgi: $(BUILD_WORKSPACE_BNDS) $(A2_BUNDLES)
+
+javadoc: $(BUILD_BASE)/java-compiled
+       $(JAVADOC) -d $(BUILD_BASE)/api --source-path $(subst $(space),$(pathsep),$(strip $(JAVADOC_SRCS))) -subpackages $(JAVADOC_PACKAGES)
+
+
+# SDK level
+$(BUILD_BASE)/cnf/%.bnd: cnf/%.bnd
+       mkdir -p $(dir $@)
+       cp $< $@
+       
+$(SDK_BUILD_BASE)/a2/$(A2_CATEGORY)/%.$(MAJOR).$(MINOR).jar : $(BUILD_BASE)/%.jar
+       mkdir -p $(dir $@)
+       cp $< $@
+
+$(BUILD_BASE)/%.jar: $(BUILD_BASE)/jars-built
+       mv $(basename $@)/generated/*.jar $(basename $@).jar
+
+# Build level
+$(BUILD_BASE)/jars-built: $(BNDS)
+       cd $(BUILD_BASE) && $(BND_TOOL) build
+       touch $@
+
+$(BUILD_BASE)/%/bnd.bnd : %/bnd.bnd $(BUILD_BASE)/java-compiled 
+       mkdir -p $(dir $@)bin
+       rsync -r --exclude "*.java" $(dir  $<)src/ $(dir $@)bin
+       if [ -d "$(dir  $<)OSGI-INF" ]; then rsync -r $(dir  $<)OSGI-INF/ $(dir $@)/OSGI-INF; fi
+       cp $< $@
+       echo "\n-sourcepath:$(SDK_SRC_BASE)/$(dir  $<)src\n" >> $@
+
+$(BUILD_BASE)/java-compiled : $(JAVA_SRCS)
+       $(JVM) -jar $(ECJ_JAR) @$(SDK_SRC_BASE)/sdk/ecj.args -cp $(A2_CLASSPATH) $(ECJ_SRCS)
+       touch $@
+
+# Local manifests
+manifests : osgi
+       $(foreach bundle, $(BUNDLES), cp -v $(BUILD_BASE)/$(shell basename $(bundle))/META-INF/MANIFEST.MF  $(bundle)/META-INF/MANIFEST.MF;)
+
+null  :=
+space := $(null) #
+pathsep := :