summaryrefslogtreecommitdiff
path: root/rules/bnd/Makefile
blob: c6f7a63011e22e911f3a6dfda829cfd68ade5333 (plain)
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: