You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
137 lines
4.5 KiB
137 lines
4.5 KiB
CFLAGS?=-g -O2
|
|
CFLAGS += -Wall -Wextra -I./src -DNDEBUG -D_FILE_OFFSET_BITS=64 -pthread
|
|
LIBS+=-lzmq -ldl -lsqlite3 -lmbedtls -lmbedx509 -lmbedcrypto
|
|
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_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}" LIBS="${LIBS}" DESTDIR="${DESTDIR}" PREFIX="${PREFIX}"
|
|
|
|
all: builddirs bin/mongrel2 tests m2sh procer
|
|
|
|
${OBJECTS_NOEXT}: CFLAGS += ${NOEXTCFLAGS}
|
|
${OBJECTS}:
|
|
|
|
#
|
|
# CFLAGS_DEFS: The $(CC) flags required to obtain C pre-processor #defines, per:
|
|
#
|
|
# http://nadeausoftware.com/articles/2011/12/c_c_tip_how_list_compiler_predefined_macros
|
|
#
|
|
# It may be appropriate to copy some of these platform-specific CFLAGS_DEFS assignments into the
|
|
# appropriate platform target at the end of this file, eg:
|
|
#
|
|
# solaris: CFLAGS_DEF=...
|
|
# solaris: all
|
|
|
|
#CFLAGS_DEFS=-dM -E # Portland Group PGCC
|
|
#CFLAGS_DEFS=-xdumpmacros -E # Oracle Solaris Studio
|
|
#CFLAGS_DEFS=-qshowmacros -E # IBM XL C
|
|
CFLAGS_DEFS=-dM -E -x c # clang, gcc, HP C, Intel icc
|
|
|
|
.PHONY: builddirs
|
|
builddirs:
|
|
@mkdir -p build
|
|
@mkdir -p bin
|
|
|
|
bin/mongrel2: build/libm2.a src/mongrel2.o
|
|
$(CC) $(CPPFLAGS) $(CFLAGS) $(LDFLAGS) src/mongrel2.o -o $@ $< $(LIBS)
|
|
|
|
build/libm2.a: CFLAGS += -fPIC
|
|
build/libm2.a: ${LIB_OBJ}
|
|
$(AR) rcs $@ ${LIB_OBJ}
|
|
$(RANLIB) $@
|
|
|
|
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
|
|
rm -rf release-scripts/output
|
|
find . \( -name "*.gcno" -o -name "*.gcda" \) -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
|
|
${MAKE} -C tools/procer 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
|
|
${MAKE} -C tools/procer pristine
|
|
git submodule deinit -f src/mbedtls
|
|
|
|
.PHONY: tests
|
|
tests: 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) $(CPPFLAGS) $(CFLAGS) $(LDFLAGS) -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: build/libm2.a
|
|
${MAKE} ${MAKEOPTS} -C tools/m2sh all
|
|
|
|
procer: build/libm2.a
|
|
${MAKE} ${MAKEOPTS} -C tools/procer all
|
|
|
|
test_filters: build/libm2.a
|
|
${MAKE} ${MAKEOPTS} -C tests/filters all
|
|
|
|
filters: build/libm2.a
|
|
${MAKE} ${MAKEOPTS} -C tools/filters all
|
|
|
|
config_modules: build/libm2.a
|
|
${MAKE} ${MAKEOPTS} -C tools/config_modules all
|
|
|
|
# Try to install first before creating target directory and trying again
|
|
install: all
|
|
install bin/mongrel2 $(DESTDIR)/$(PREFIX)/bin/ \
|
|
|| ( 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
|
|
${MAKE} ${MAKEOPTS} -C tools/procer 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
|
|
|
|
%.o: %.S
|
|
$(CC) $(CPPFLAGS) $(CFLAGS) $(LDFLAGS) -c $< -o $@
|