# 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: