capture
[rrq/gorite.git] / Makefile
1
2 # Copyright 2012, Ralph Ronnquist.
3 #
4 # Makefile for GORITE
5 #
6
7 CP := $(shell ./classpath)
8
9 DIRS  = com/intendico/gorite
10 DIRS += com/intendico/data
11 DIRS += com/intendico/gorite/addon
12 DIRS += com/intendico/data/addon
13 DIRS += com/intendico/sdp
14
15 EXGORITE = tests/com/intendico/gorite/examples
16 EXDATA = tests/com/intendico/data/examples
17
18 SRC      := $(foreach D,$(DIRS),$(wildcard $(D)/*.java))
19 SOURCES  := $(filter-out %/package-info.java,$(SRC))
20 CLASSES  = $(SOURCES:%.java=%.class)
21 CURRENT  = $(foreach C,$(CLASSES),$(wildcard $(C)))
22 MISSING  = $(filter-out $(CURRENT),$(CLASSES))
23 OUTDATED = $(shell find $(DIRS) -name "*.java" \
24                $(if $(CURRENT),-newer $(word 1,$(shell ls -1t $(CURRENT)))))
25
26 jar: gorite.jar
27
28 .PHONY: clean compile javadoc
29
30 #JAVASRCVERSION = -source 1.4 -Xlint:unchecked
31 JAVASRCVERSION = -Xlint:-unchecked
32
33 compile: $(OUTDATED) $(MISSING:%.class=%.java)
34         CLASSPATH=$(CP) javac $(JAVASRCVERSION) $?
35
36 gorite.jar: $(if $(OUTDATED)$(MISSING),compile) $(SOURCES)
37         touch gorite.jar
38         jar uf gorite.jar $(addsuffix /*.class,$(DIRS))
39
40 install: gorite.jar
41         install gorite.jar ../../lib/
42
43 clean:
44         rm -f $(CLASSES:%.class=%*.class) gorite.jar
45         rm -rf html
46
47 javadoc: VERSION := v11RC05
48 JAVAAPI = http://download.oracle.com/javase/6/docs/api
49 YEAR = $(shell date +%Y)
50 DOCARGS  = -overview overview.html -private -d html
51 DOCARGS += -footer "© Copyright $(YEAR), Ralph Ronnquist."
52 DOCARGS += -header "GORITE Version $(VERSION)"
53 DOCARGS += -linksource
54 DOCARGS += -linkoffline "$(JAVAAPI)" pkg/java
55 DOCARGS += -classpath $(CP)
56
57
58
59 javadoc: gorite.jar
60         javadoc $(DOCARGS) $(subst /,.,$(DIRS)) $(TESTS)
61         #cat HEADER > html/Main.java
62         #more $(EXGORITE)/spacetravel/[A-Z]*.java >> html/Main.java
63
64 TESTS = $(wildcard $(EXGORITE)/*/*.java)
65 TESTS += $(wildcard $(EXDATA)/*/*.java)
66
67 SKIP := $(EXGORITE)/mice/
68 SKIP += $(EXGORITE)/klotski/
69 SKIP += $(EXGORITE)/chapter3_sensors/
70
71
72 TCP = $(shell pwd)/tests:$(shell pwd)/gorite.jar
73 TDIR = $(filter-out $(SKIP),$(sort $(dir $(TESTS))))
74
75 .PHONY: tests $(TDIR) .force
76
77 #PROPS = -Dgorite.goal.trace=yes
78 PROPS = -Xss60k -Xmx200m
79 #PROPS += -Dgorite.tracer=com.intendico.gorite.addon.ConsoleTracer
80
81 ifdef REGRESSION
82 $(TDIR): gorite.jar .force
83         @echo "TEST: $@"
84         @CLASSPATH=$(TCP) java $(PROPS) $(@:tests/%=%)Main 2>&1 | $@filter > /tmp/tests.log
85         @diff -N $@output /tmp/tests.log
86
87 $(SKIP): .force
88         @echo "SKIP: $@"
89
90 tests:  gorite.jar $(TESTS)
91         @$(MAKE) -s $(filter-out ./,$(sort $(dir $?))) 2>&1 | \
92             tee regression.$$(date +%Y%m%d-%H%M)
93
94 else
95
96 tests/com/intendico/gorite/examples/fleet/: A = 20 100
97 $(TDIR): gorite.jar
98         @echo "===== Test: $@"
99         CLASSPATH=$(TCP) javac  -Xlint:unchecked $@*.java
100         CLASSPATH=$(TCP) java $(PROPS) $(@:tests/%=%)Main $(A)
101         @echo "===== End: $@"
102
103 tests:  gorite.jar $(TESTS)
104         echo "$(TESTS)"
105         @echo "****************************************************"
106         @$(MAKE) $(filter-out ./,$(sort $(dir $?))) 2>&1 | \
107             tee log.$$(date +%Y%m%d-%H%M)
108
109 endif
110
111 doc/%.html: doc/%.sdf
112         cd doc; sdf -2html $$(basename $?)
113
114 DOCS = CHANGES
115
116 TARFLAG = --exclude=CVS
117 BINDIST = gorite.jar html $(DOCS)
118 SRCDIST = $(BINDIST) $(SRC) $(TESTS) overview.html Makefile classpath
119 SRCDIST += $(wildcard $(EXGORITE)/*/filter)
120 SRCDIST += $(wildcard $(EXGORITE)/*/output)
121
122 #SRCDIST += DIFF.baseline
123
124 srcdist: DOCARGS += -linksource
125 srcdist: javadoc $(DOCS) $(SRCDIST)
126         mkdir -p dist
127         tar czf dist/gorite-src-$$(date +%Y%m%d).tgz $(TARFLAG) $(SRCDIST)
128
129 bindist: javadoc $(DOCS) $(BINDIST)
130         mkdir -p dist
131         tar czf dist/gorite-$$(date +%Y%m%d).tgz $(TARFLAG) $(BINDIST)
132
133 regression:
134         $(MAKE) tests