1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
|
# Install paths
DESTDIR ?=
JAR_DIR ?= /usr/share/java
# Utilities
ECHO = echo
FAIL = exit 1
FIND = find
INSTALL = install
JAR = jar
JAVAC = javac
MKDIRS = mkdir -p
RM = rm -f
SED = sed
TOUCH = touch
RSYNC = rsync
dep_dir = $1 $(shell $(FIND) $1 2>/dev/null)
dirs2jars = $(foreach dir,$1,$(dir)/generated/$(dir).jar)
deps2classpath = $(shell $(ECHO) $(abspath $(filter %.jar,$1)) $(CLASSPATH) | $(SED) 'y/ /:/')
subdirs := aQute.libg biz.aQute.bndlib biz.aQute.bnd
all: PHONY build
build: PHONY $(dirs2jars,$(subdirs))
install: PHONY $(foreach d,$(subdirs),$(DESTDIR)$(JAR_DIR)/bnd/$d.jar)
clean: PHONY
$(RM) -r -- $(addsuffix /bin,$(subdirs)) $(addsuffix /generated,$(subdirs))
biz.aQute.bnd/bin : $(call dirs2jars,aQute.libg biz.aQute.bndlib)
biz.aQute.bndlib/bin : $(call dirs2jars,aQute.libg )
define recurse-rule
$1/bin: $$(call dep_dir,$1/src)
$(RM) -r $$@
$(MKDIRS) $$@
CLASSPATH='$$(call deps2classpath,$$^)' $(JAVAC) -d $$@ $$(filter %.java,$$^) || { $(RM) -r $$@; $(FAIL); }
$(RSYNC) -r --exclude='*.java' $1/src/ $1/bin || { $(RM) -r $$@; $(FAIL); }
$(TOUCH) $$@
$1/generated/$1.jar: $1/bin
$(MKDIRS) $$(@D)
$(JAR) -cf $$@ -C $$< .
$(DESTDIR)$(JAR_DIR)/bnd/$1.jar: $1/generated/$1.jar
$(INSTALL) -Dm644 $$< $$@
endef
$(foreach subdir,$(subdirs),$(eval $(call recurse-rule,$(subdir))))
.PHONY: PHONY FORCE
.DELETE_ON_ERROR:
.SECONDARY:
|