]> WPIA git - cassiopeia.git/blob - Makefile
chg: Build two binaries for the signer
[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 collissiondetect
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
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++11 -Ilib/openssl/include -Isrc
36 CXXFLAGS=$(CFLAGS)
37 LDFLAGS+=${ADDFLAGS} -L/usr/lib/i386-linux-gnu/ -lssl -lcrypto -ldl -Llib/openssl
38
39 SRC_DIR=src
40 OBJ_DIR=obj
41 DEP_DIR=dep
42
43 FS_SRC=$(filter-out ${SRC_DIR}/mysql--disabled.cpp,$(wildcard ${SRC_DIR}/*.cpp))
44 FS_BIN=$(wildcard ${SRC_DIR}/app/*.cpp)
45 FS_LIBS=$(wildcard lib/*/)
46 FS_OBJ=$(FS_SRC:${SRC_DIR}/%.cpp=${OBJ_DIR}/%.lo)
47 FS_DEP=$(FS_SRC:${SRC_DIR}/%.cpp=${DEP_DIR}/%.d)
48
49 .SUFFIXES: .c .cpp .d
50
51 .PHONY: all
52 all: build
53
54 .PHONY: clean
55 clean::
56         -rm -rf .libs
57         -rm -rf *.a
58         -rm -rf *.d
59         -rm -rf *.o
60         -rm -rf *.la
61         -rm -rf *.lo
62         -rm -rf *.so
63         -rm -rf ${OBJ_DIR}
64         -rm -rf ${DEP_DIR}
65 ifeq (,$(filter nocheck,$(DEB_BUILD_OPTIONS)))
66         # Code to run the package test suite.
67         ADDFLAGS="$(ADDFLAGS)" DEB_BUILD_OPTIONS="$(DEB_BUILD_OPTIONS)" ${MAKE} -C test clean
68 endif
69
70 .PHONY: dist-clean
71 dist-clean: clean
72         ${MAKE} -C lib/openssl clean
73         ${MAKE} -C lib/collissiondetect clean
74
75
76 build: cassiopeia
77 ifeq (,$(filter nocheck,$(DEB_BUILD_OPTIONS)))
78         ADDFLAGS="$(ADDFLAGS)" DEB_BUILD_OPTIONS="$(DEB_BUILD_OPTIONS)" ${MAKE} -C test
79 endif
80
81 .PHONY: install
82 install: build
83         ${INSTALL_PROGRAM} bin/cassiopeia ${DESTDIR}/usr/bin/cassiopeia
84         ${INSTALL_DIR} ${DESTDIR}/etc/cacert/cassiopeia
85
86 .PHONY: libs
87 libs: ${LIBS}
88
89 .PHONY: openssl
90 openssl:
91         ${MAKE} -C lib openssl
92
93 .PHONY: collissiondetect
94 collissiondetect:
95         ${MAKE} -C lib/collissiondetect
96
97 # --------
98
99 cassiopeia: bin/cassiopeia bin/cassiopeia-signer
100
101 bin/cassiopeia: libs ${FS_OBJ} ${OBJ_DIR}/apps/client.lo
102         ${MKDIR} $(shell dirname $@) &&  ${LD} ${LDFLAGS} -lmysqlclient -o $@ ${FS_OBJ} ${OBJ_DIR}/apps/client.lo
103
104 bin/cassiopeia-signer: libs ${FS_OBJ} ${OBJ_DIR}/apps/signer.lo
105         ${MKDIR} $(shell dirname $@) &&  ${LD} ${LDFLAGS} -o $@ $(filter-out ${OBJ_DIR}/mysql.lo,${FS_OBJ}) ${OBJ_DIR}/apps/signer.lo
106
107 ${DEP_DIR}/%.d: ${SRC_DIR}/%.cpp
108         ${MKDIR} $(shell dirname $@) && $(CXX_DEP) $(CXXFLAGS) -M -MF $@ $<
109 ${DEP_DIR}/%.d: ${SRC_DIR}/%.c
110         ${MKDIR} $(shell dirname $@) && $(CC) $(CXXFLAGS) -M -MF $@ $<
111
112 ${OBJ_DIR}/%.lo ${OBJ_DIR}/%.o: ${SRC_DIR}/%.c ${DEP_DIR}/%.d
113         ${MKDIR} $(shell dirname $@) && $(CC) $(CFLAGS) -o $@ -c $<
114 ${OBJ_DIR}/%.lo ${OBJ_DIR}/%.o: ${SRC_DIR}/%.cpp ${DEP_DIR}/%.d
115         ${MKDIR} $(shell dirname $@) && $(CXX) $(CXXFLAGS) -o $@ -c $<
116
117 -include $(FS_DEP)