2 # Common build routines to be included in Makefiles
4 # The following variables are found in the sdk.mk file which is generated by the configure script:
5 # SDK_SRC_BASE the base of the source code, typically the root of the cloned git repository
6 # SDK_BUILD_BASE the base of the output
7 # JAVA_HOME the base of the JDK used to build
8 A2_OUTPUT
:= $(SDK_BUILD_BASE
)/a2
9 JVM ?
= $(JAVA_HOME
)/bin
/java
10 JAVADOC ?
= $(JAVA_HOME
)/bin
/javadoc
12 # The following variables should be declared in the Makefile:
13 # BUNDLES the space-separated list of bundles to be built
14 # A2_CATEGORY the a2 category the bundles will belong to
16 # The following variables have default values which can be overriden in the Makefile
17 # DEP_CATEGORIES the a2 categories the compilation depends on
18 # JAVADOC_PACKAGES the space-separated list of packages for which javadoc will be generated
19 # A2_BASE the space-separated directories where already built a2 categories can be found
22 A2_BASE ?
= $(A2_OUTPUT
)
24 ECJ_JAR ?
= $(A2_BASE
)/org.argeo.tp.sdk
/org.eclipse.jdt.core.compiler.batch
.3.32.jar
25 BNDLIB_JAR ?
= $(A2_BASE
)/org.argeo.tp.sdk
/biz.aQute.bndlib
.5.3.jar
26 SLF4J_API_JAR ?
= $(A2_BASE
)/org.argeo.tp
/org.slf4j.api
.1.7.jar
27 ARGEO_MAKE
:= $(JVM
) -cp
$(ECJ_JAR
):$(BNDLIB_JAR
):$(SLF4J_API_JAR
) $(SDK_SRC_BASE
)/sdk
/argeo-build
/src
/org
/argeo
/build
/Make.java
28 #ARGEO_MAKE = $(JVM) -cp $(ECJ_JAR):$(BNDLIB_JAR):$(SLF4J_API_JAR):$(BUILD_BASE)/bin org/argeo/build/Make
30 JAVADOC_SRCS
= $(foreach bundle
, $(BUNDLES
), $(bundle
)/src
)
32 BUILD_BASE
= $(SDK_BUILD_BASE
)/$(shell basename $(SDK_SRC_BASE
))
34 TARGET_BUNDLES
= $(abspath
$(foreach bundle
, $(BUNDLES
),$(A2_OUTPUT
)/$(shell dirname
$(bundle
))/$(A2_CATEGORY
)/$(shell basename $(bundle
)).
$(major
).
$(minor
).jar
))
35 TODOS
= $(foreach bundle
, $(BUNDLES
),$(BUILD_BASE
)/$(bundle
)/to-build
)
37 ## Needed in order to be able to expand $$ variables
39 .PHONY
: osgi manifests javadoc
41 osgi
: $(BUILD_BASE
)/built
43 javadoc
: $(BUILD_BASE
)/built
44 $(JAVADOC
) -quiet
-Xmaxwarns
1 -d
$(BUILD_BASE
)/api
--source-path
$(subst $(space
),$(pathsep
),$(strip $(JAVADOC_SRCS
))) -subpackages
$(JAVADOC_PACKAGES
)
46 # Actual build (compilation + bundle packaging)
47 $(BUILD_BASE
)/built
: BUNDLES_TO_BUILD
= $(subst $(abspath
$(BUILD_BASE
))/,, $(subst to-build
,, $?
))
48 $(BUILD_BASE
)/built
: $(TODOS
)
49 $(ARGEO_MAKE
) all --a2-bases
$(A2_BASE
) --dep-categories
$(DEP_CATEGORIES
) --category
$(A2_CATEGORY
) --bundles
$(BUNDLES_TO_BUILD
)
50 touch
$(BUILD_BASE
)/built
52 $(A2_OUTPUT
)/%.
$(major
).
$(minor
).jar
: $(BUILD_BASE
)/$$(subst $(A2_CATEGORY
)/,,$$*)/to-build
53 $(ARGEO_MAKE
) all --a2-bases
$(A2_BASE
) --dep-categories
$(DEP_CATEGORIES
) --category
$(A2_CATEGORY
) --bundles
$(subst $(A2_CATEGORY
)/,,$*)
55 $(BUILD_BASE
)/%/to-build
: $$(shell find
% -type f
-not
-path
'bin/*' -not
-path
'*/MANIFEST.MF' | sed
's/ /\\ /g')
62 @mkdir
-p
$(foreach bundle
, $(BUNDLES
), $(bundle
)/META-INF
/);
63 @
$(foreach bundle
, $(BUNDLES
), cp
-v
$(BUILD_BASE
)/$(bundle
)/META-INF
/MANIFEST.MF
$(bundle
)/META-INF
/MANIFEST.MF
;)
65 # Local build of the builder, not used as the performance gain is negligible
66 builder
: $(BUILD_BASE
)/bin
/org
/argeo
/build
/Make.class
68 $(BUILD_BASE
)/bin
/org
/argeo
/build
/Make.class
: $(SDK_SRC_BASE
)/sdk
/argeo-build
/java
/org
/argeo
/build
/Make.java
69 $(JVM
) -jar
$(ECJ_JAR
) -cp
$(ECJ_JAR
):$(BNDLIB_JAR
):$(SLF4J_API_JAR
) @
$(SDK_SRC_BASE
)/sdk
/argeo-build
/ecj.args
$(SDK_SRC_BASE
)/sdk
/argeo-build
/src
[-d
$(BUILD_BASE
)/bin
]
71 # Make variables used to replace spaces by a separator, typically in order to generate classpaths
72 # for example: CLASSPATH = $(subst $(space),$(pathsep),$(strip $(JARS)))