From c1551d358c85a2f3d074a9ddd469f015a2cabb6f Mon Sep 17 00:00:00 2001 From: Mathieu Baudier Date: Sat, 12 Feb 2022 11:24:31 +0100 Subject: [PATCH] Builds based on Make --- Makefile | 126 ++++-------------- configure | 9 +- .../src/org/argeo/slc/factory/A2Factory.java | 53 ++++---- sdk/ecj.args | 4 + sdk/includes.mk | 1 - sdk/osgi.mk | 67 ++++++++++ sdk/output-argeo-tp-rap.target | 14 +- tp/Make.java | 9 +- 8 files changed, 145 insertions(+), 138 deletions(-) create mode 100644 sdk/ecj.args delete mode 100644 sdk/includes.mk create mode 100644 sdk/osgi.mk diff --git a/Makefile b/Makefile index ffef76901..eeda3676c 100644 --- a/Makefile +++ b/Makefile @@ -1,9 +1,8 @@ include sdk.mk .PHONY: clean all osgi -all: osgi distribution +all: osgi move-ext -BUNDLE_PREFIX = org.argeo A2_CATEGORY = org.argeo.slc BUNDLES = \ @@ -11,116 +10,37 @@ org.argeo.slc.api \ org.argeo.slc.factory \ org.argeo.slc.runtime \ ext/org.argeo.ext.slf4j \ -ext/org.argeo.ext.equinox.jetty \ -BUILD_CLASSPATH_FEDORA = \ -/usr/share/java/osgi-core/osgi.core.jar:$\ -/usr/share/java/osgi-compendium/osgi.cmpn.jar:$\ -/usr/share/java/ecj/ecj.jar:$\ -/usr/share/java/aqute-bnd/biz.aQute.bndlib.jar:$\ -/usr/share/java/slf4j/api.jar:$\ -/usr/share/java/commons-io.jar:$\ -/usr/share/java/commons-cli.jar:$\ -/usr/share/java/commons-exec.jar:$\ - -BUILD_CLASSPATH = \ -/usr/share/java/osgi.core.jar:$\ -/usr/share/java/osgi.cmpn.jar:$\ -/usr/share/java/ecj.jar:$\ -/usr/share/java/bndlib.jar:$\ -/usr/share/java/slf4j-api.jar:$\ -/usr/share/java/commons-io.jar:$\ -/usr/share/java/commons-cli.jar:$\ -/usr/share/java/commons-exec.jar:$\ - -# TODO relativize from SDK_SRC_BASE -BUILD_BASE = $(SDK_BUILD_BASE) - - - -# -# GENERIC -# -JVM := /usr/bin/java -JAVADOC := /usr/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 - -WORKSPACE_BNDS := $(shell cd $(SDK_SRC_BASE) && find cnf -name '*.bnd') -BUILD_WORKSPACE_BNDS := $(WORKSPACE_BNDS:%=$(SDK_BUILD_BASE)/%) $(WORKSPACE_BNDS:%=$(SDK_BUILD_BASE)/ext/%) - -cnf: $(BUILD_WORKSPACE_BNDS) - -A2_BUNDLES = $(BUNDLES:%=$(SDK_BUILD_BASE)/a2/$(A2_CATEGORY)/%.$(MAJOR).$(MINOR).jar) - -A2_JARS = $(shell find $(SDK_BUILD_BASE)/a2 -name '*.jar') -A2_CLASSPATH = $(subst $(space),$(pathsep),$(strip $(A2_JARS))) - - -#JAVA_SRCS = $(shell find $(BUNDLE_PREFIX).* -name '*.java') -JAVA_SRCS = $(foreach bundle, $(BUNDLES), $(shell find $(bundle) -name '*.java')) -ECJ_SRCS = $(foreach bundle, $(BUNDLES), $(bundle)/src[-d $(BUILD_BASE)/$(bundle)/bin]) - -osgi: cnf $(A2_BUNDLES) - mkdir -p $(SDK_BUILD_BASE)/a2/org.argeo.tp - mv $(SDK_BUILD_BASE)/a2/$(A2_CATEGORY)/ext/org.argeo.ext.slf4j.$(MAJOR).$(MINOR).jar $(SDK_BUILD_BASE)/a2/org.argeo.tp - mv $(SDK_BUILD_BASE)/a2/$(A2_CATEGORY)/ext/org.argeo.ext.equinox.jetty.$(MAJOR).$(MINOR).jar $(SDK_BUILD_BASE)/a2/org.argeo.tp.eclipse.equinox - rmdir $(SDK_BUILD_BASE)/a2/$(A2_CATEGORY)/ext +BOOTSTRAP_BASE=$(SDK_BUILD_BASE)/bootstrap distribution: bootstrap $(JVM) -cp \ - $(SDK_BUILD_BASE)/bootstrap/bndlib.jar:$(SDK_BUILD_BASE)/bootstrap/slf4j-api.jar:$(SDK_BUILD_BASE)/org.argeo.slc.api/bin:$(SDK_BUILD_BASE)/org.argeo.slc.factory/bin \ - tp/Make.java + $(BOOTSTRAP_BASE)/bndlib.jar:$(BOOTSTRAP_BASE)/slf4j-api.jar:$(BOOTSTRAP_BASE)/org.argeo.slc.api/bin:$(BOOTSTRAP_BASE)/org.argeo.slc.factory/bin \ + tp/Make.java $(A2_OUTPUT) bootstrap : mkdir -p $(SDK_BUILD_BASE)/bootstrap - wget -c -O $(SDK_BUILD_BASE)/bootstrap/ecj.jar https://repo1.maven.org/maven2/org/eclipse/jdt/ecj/3.28.0/ecj-3.28.0.jar - wget -c -O $(SDK_BUILD_BASE)/bootstrap/slf4j-api.jar https://repo1.maven.org/maven2/org/slf4j/slf4j-api/1.7.28/slf4j-api-1.7.28.jar - wget -c -O $(SDK_BUILD_BASE)/bootstrap/bndlib.jar https://repo1.maven.org/maven2/biz/aQute/bnd/biz.aQute.bndlib/5.3.0/biz.aQute.bndlib-5.3.0.jar - $(JVM) -cp $(SDK_BUILD_BASE)/bootstrap/ecj.jar org.eclipse.jdt.internal.compiler.batch.Main -11 -nowarn -time -cp \ - $(SDK_BUILD_BASE)/bootstrap/bndlib.jar:$(SDK_BUILD_BASE)/bootstrap/slf4j.jar \ - org.argeo.slc.api/src[-d $(SDK_BUILD_BASE)/org.argeo.slc.api/bin] \ - org.argeo.slc.factory/src[-d $(SDK_BUILD_BASE)/org.argeo.slc.factory/bin] \ + wget -c -O $(BOOTSTRAP_BASE)/ecj.jar https://repo1.maven.org/maven2/org/eclipse/jdt/ecj/3.28.0/ecj-3.28.0.jar + wget -c -O $(BOOTSTRAP_BASE)/slf4j-api.jar https://repo1.maven.org/maven2/org/slf4j/slf4j-api/1.7.28/slf4j-api-1.7.28.jar + wget -c -O $(BOOTSTRAP_BASE)/bndlib.jar https://repo1.maven.org/maven2/biz/aQute/bnd/biz.aQute.bndlib/5.3.0/biz.aQute.bndlib-5.3.0.jar + $(JVM) -cp $(BOOTSTRAP_BASE)/ecj.jar org.eclipse.jdt.internal.compiler.batch.Main -11 -nowarn -time -cp \ + $(BOOTSTRAP_BASE)/bndlib.jar:$(BOOTSTRAP_BASE)/slf4j.jar \ + org.argeo.slc.api/src[-d $(BOOTSTRAP_BASE)/org.argeo.slc.api/bin] \ + org.argeo.slc.factory/src[-d $(BOOTSTRAP_BASE)/org.argeo.slc.factory/bin] \ + +move-ext: osgi + mkdir -p $(SDK_BUILD_BASE)/a2/org.argeo.tp + mv $(SDK_BUILD_BASE)/a2/$(A2_CATEGORY)/org.argeo.ext.slf4j.$(MAJOR).$(MINOR).jar $(SDK_BUILD_BASE)/a2/org.argeo.tp +# mv $(SDK_BUILD_BASE)/a2/$(A2_CATEGORY)/org.argeo.ext.equinox.jetty.$(MAJOR).$(MINOR).jar $(SDK_BUILD_BASE)/a2/org.argeo.tp.eclipse.equinox clean: - rm -rf $(BUILD_BASE)/*-compiled - rm -rf $(BUILD_BASE)/cnf - rm -rf $(BUILD_BASE)/a2 - rm -rf $(BUILD_BASE)/$(BUNDLE_PREFIX).* - rm -rf $(BUILD_BASE)/ext - rm -rf $(BUILD_BASE)/build - rm -rf $(BUILD_BASE)/deb + rm -rf $(BUILD_BASE) + rm -rf $(BOOTSTRAP_BASE) -# SDK level -$(SDK_BUILD_BASE)/cnf/%.bnd: cnf/%.bnd - mkdir -p $(dir $@) - cp $< $@ - -$(SDK_BUILD_BASE)/ext/cnf/%.bnd: cnf/%.bnd - mkdir -p $(dir $@) - cp $< $@ +A2_OUTPUT = $(SDK_BUILD_BASE)/a2 +A2_BASE = $(A2_OUTPUT) -$(SDK_BUILD_BASE)/a2/$(A2_CATEGORY)/%.$(MAJOR).$(MINOR).jar : $(BUILD_BASE)/%/bundle.jar - mkdir -p $(dir $@) - cp $< $@ +VPATH = .:ext +DEP_CATEGORIES = org.argeo.tp org.argeo.tp.apache org.argeo.tp.sdk org.argeo.tp.jcr -# Build level -$(BUILD_BASE)/%/bundle.jar : %/bnd.bnd $(BUILD_BASE)/java-compiled - mkdir -p $(dir $@) - rsync -r --exclude "*.java" $(dir $<)src/ $(dir $@)bin - rsync -r $(dir $<)src/ $(dir $@)src - if [ -d "$(dir $<)OSGI-INF" ]; then rsync -r $(dir $<)OSGI-INF/ $(dir $@)/OSGI-INF; fi - cp $< $(dir $@) - cd $(dir $@) && $(BND_TOOL) build - mv $(dir $@)generated/*.jar $(dir $@)bundle.jar - -$(BUILD_BASE)/java-compiled : $(JAVA_SRCS) - $(JVM) -jar $(ECJ_JAR) -11 -nowarn -time -cp $(A2_CLASSPATH) \ - $(ECJ_SRCS) - touch $@ - -null := -space := $(null) # -pathsep := : - - +include $(SDK_SRC_BASE)/sdk/osgi.mk \ No newline at end of file diff --git a/configure b/configure index 4587bf45e..da5dffbd1 100644 --- a/configure +++ b/configure @@ -21,6 +21,12 @@ 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 @@ -34,13 +40,14 @@ fi cat > "$SDK_MK" <> mirrors = new HashMap>(); - public A2Factory(Path originBase, Path factoryBase) { - super(); - this.originBase = originBase; - this.factoryBase = factoryBase; + public A2Factory(Path a2Base) { + this.originBase = Paths.get(System.getProperty("user.home"), ".cache", "argeo/slc/origin"); + this.a2Base = a2Base; // TODO make it configurable List eclipseMirrors = new ArrayList<>(); @@ -93,7 +92,7 @@ public class A2Factory { public void processSingleM2ArtifactDistributionUnit(Path bndFile) { try { String category = bndFile.getParent().getFileName().toString(); - Path targetCategoryBase = factoryBase.resolve(category); + Path targetCategoryBase = a2Base.resolve(category); Properties fileProps = new Properties(); try (InputStream in = Files.newInputStream(bndFile)) { fileProps.load(in); @@ -119,7 +118,7 @@ public class A2Factory { public void processM2BasedDistributionUnit(Path duDir) { try { String category = duDir.getParent().getFileName().toString(); - Path targetCategoryBase = factoryBase.resolve(category); + Path targetCategoryBase = a2Base.resolve(category); Path commonBnd = duDir.resolve(COMMON_BND); Properties commonProps = new Properties(); try (InputStream in = Files.newInputStream(commonBnd)) { @@ -214,15 +213,7 @@ public class A2Factory { .getOrDefault(ManifestConstants.SLC_ORIGIN_MANIFEST_NOT_MODIFIED.toString(), "false").toString()); // we always force the symbolic name - if (artifact != null) { - if (!fileProps.containsKey(BUNDLE_SYMBOLICNAME.toString())) { - fileProps.put(BUNDLE_SYMBOLICNAME.toString(), artifact.getName()); - } - if (!fileProps.containsKey(BUNDLE_VERSION.toString())) { - fileProps.put(BUNDLE_VERSION.toString(), artifact.getVersion()); - } - } - + if (doNotModify) { fileEntries: for (Object key : fileProps.keySet()) { if (ManifestConstants.SLC_ORIGIN_M2.toString().equals(key)) @@ -231,6 +222,14 @@ public class A2Factory { additionalEntries.put(key.toString(), value); } } else { + if (artifact != null) { + if (!fileProps.containsKey(BUNDLE_SYMBOLICNAME.toString())) { + fileProps.put(BUNDLE_SYMBOLICNAME.toString(), artifact.getName()); + } + if (!fileProps.containsKey(BUNDLE_VERSION.toString())) { + fileProps.put(BUNDLE_VERSION.toString(), artifact.getVersion()); + } + } if (!fileProps.containsKey(EXPORT_PACKAGE.toString())) { fileProps.put(EXPORT_PACKAGE.toString(), @@ -313,7 +312,7 @@ public class A2Factory { public void processEclipseArchive(Path duDir) { try { String category = duDir.getParent().getFileName().toString(); - Path targetCategoryBase = factoryBase.resolve(category); + Path targetCategoryBase = a2Base.resolve(category); Files.createDirectories(targetCategoryBase); Files.createDirectories(originBase); @@ -377,7 +376,7 @@ public class A2Factory { } protected Path processBundleJar(Path file, Path targetBase, Map entries) throws IOException { - NameVersion nameVersion; + DefaultNameVersion nameVersion; Path targetBundleDir; try (JarInputStream jarIn = new JarInputStream(Files.newInputStream(file), false)) { Manifest manifest = new Manifest(jarIn.getManifest()); @@ -412,6 +411,10 @@ public class A2Factory { logger.log(Level.WARNING, "Original version is " + nameVersion.getVersion() + " while new version is " + versionFromEntries); } + if (symbolicNameFromEntries != null) { + // we always force our symbolic name + nameVersion.setName(symbolicNameFromEntries); + } } targetBundleDir = targetBase.resolve(nameVersion.getName() + "." + nameVersion.getBranch()); @@ -440,8 +443,13 @@ public class A2Factory { String value = entries.get(key); Object previousValue = manifest.getMainAttributes().putValue(key, value); if (previousValue != null && !previousValue.equals(value)) { - logger.log(Level.WARNING, - file.getFileName() + ": " + key + " was " + previousValue + ", overridden with " + value); + if (ManifestConstants.IMPORT_PACKAGE.toString().equals(key) + || ManifestConstants.EXPORT_PACKAGE.toString().equals(key)) + logger.log(Level.WARNING, file.getFileName() + ": " + key + " was modified"); + + else + logger.log(Level.WARNING, file.getFileName() + ": " + key + " was " + previousValue + + ", overridden with " + value); } } try (OutputStream out = Files.newOutputStream(manifestPath)) { @@ -516,7 +524,7 @@ public class A2Factory { }); } - protected NameVersion nameVersionFromManifest(Manifest manifest) { + protected DefaultNameVersion nameVersionFromManifest(Manifest manifest) { Attributes attrs = manifest.getMainAttributes(); // symbolic name String symbolicName = attrs.getValue(ManifestConstants.BUNDLE_SYMBOLICNAME.toString()); @@ -614,9 +622,8 @@ public class A2Factory { } public static void main(String[] args) { - Path originBase = Paths.get("../output/origin").toAbsolutePath().normalize(); Path factoryBase = Paths.get("../output/a2").toAbsolutePath().normalize(); - A2Factory factory = new A2Factory(originBase, factoryBase); + A2Factory factory = new A2Factory(factoryBase); Path descriptorsBase = Paths.get("../tp").toAbsolutePath().normalize(); diff --git a/sdk/ecj.args b/sdk/ecj.args new file mode 100644 index 000000000..852a33d4a --- /dev/null +++ b/sdk/ecj.args @@ -0,0 +1,4 @@ +-source 17 +-target 11 +-nowarn +-time \ No newline at end of file diff --git a/sdk/includes.mk b/sdk/includes.mk deleted file mode 100644 index 31efbf517..000000000 --- a/sdk/includes.mk +++ /dev/null @@ -1 +0,0 @@ -##include $(SDK_SRC_BASE)/sdk/deb.mk diff --git a/sdk/osgi.mk b/sdk/osgi.mk new file mode 100644 index 000000000..a97a937f8 --- /dev/null +++ b/sdk/osgi.mk @@ -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 := : diff --git a/sdk/output-argeo-tp-rap.target b/sdk/output-argeo-tp-rap.target index c7ec4c919..d5f313450 100644 --- a/sdk/output-argeo-tp-rap.target +++ b/sdk/output-argeo-tp-rap.target @@ -2,12 +2,12 @@ - - - - - - - + + + + + + + \ No newline at end of file diff --git a/tp/Make.java b/tp/Make.java index 8f1b6af21..6ea7f875c 100644 --- a/tp/Make.java +++ b/tp/Make.java @@ -5,9 +5,12 @@ import org.argeo.slc.factory.A2Factory; class Make { public static void main(String[] args) { - Path originBase = Paths.get("./output/origin").toAbsolutePath().normalize(); - Path factoryBase = Paths.get("./output/a2").toAbsolutePath().normalize(); - A2Factory factory = new A2Factory(originBase, factoryBase); + if(args.length < 1) { + System.err.println("Usage: "); + System.exit(1); + } + Path a2Base = Paths.get(args[0]).toAbsolutePath().normalize(); + A2Factory factory = new A2Factory(a2Base); Path descriptorsBase = Paths.get("./tp").toAbsolutePath().normalize(); -- 2.30.2