forked from mongrel2/mongrel2
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Makefile
169 lines (130 loc) · 5.18 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
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
CFLAGS=-g -O2 -Wall -Wextra -Isrc -pthread -rdynamic -DNDEBUG $(OPTFLAGS) -D_FILE_OFFSET_BITS=64
LIBS=-lzmq -ldl -lsqlite3 $(OPTLIBS)
PREFIX?=/usr/local
get_objs = $(addsuffix .o,$(basename $(wildcard $(1))))
ASM=$(wildcard src/**/*.S src/*.S)
RAGEL_TARGETS=src/state.c src/http11/http11_parser.c
SOURCES=$(wildcard src/**/*.c src/*.c) $(RAGEL_TARGETS)
OBJECTS=$(patsubst %.c,%.o,${SOURCES}) $(patsubst %.S,%.o,${ASM})
OBJECTS_EXTERNAL+=$(call get_objs,src/polarssl/*.c)
OBJECTS_NOEXT=$(filter-out ${OBJECTS_EXTERNAL},${OBJECTS})
LIB_SRC=$(filter-out src/mongrel2.c,${SOURCES})
LIB_OBJ=$(filter-out src/mongrel2.o,${OBJECTS})
TEST_SRC=$(wildcard tests/*_tests.c)
TESTS=$(patsubst %.c,%,${TEST_SRC})
MAKEOPTS=OPTFLAGS="${NOEXTCFLAGS} ${OPTFLAGS}" OPTLIBS="${OPTLIBS}" LIBS="${LIBS}" DESTDIR="${DESTDIR}" PREFIX="${PREFIX}"
all: bin/mongrel2 tests m2sh
dev: CFLAGS=-g -Wall -Isrc -Wall -Wextra $(OPTFLAGS) -D_FILE_OFFSET_BITS=64
dev: all
${OBJECTS_NOEXT}: CFLAGS += ${NOEXTCFLAGS}
bin/mongrel2: build/libm2.a src/mongrel2.o
$(CC) $(CFLAGS) src/mongrel2.o -o $@ $< $(LIBS)
build/libm2.a: OPTFLAGS += -fPIC
build/libm2.a: build ${LIB_OBJ}
ar rcs $@ ${LIB_OBJ}
ranlib $@
build:
@mkdir -p build
@mkdir -p bin
clean:
rm -rf build bin lib ${OBJECTS} ${TESTS} tests/config.sqlite
rm -f tests/perf.log
rm -f tests/test.pid
rm -f tests/tests.log
rm -f tests/empty.sqlite
rm -f tools/lemon/lemon
rm -f tools/m2sh/tests/tests.log
find . -name "*.gc*" -exec rm {} \;
${MAKE} -C tools/m2sh OPTLIB=${OPTLIB} clean
${MAKE} -C tools/filters OPTLIB=${OPTLIB} clean
${MAKE} -C tests/filters OPTLIB=${OPTLIB} clean
${MAKE} -C tools/config_modules OPTLIB=${OPTLIB} clean
pristine: clean
sudo rm -rf examples/python/build examples/python/dist examples/python/m2py.egg-info
sudo find . -name "*.pyc" -exec rm {} \;
${MAKE} -C docs/manual clean
cd docs/ && ${MAKE} clean
${MAKE} -C examples/kegogi clean
rm -f logs/*
rm -f run/*
${MAKE} -C tools/m2sh pristine
.PHONY: tests
tests: build/libm2.a tests/config.sqlite ${TESTS} test_filters filters config_modules
sh ./tests/runtests.sh
tests/config.sqlite: src/config/config.sql src/config/example.sql src/config/mimetypes.sql
sqlite3 $@ < src/config/config.sql
sqlite3 $@ < src/config/example.sql
sqlite3 $@ < src/config/mimetypes.sql
$(TESTS): %: %.c build/libm2.a
$(CC) $(CFLAGS) -o $@ $< build/libm2.a $(LIBS)
src/state.c: src/state.rl src/state_machine.rl
src/http11/http11_parser.c: src/http11/http11_parser.rl
src/http11/httpclient_parser.c: src/http11/httpclient_parser.rl
check:
@echo Files with potentially dangerous functions.
@egrep '[^_.>a-zA-Z0-9](str(n?cpy|n?cat|xfrm|n?dup|str|pbrk|tok|_)|stpn?cpy|a?sn?printf|byte_)' $(filter-out src/bstr/bsafe.c,${SOURCES})
m2sh:
${MAKE} ${MAKEOPTS} -C tools/m2sh all
test_filters:
${MAKE} ${MAKEOPTS} -C tests/filters all
filters:
${MAKE} ${MAKEOPTS} -C tools/filters all
config_modules:
${MAKE} ${MAKEOPTS} -C tools/config_modules all
install: all
install -d $(DESTDIR)/$(PREFIX)/bin/
install bin/mongrel2 $(DESTDIR)/$(PREFIX)/bin/
${MAKE} ${MAKEOPTS} -C tools/m2sh install
${MAKE} ${MAKEOPTS} -C tools/config_modules install
${MAKE} ${MAKEOPTS} -C tools/filters install
examples/python/mongrel2/sql/config.sql: src/config/config.sql src/config/mimetypes.sql
cat src/config/config.sql src/config/mimetypes.sql > $@
ragel:
ragel -G2 src/state.rl
ragel -G2 src/http11/http11_parser.rl
ragel -G2 src/handler_parser.rl
ragel -G2 src/http11/httpclient_parser.rl
valgrind:
valgrind --leak-check=full --show-reachable=yes --log-file=valgrind.log --suppressions=tests/valgrind.sup ./bin/mongrel2 tests/config.sqlite localhost
%.o: %.S
$(CC) $(CFLAGS) -c $< -o $@
coverage: NOEXTCFLAGS += -fprofile-arcs -ftest-coverage
coverage: LIBS += -lgcov
coverage: LDFLAGS += -fprofile-arcs
coverage: clean all coverage_report
coverage_report:
rm -rf tests/m2.zcov tests/coverage
zcov-scan tests/m2.zcov
zcov-genhtml --root $(CURDIR) tests/m2.zcov tests/coverage
zcov-summarize tests/m2.zcov
system_tests:
./tests/system_tests/curl_tests
./tests/system_tests/chat_tests
manual:
dexy
cp docs/manual/Makefile output/docs/manual/
cp docs/manual/pastie.sty output/docs/manual/
${MAKE} -C output/docs/manual clean book-final.pdf
rm -rf output/docs/manual/*.dvi output/docs/manual/*.pdf
${MAKE} -C output/docs/manual book-final.pdf
${MAKE} -C output/docs/manual draft
release:
git archive --format=tar --prefix=mongrel2-${VERSION}/ v${VERSION} | bzip2 -9 > mongrel2-${VERSION}.tar.bz2
scp mongrel2-${VERSION}.tar.bz2 ${USER}@mongrel2.org:deployment/files/static/downloads/
md5sum mongrel2-${VERSION}.tar.bz2
curl http://mongrel2.org/static/downloads/mongrel2-${VERSION}.tar.bz2 | md5sum
netbsd: OPTFLAGS += -I/usr/local/include -I/usr/pkg/include
netbsd: OPTLIBS += -L/usr/local/lib -L/usr/pkg/lib
netbsd: dev
freebsd: OPTFLAGS += -I/usr/local/include
freebsd: OPTLIBS += -L/usr/local/lib -pthread
freebsd: all
openbsd: OPTFLAGS += -I/usr/local/include
openbsd: OPTLIBS += -L/usr/local/lib -pthread
openbsd: all
solaris: OPTFLAGS += -I/usr/local/include
solaris: OPTLIBS += -L/usr/local/lib -R/usr/local/lib -lsocket -lnsl -lsendfile
solaris: all
macports: OPTFLAGS += -I/opt/local/include
macports: OPTLIBS += -L/opt/local/lib
macports: all