# GNU/Linux makefile for ProGuard. ANT_HOME = /usr/local/java/ant GRADLE_HOME = /usr/local/java/gradle WTK_HOME = /usr/local/java/wtk PROGUARD_HOME := $(subst ./..,..,$(subst /build/..,/,$(dir $(MAKEFILE_LIST))..)) SRC = $(PROGUARD_HOME)/src CLASSES = $(PROGUARD_HOME)/classes LIB = $(PROGUARD_HOME)/lib ANT_JAR = $(ANT_HOME)/lib/ant.jar GRADLE_JARS = $(GRADLE_HOME)/lib/plugins/gradle-plugins-2.1.jar \ $(GRADLE_HOME)/lib/gradle-base-services-2.1.jar \ $(GRADLE_HOME)/lib/gradle-base-services-groovy-2.1.jar \ $(GRADLE_HOME)/lib/gradle-core-2.1.jar \ $(GRADLE_HOME)/lib/groovy-all-2.3.6.jar WTK_JAR = $(WTK_HOME)/wtklib/kenv.zip NOTHING:= SPACE:=$(NOTHING) $(NOTHING) CLASSPATH = $(ANT_JAR):$(subst $(SPACE),:,$(GRADLE_JARS)):$(WTK_JAR) PROGUARD = proguard/ProGuard PROGUARD_GUI = proguard/gui/ProGuardGUI RETRACE = proguard/retrace/ReTrace ANT_TASK = proguard/ant/ProGuardTask GRADLE_TASK = proguard/gradle/ProGuardTask WTK_PLUGIN = proguard/wtk/ProGuardObfuscator TARGETS = $(PROGUARD) $(PROGUARD_GUI) $(RETRACE) $(ANT_TASK) $(GRADLE_TASK) $(WTK_PLUGIN) JAVAC_OPTIONS = -nowarn -Xlint:none -classpath $(CLASSPATH) -sourcepath $(SRC) -d $(CLASSES) # Command sequence definitions for creating jars. define createjar jar -cfm $(LIB)/$@.jar $(SRC)/$(dir $<)MANIFEST.MF \ -C $(CLASSES) $(dir $<) endef define updatejar jar -uf $(LIB)/proguard.jar \ -C $(CLASSES) $(dir $<) endef # The various targets. all: basic options basic: proguard proguardgui retrace options: anttask gradletask wtkplugin proguard: $(PROGUARD) $(createjar) proguardgui: proguard proguardgui: $(PROGUARD_GUI) $(createjar) retrace: $(RETRACE) $(createjar) anttask: $(ANT_JAR) anttask: $(PROGUARD) anttask: $(ANT_TASK) $(updatejar) gradletask: $(GRADLE_JARS) gradletask: $(PROGUARD) gradletask: $(GRADLE_TASK) $(updatejar) wtkplugin: $(WTK_JAR) wtkplugin: $(PROGUARD) wtkplugin: $(WTK_PLUGIN) $(updatejar) clean: -rm -fr $(CLASSES) $(LIB) define RESOURCES $(shell find $(SRC)/$(dir $(1)) -maxdepth 1 \( -name \*.properties -o -name \*.png -o -name \*.gif -o -name \*.pro \) -printf $(CLASSES)/$(dir $(1))%P\\n) endef define TARGETRULE $(1): $(CLASSES) $(CLASSES)/$(1).class $(call RESOURCES,$(1)) $(LIB) endef $(foreach TARGET,$(TARGETS),$(eval $(call TARGETRULE,$(TARGET)))) $(CLASSES) $(LIB): -mkdir -p $@ $(CLASSES)/%.class: $(SRC)/%.java javac $(JAVAC_OPTIONS) $^ $(CLASSES)/%.properties $(CLASSES)/%.png $(CLASSES)/%.gif $(CLASSES)/%.pro: cp $(subst $(CLASSES),$(SRC),$@) $@ %.jar %.zip: echo "Please make sure the path to $@ is set" echo "correctly in this $(strip $(MAKEFILE_LIST))." echo "Alternatively, if you don't need the corresponding option," echo "you can run `make' with the option -k." find $@ .PHONY: all basic options proguard proguardgui retrace anttask wtkplugin clean $(TARGETS) $(OPTIONAL_TARGETS)