-
Notifications
You must be signed in to change notification settings - Fork 3
/
Makefile
57 lines (44 loc) · 1.9 KB
/
Makefile
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
# Common tasks:
# make -- Full build
# make clean -- Clean up built files
LIBRARY=webbit-rest
CLASSPATH=$(shell echo $(wildcard lib/*.jar) | sed -e 's/ /:/g')
# Non file targets
.PHONY: all jar test clean helloworld
# Default target: Compile, run tests and build tarball
all: jar test
jar: build/$(LIBRARY).jar build/$(LIBRARY)-src.jar
test: build/.tests-pass
# Run sample
helloworld: build/$(LIBRARY)-tests.jar
java -cp $(CLASSPATH):build/$(LIBRARY).jar:build/$(LIBRARY)-tests.jar org.webbitserver.rest.Main
# Run sample
chatroom: build/$(LIBRARY)-tests.jar
java -cp $(CLASSPATH):build/$(LIBRARY).jar:build/$(LIBRARY)-tests.jar org.webbitserver.rest.chat.Main
# Function to find files in directory with suffix. $(call find,dir,ext)
find = $(shell find $(1) -name '*.$(2)')
# Function to extract Test class names from a jar. $(call extracttests,foo.jar)
extracttests = $(shell jar tf $(1) | grep 'Test.class$$' | sed -e 's|/|.|g;s|.class$$||')
# Compile Jar
build/$(LIBRARY).jar: $(call find,src/main/java,java)
@mkdir -p build/main/classes
javac -g -cp $(CLASSPATH) -d build/main/classes $(call find,src/main/java,java)
jar cf $@ -C build/main/classes .
# Assemble source jar
build/$(LIBRARY)-src.jar: $(call find,src/main/java,java)
@mkdir -p build
jar cf $@ -C src/main/java .
# Compile tests and build test jar
build/$(LIBRARY)-tests.jar: build/$(LIBRARY).jar $(call find,src/test,*)
@mkdir -p build/test/classes
javac -g -cp $(CLASSPATH):build/$(LIBRARY).jar -d build/test/classes $(call find,src/test/java,java)
cp -R src/test/resources/* build/test/classes
jar cf $@ -C build/test/classes .
# Run tests, and create .tests-pass if they succeed
build/.tests-pass: build/$(LIBRARY)-tests.jar
@rm -f $@
java -cp $(CLASSPATH):build/$(LIBRARY).jar:build/$(LIBRARY)-tests.jar org.junit.runner.JUnitCore $(call extracttests,build/$(LIBRARY)-tests.jar)
@touch $@
# Clean up
clean:
rm -rf build out