]> WPIA git - cassiopeia.git/blob - Makefile
fix: use correct prepared statement for writing logs
[cassiopeia.git] / Makefile
1 INSTALL = ${shell which install}
2 INSTALL_FILE    = $(INSTALL) -p -D -o root -g root  -m  644
3 INSTALL_PROGRAM = $(INSTALL) -p -D -o root -g root  -m  700
4 INSTALL_SCRIPT  = $(INSTALL) -p -D -o root -g root  -m  700
5 INSTALL_DIR     = $(INSTALL) -p -d -o root -g root  -m  755
6
7 MKDIR = mkdir -p
8
9 ifeq (,$(filter nostrip,$(DEB_BUILD_OPTIONS)))
10     INSTALL_PROGRAM += -s
11 endif
12 ifneq (,$(filter parallel=%,$(DEB_BUILD_OPTIONS)))
13     NUMJOBS = $(patsubst parallel=%,%,$(filter parallel=%,$(DEB_BUILD_OPTIONS)))
14     MAKEFLAGS += -j$(NUMJOBS)
15 endif
16
17 BIN="bin/cassiopeia"
18 LIBS=openssl collisiondetect
19
20 CC=libtool --mode=compile gcc
21 CC_DEP=g++
22 CXX=libtool --mode=compile g++
23 CXX_DEP=g++
24 LD=libtool --mode=link g++
25
26 ifneq (,$(filter debug,$(DEB_BUILD_OPTIONS)))
27 CFLAGS+=-DNO_DAEMON -g -Og
28 endif
29 ifneq (,$(filter noopt,$(DEB_BUILD_OPTIONS)))
30     CFLAGS += -O0
31 else
32     CFLAGS += -O2
33 endif
34
35 CFLAGS+=${ADDFLAGS} -Wall -Werror -Wextra -pedantic -std=c++1y -Ilib/openssl/include -Isrc
36 CXXFLAGS=$(CFLAGS)
37 LDFLAGS+=${ADDFLAGS} -L/usr/lib/i386-linux-gnu/ -lssl -lcrypto -ldl -Llib/openssl
38
39 ifneq (,$(filter coverage,$(DEB_BUILD_OPTIONS)))
40     LDFLAGS += -lgcov
41     CFLAGS += -fprofile-arcs -ftest-coverage
42 endif
43
44
45 SRC_DIR=src
46 OBJ_DIR=obj
47 DEP_DIR=dep
48
49 FS_SRC=$(wildcard ${SRC_DIR}/*.cpp) $(wildcard ${SRC_DIR}/log/*.cpp) $(wildcard ${SRC_DIR}/io/*.cpp) $(wildcard ${SRC_DIR}/crypto/*.cpp) $(wildcard ${SRC_DIR}/db/*.cpp)
50
51 FS_BIN=$(wildcard ${SRC_DIR}/app/*.cpp)
52 FS_LIBS=$(wildcard lib/*/)
53 FS_OBJ=$(FS_SRC:${SRC_DIR}/%.cpp=${OBJ_DIR}/%.lo)
54 FS_DEP=$(FS_SRC:${SRC_DIR}/%.cpp=${DEP_DIR}/%.d)
55 LIB_OPENSSL=lib/openssl/libssl.a
56
57
58 .SUFFIXES: .c .cpp .d
59
60 .PHONY: all
61 all: build
62
63 .PHONY: clean
64 clean::
65         -rm -rf .libs
66         -rm -rf *.gcov
67         -rm -rf gcov.log
68         -rm -rf *.a
69         -rm -rf *.d
70         -rm -rf *.o
71         -rm -rf *.la
72         -rm -rf *.lo
73         -rm -rf *.so
74         -rm -rf ${OBJ_DIR}
75         -rm -rf ${DEP_DIR}
76 ifeq (,$(filter nocheck,$(DEB_BUILD_OPTIONS)))
77         # Code to run the package test suite.
78         ADDFLAGS="$(ADDFLAGS)" DEB_BUILD_OPTIONS="$(DEB_BUILD_OPTIONS)" ${MAKE} -C test clean
79 endif
80
81 .PHONY: dist-clean
82 dist-clean: clean
83         ${MAKE} -C lib/openssl clean
84         ${MAKE} -C lib/collisiondetect clean
85
86
87 build: cassiopeia
88 ifeq (,$(filter nocheck,$(DEB_BUILD_OPTIONS)))
89         ADDFLAGS="$(ADDFLAGS)" DEB_BUILD_OPTIONS="$(DEB_BUILD_OPTIONS)" ${MAKE} -C test
90 endif
91
92 .PHONY: install
93 install: build
94         ${INSTALL_PROGRAM} bin/cassiopeia ${DESTDIR}/usr/bin/cassiopeia
95         ${INSTALL_PROGRAM} bin/cassiopeia-signer ${DESTDIR}/usr/bin/cassiopeia-signer
96         ${INSTALL_DIR} ${DESTDIR}/etc/wpia/cassiopeia
97
98 .PHONY: libs
99 libs: ${LIBS}
100
101 .PHONY: openssl
102 openssl lib/openssl/libssl.a lib/openssl/libcrypto.a:
103         ${MAKE} -C lib openssl
104
105 .PHONY: collisiondetect
106 collisiondetect:
107         ${MAKE} -C lib collisiondetect
108
109 .PHONY: coverage
110 coverage:
111         find . -name "*.gcda" -exec rm {} + &&\
112         rm -rf coverage &&\
113         rm -rf coverage.info coverage_stripped.info &&\
114         ${MAKE} "DEB_BUILD_OPTIONS=coverage noopt" &&\
115         lcov -c --directory obj --directory test/obj --output-file coverage.info &&\
116         lcov -r coverage.info "/usr/**" -o coverage_stripped.info &&\
117         genhtml -p $(shell pwd) coverage_stripped.info --output-directory coverage
118
119 .PHONY: checkformat
120 checkformat:
121         (! LC_ALL=C scripts/format.sh | grep -q "^Formatted  ")
122
123 # --------
124
125 cassiopeia: bin/cassiopeia bin/cassiopeia-signer
126
127 bin/cassiopeia: libs ${FS_OBJ} ${OBJ_DIR}/apps/client.lo
128         ${MKDIR} $(shell dirname $@) &&  ${LD} ${LDFLAGS} -lpqxx -lpq -o $@ ${FS_OBJ} ${OBJ_DIR}/apps/client.lo
129
130 bin/cassiopeia-signer: libs ${FS_OBJ} ${OBJ_DIR}/apps/signer.lo
131         ${MKDIR} $(shell dirname $@) &&  ${LD} ${LDFLAGS} -o $@ $(filter-out  ${OBJ_DIR}/db/psql.lo, $(filter-out ${OBJ_DIR}/db/mysql.lo,${FS_OBJ})) ${OBJ_DIR}/apps/signer.lo
132
133 ${DEP_DIR}/%.d: ${SRC_DIR}/%.cpp ${LIB_OPENSSL}
134         ${MKDIR} $(shell dirname $@) && $(CXX_DEP) $(CXXFLAGS) -M -MF $@ $<
135 ${DEP_DIR}/%.d: ${SRC_DIR}/%.c ${LIB_OPENSSL}
136         ${MKDIR} $(shell dirname $@) && $(CC) $(CXXFLAGS) -M -MF $@ $<
137
138 ${OBJ_DIR}/%.lo ${OBJ_DIR}/%.o: ${SRC_DIR}/%.c ${DEP_DIR}/%.d
139         ${MKDIR} $(shell dirname $@) && $(CC) $(CFLAGS) -o $@ -c $<
140 ${OBJ_DIR}/%.lo ${OBJ_DIR}/%.o: ${SRC_DIR}/%.cpp ${DEP_DIR}/%.d
141         ${MKDIR} $(shell dirname $@) && $(CXX) $(CXXFLAGS) -o $@ -c $<
142
143 -include $(FS_DEP)