forked from webbit/webbit
-
Notifications
You must be signed in to change notification settings - Fork 1
/
Makefile
64 lines (51 loc) · 2.3 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
57
58
59
60
61
62
63
64
# Common tasks:
# make -- Full build
# make clean -- Clean up built files
# make again -- Clean and rebuild
SHELL := /bin/bash
LIBRARY=webbit
CLASSPATH=$(shell echo $(wildcard lib/*.jar) | sed -e 's/ /:/g')
JARJARRULES='rule org.jboss.netty.** org.webbitserver.dependencies.org.jboss.netty.@1'
# Non file targets
.PHONY: all jar test clean again chatroom
# Default target: Compile, run tests and build tarball
all: jar test
jar: dist/$(LIBRARY).jar dist/$(LIBRARY)-src.jar
test: build/.tests-pass
# Run sample chatroom
chatroom: test
java -cp $(CLASSPATH):dist/$(LIBRARY).jar:build/$(LIBRARY)-tests.jar samples.chatroom.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 core Jar (just classes, no dependencies)
build/$(LIBRARY)-core.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 .
# Merge dependencies with core jar into an all-in-one jar.
dist/$(LIBRARY).jar: build/$(LIBRARY)-core.jar
@mkdir -p dist
@echo Packaging everything together into one jar...
java -jar lib/autojar.jar -o build/$(LIBRARY)-merged.jar -c $(CLASSPATH) build/$(LIBRARY)-core.jar
java -jar lib/jarjar-1.1.jar process <(echo $(JARJARRULES)) build/$(LIBRARY)-merged.jar dist/$(LIBRARY).jar
# Assemble source jar
dist/$(LIBRARY)-src.jar: $(call find,src/main/java,java)
@mkdir -p dist
jar cf $@ -C src/main/java .
# Compile tests
build/$(LIBRARY)-tests.jar: dist/$(LIBRARY).jar $(call find,src/test/java,java)
@mkdir -p build/test/classes
cp -R src/test/resources/* build/test/classes
javac -g -cp $(CLASSPATH):dist/$(LIBRARY).jar -d build/test/classes $(call find,src/test/java,java)
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 dist/$(LIBRARY).jar:build/$(LIBRARY)-tests.jar:$(CLASSPATH) org.junit.runner.JUnitCore $(call extracttests,build/$(LIBRARY)-tests.jar)
@touch $@
# Clean up
clean:
rm -rf build dist out
again: clean all