1# GNU/Linux makefile for ProGuard.
2
3ANT_HOME    = /usr/local/java/ant
4GRADLE_HOME = /usr/local/java/gradle
5WTK_HOME    = /usr/local/java/wtk
6
7PROGUARD_HOME := $(subst ./..,..,$(subst /build/..,/,$(dir $(MAKEFILE_LIST))..))
8SRC     = $(PROGUARD_HOME)/src
9CLASSES = $(PROGUARD_HOME)/classes
10LIB     = $(PROGUARD_HOME)/lib
11
12ANT_JAR     = $(ANT_HOME)/lib/ant.jar
13GRADLE_JARS = $(GRADLE_HOME)/lib/plugins/gradle-plugins-1.3.jar \
14              $(GRADLE_HOME)/lib/gradle-base-services-1.3.jar \
15              $(GRADLE_HOME)/lib/gradle-core-1.3.jar \
16              $(GRADLE_HOME)/lib/groovy-all-1.8.6.jar
17WTK_JAR     = $(WTK_HOME)/wtklib/kenv.zip
18
19NOTHING:=
20SPACE:=$(NOTHING) $(NOTHING)
21CLASSPATH = $(ANT_JAR):$(subst $(SPACE),:,$(GRADLE_JARS)):$(WTK_JAR)
22
23PROGUARD     = proguard/ProGuard
24PROGUARD_GUI = proguard/gui/ProGuardGUI
25RETRACE      = proguard/retrace/ReTrace
26ANT_TASK     = proguard/ant/ProGuardTask
27GRADLE_TASK  = proguard/gradle/ProGuardTask
28WTK_PLUGIN   = proguard/wtk/ProGuardObfuscator
29
30TARGETS = $(PROGUARD) $(PROGUARD_GUI) $(RETRACE) $(ANT_TASK) $(GRADLE_TASK) $(WTK_PLUGIN)
31
32JAVAC_OPTIONS = -nowarn -Xlint:none -classpath $(CLASSPATH) -sourcepath $(SRC) -d $(CLASSES)
33
34# Command sequence definitions for creating jars.
35
36define createjar
37  jar -cfm $(LIB)/$@.jar $(SRC)/$(dir $<)MANIFEST.MF \
38    -C $(CLASSES) $(dir $<)
39endef
40
41define updatejar
42  jar -uf $(LIB)/proguard.jar \
43    -C $(CLASSES) $(dir $<)
44endef
45
46# The various targets.
47
48all:     basic options
49basic:   proguard proguardgui retrace
50options: anttask gradletask wtkplugin
51
52proguard: $(PROGUARD)
53	$(createjar)
54
55proguardgui: proguard
56proguardgui: $(PROGUARD_GUI)
57	$(createjar)
58
59retrace: $(RETRACE)
60	$(createjar)
61
62anttask: $(ANT_JAR)
63anttask: $(PROGUARD)
64anttask: $(ANT_TASK)
65	$(updatejar)
66
67gradletask: $(GRADLE_JARS)
68gradletask: $(PROGUARD)
69gradletask: $(GRADLE_TASK)
70	$(updatejar)
71
72wtkplugin: $(WTK_JAR)
73wtkplugin: $(PROGUARD)
74wtkplugin: $(WTK_PLUGIN)
75	$(updatejar)
76
77clean:
78	-rm -fr $(CLASSES) $(LIB)
79
80
81define RESOURCES
82  $(shell find $(SRC)/$(dir $(1)) -maxdepth 1 \( -name \*.properties -o -name \*.png -o -name \*.gif -o -name \*.pro \) -printf $(CLASSES)/$(dir $(1))%P\\n)
83endef
84
85define TARGETRULE
86  $(1): $(CLASSES) $(CLASSES)/$(1).class $(call RESOURCES,$(1)) $(LIB)
87endef
88
89$(foreach TARGET,$(TARGETS),$(eval $(call TARGETRULE,$(TARGET))))
90
91$(CLASSES) $(LIB):
92	-mkdir -p $@
93
94$(CLASSES)/%.class: $(SRC)/%.java
95	javac $(JAVAC_OPTIONS) $^
96
97$(CLASSES)/%.properties $(CLASSES)/%.png $(CLASSES)/%.gif $(CLASSES)/%.pro:
98	cp $(subst $(CLASSES),$(SRC),$@) $@
99
100%.jar %.zip:
101	echo "Please make sure the path to $@ is set"
102	echo "correctly in this $(strip $(MAKEFILE_LIST))."
103	echo "Alternatively, if you don't need the corresponding option,"
104	echo "you can run `make' with the option -k."
105	find $@
106
107.PHONY: all basic options proguard proguardgui retrace anttask wtkplugin clean $(TARGETS) $(OPTIONAL_TARGETS)
108