| # Support functions for building ProGuard with make. |
| |
| SRC = src |
| OUT = out |
| LIB = ../lib |
| |
| JAVA_TARGET = 1.8 |
| |
| ifeq ($(CLASSPATH),) |
| CLASSPATH_OPTION = |
| else |
| CLASSPATH_OPTION = -classpath $(CLASSPATH) |
| endif |
| |
| TARGET_JAR = $(LIB)/$(TARGET).jar |
| |
| # Command to download dependencies. |
| |
| DOWNLOAD = wget -O |
| #DOWNLOAD = curl -L -o |
| |
| # Functions to find the class files and resource files of a given target. |
| |
| define CLASS_FILES |
| $(subst .java,.class,$(shell find $(SRC)/$(dir $(1)) -path "$(SRC)/$(MAIN_CLASS).java" -printf $(OUT)/$(dir $(1))%P\\n)) |
| endef |
| |
| define RESOURCES |
| $(shell find $(SRC)/$(dir $(1)) -maxdepth 1 \( -name \*.properties -o -name \*.png -o -name \*.gif -o -name \*.pro \) -printf $(OUT)/$(dir $(1))%P\\n) |
| endef |
| |
| # Rules for creating the jars. |
| |
| all: $(TARGET_JAR) |
| |
| $(TARGET_JAR): $(call CLASS_FILES,$(MAIN_CLASS)) $(LIB) |
| ifeq ($(UPDATE_JAR),true) |
| ifeq ($(INCLUDE_MANIFEST),true) |
| jar -ufm $@ $(SRC)/META-INF/MANIFEST.MF -C $(OUT) $(dir $(MAIN_CLASS)) |
| else |
| jar -uf $@ -C $(OUT) $(dir $(MAIN_CLASS)) |
| endif |
| else |
| ifeq ($(INCLUDE_MANIFEST),true) |
| jar -cfm $@ $(SRC)/META-INF/MANIFEST.MF -C $(OUT) $(dir $(MAIN_CLASS)) |
| else |
| jar -cf $@ -C $(OUT) $(dir $(MAIN_CLASS)) |
| endif |
| endif |
| |
| $(TARGET_JAR): $(call RESOURCES,$(MAIN_CLASS)) |
| |
| # Rule for compiling the class files. |
| |
| $(OUT)/%.class: $(OUT) $(SRC)/%.java $(subst :, ,$(CLASSPATH)) |
| javac -nowarn -Xlint:none $(CLASSPATH_OPTION) -source $(JAVA_TARGET) -target $(JAVA_TARGET) -sourcepath $(SRC) -d $(OUT) $(filter %.java,$^) 2>&1 | sed -e 's|^| |' |
| |
| # Rule for copying the resource files. |
| |
| $(OUT)/%.properties $(OUT)/%.png $(OUT)/%.gif $(OUT)/%.pro: |
| cp $(subst $(OUT),$(SRC),$@) $@ |
| |
| # Rule for creating output directories. |
| |
| $(OUT) $(LIB): |
| mkdir -p $@ |
| |
| # Rule for dependencies on other modules. |
| |
| ../%/$(OUT): |
| cd $(dir $@) && $(MAKE) |
| |
| clean: |
| rm -fr $(OUT) |
| |
| .PHONY: all clean |