Mercurial > irccd
annotate GNUmakefile @ 1053:8d6651c3e36c
make: fix debug/release builds
author | David Demelier <markand@malikania.fr> |
---|---|
date | Sun, 20 Jun 2021 12:38:05 +0200 |
parents | 403a87c8d0b4 |
children | 049b8fe77535 |
rev | line source |
---|---|
1037 | 1 # |
2 # GNUmakefile -- GNU make for irccd | |
3 # | |
4 # Copyright (c) 2013-2021 David Demelier <markand@malikania.fr> | |
5 # | |
6 # Permission to use, copy, modify, and/or distribute this software for any | |
7 # purpose with or without fee is hereby granted, provided that the above | |
8 # copyright notice and this permission notice appear in all copies. | |
9 # | |
10 # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES | |
11 # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF | |
12 # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR | |
13 # ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES | |
14 # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN | |
15 # ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF | |
16 # OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. | |
17 # | |
18 | |
19 CC= cc | |
1045
13e374b9c522
make: add DEBUG option
David Demelier <markand@malikania.fr>
parents:
1038
diff
changeset
|
20 CFLAGS= -Wall -Wextra -Wno-cpp |
1037 | 21 |
22 PREFIX= /usr/local | |
23 BINDIR= ${PREFIX}/bin | |
24 ETCDIR= ${PREFIX}/etc | |
25 INCDIR= ${PREFIX}/include | |
26 LIBDIR= ${PREFIX}/lib | |
27 MANDIR= ${PREFIX}/share/man | |
28 SHAREDIR= ${PREFIX}/share | |
29 VARDIR= ${PREFIX}/var | |
1051
403a87c8d0b4
misc: add User/Group options in irccd.service
David Demelier <markand@malikania.fr>
parents:
1045
diff
changeset
|
30 USER= nobody |
403a87c8d0b4
misc: add User/Group options in irccd.service
David Demelier <markand@malikania.fr>
parents:
1045
diff
changeset
|
31 GROUP= nobody |
1037 | 32 |
33 SSL= 1 | |
34 JS= 1 | |
35 | |
36 MAJOR= 4 | |
37 MINOR= 0 | |
38 PATCH= 0 | |
39 | |
40 LIB_SRCS= lib/irccd/channel.c \ | |
41 lib/irccd/conn.c \ | |
42 lib/irccd/event.c \ | |
43 lib/irccd/hook.c \ | |
44 lib/irccd/irccd.c \ | |
45 lib/irccd/log.c \ | |
46 lib/irccd/plugin.c \ | |
47 lib/irccd/rule.c \ | |
48 lib/irccd/server.c \ | |
49 lib/irccd/subst.c \ | |
50 lib/irccd/util.c | |
51 LIB_OBJS= ${LIB_SRCS:.c=.o} | |
52 LIB_DEPS= ${LIB_SRCS:.c=.d} | |
53 | |
54 IRCCD_SRCS= irccd/conf.c \ | |
55 irccd/dl-plugin.c \ | |
56 irccd/lex.c \ | |
57 irccd/peer.c \ | |
58 irccd/transport.c \ | |
59 irccd/unicode.c | |
60 | |
61 ifeq (${JS},1) | |
62 IRCCD_SRCS+= extern/libduktape/duktape.c \ | |
63 irccd/js-plugin.c \ | |
64 irccd/jsapi-chrono.c \ | |
65 irccd/jsapi-directory.c \ | |
66 irccd/jsapi-file.c \ | |
67 irccd/jsapi-hook.c \ | |
68 irccd/jsapi-irccd.c \ | |
69 irccd/jsapi-logger.c \ | |
70 irccd/jsapi-plugin.c \ | |
71 irccd/jsapi-rule.c \ | |
72 irccd/jsapi-server.c \ | |
73 irccd/jsapi-system.c \ | |
74 irccd/jsapi-timer.c \ | |
75 irccd/jsapi-unicode.c \ | |
76 irccd/jsapi-util.c | |
77 endif | |
78 | |
79 IRCCD_OBJS= ${IRCCD_SRCS:.c=.o} | |
80 IRCCD_DEPS= ${IRCCD_SRCS:.c=.d} | |
81 | |
82 MAN1= man/irccd.1 \ | |
83 man/irccdctl.1 | |
84 | |
85 MAN3= man/irccd-api-chrono.3 \ | |
86 man/irccd-api-directory.3 \ | |
87 man/irccd-api-file.3 \ | |
88 man/irccd-api-hook.3 \ | |
89 man/irccd-api-logger.3 \ | |
90 man/irccd-api-plugin.3 \ | |
91 man/irccd-api-rule.3 \ | |
92 man/irccd-api-server.3 \ | |
93 man/irccd-api-system.3 \ | |
94 man/irccd-api-timer.3 \ | |
95 man/irccd-api-unicode.3 \ | |
96 man/irccd-api-util.3 \ | |
97 man/irccd-api.3 \ | |
98 man/libirccd-channel.3 \ | |
99 man/libirccd-compat.3 \ | |
100 man/libirccd-event.3 \ | |
101 man/libirccd-hook.3 \ | |
102 man/libirccd-log.3 \ | |
103 man/libirccd-rule.3 \ | |
104 man/libirccd-subst.3 \ | |
105 man/libirccd-util.3 \ | |
106 man/libirccd.3 | |
107 | |
108 MAN5= man/irccd.conf.5 | |
109 | |
110 MAN7= man/irccd-ipc.7 \ | |
111 man/irccd-templates.7 | |
112 | |
113 PLUGINS.js= ask auth hangman history joke logger plugin roulette tictactoe | |
114 PLUGINS.c= links | |
115 | |
116 TESTS= tests/test-bot.c \ | |
117 tests/test-channel.c \ | |
118 tests/test-dl-plugin.c \ | |
119 tests/test-event.c \ | |
120 tests/test-log.c \ | |
121 tests/test-rule.c \ | |
122 tests/test-subst.c \ | |
123 tests/test-util.c | |
124 | |
125 ifeq (${JS},1) | |
126 TESTS+= tests/test-jsapi-chrono.c \ | |
127 tests/test-jsapi-directory.c \ | |
128 tests/test-jsapi-file.c \ | |
129 tests/test-jsapi-irccd.c \ | |
130 tests/test-jsapi-timer.c \ | |
131 tests/test-jsapi-system.c \ | |
132 tests/test-jsapi-unicode.c \ | |
133 tests/test-jsapi-util.c \ | |
134 tests/test-plugin-ask.c \ | |
135 tests/test-plugin-auth.c \ | |
136 tests/test-plugin-hangman.c \ | |
137 tests/test-plugin-history.c \ | |
138 tests/test-plugin-joke.c \ | |
139 tests/test-plugin-logger.c \ | |
140 tests/test-plugin-plugin.c \ | |
141 tests/test-plugin-tictactoe.c | |
142 endif | |
143 | |
144 TESTS_OBJS= ${TESTS:.c=} | |
145 | |
1038
b7585f0c3934
make: add -lm, -ldl and -lpthread
David Demelier <markand@malikania.fr>
parents:
1037
diff
changeset
|
146 # Per system commands. |
b7585f0c3934
make: add -lm, -ldl and -lpthread
David Demelier <markand@malikania.fr>
parents:
1037
diff
changeset
|
147 OS:= $(shell uname -s) |
b7585f0c3934
make: add -lm, -ldl and -lpthread
David Demelier <markand@malikania.fr>
parents:
1037
diff
changeset
|
148 |
1037 | 149 # Compile flags. |
150 DEFS= -D_BSD_SOURCE -DLIBBSD_OVERLAY -DTOP=\"`pwd`\" | |
151 | |
1045
13e374b9c522
make: add DEBUG option
David Demelier <markand@malikania.fr>
parents:
1038
diff
changeset
|
152 ifeq (${DEBUG},1) |
13e374b9c522
make: add DEBUG option
David Demelier <markand@malikania.fr>
parents:
1038
diff
changeset
|
153 CFLAGS+= -O0 -g |
13e374b9c522
make: add DEBUG option
David Demelier <markand@malikania.fr>
parents:
1038
diff
changeset
|
154 else |
1053
8d6651c3e36c
make: fix debug/release builds
David Demelier <markand@malikania.fr>
parents:
1051
diff
changeset
|
155 CFLAGS+= -DNDEBUG -O3 |
1045
13e374b9c522
make: add DEBUG option
David Demelier <markand@malikania.fr>
parents:
1038
diff
changeset
|
156 endif |
13e374b9c522
make: add DEBUG option
David Demelier <markand@malikania.fr>
parents:
1038
diff
changeset
|
157 |
1037 | 158 # Include directories. |
159 INCS= -I lib/ | |
160 INCS+= -I ./ | |
161 INCS+= -I extern/libgreatest/ | |
162 INCS+= -I extern/libketopt/ | |
163 INCS+= $(shell pkg-config --cflags libbsd-overlay) | |
164 | |
165 ifeq (${SSL},1) | |
166 INCS+= $(shell pkg-config --cflags openssl) | |
167 endif | |
168 ifeq (${JS},1) | |
169 INCS+= -I extern/libduktape | |
170 endif | |
171 | |
172 # Whole libraries for every binaries. | |
1038
b7585f0c3934
make: add -lm, -ldl and -lpthread
David Demelier <markand@malikania.fr>
parents:
1037
diff
changeset
|
173 LIBS+= -l pthread |
b7585f0c3934
make: add -lm, -ldl and -lpthread
David Demelier <markand@malikania.fr>
parents:
1037
diff
changeset
|
174 LIBS+= -l m |
b7585f0c3934
make: add -lm, -ldl and -lpthread
David Demelier <markand@malikania.fr>
parents:
1037
diff
changeset
|
175 |
b7585f0c3934
make: add -lm, -ldl and -lpthread
David Demelier <markand@malikania.fr>
parents:
1037
diff
changeset
|
176 ifeq (${OS},Linux) |
b7585f0c3934
make: add -lm, -ldl and -lpthread
David Demelier <markand@malikania.fr>
parents:
1037
diff
changeset
|
177 LIBS+= -l dl |
1051
403a87c8d0b4
misc: add User/Group options in irccd.service
David Demelier <markand@malikania.fr>
parents:
1045
diff
changeset
|
178 CFLAGS+= -fPIC |
1038
b7585f0c3934
make: add -lm, -ldl and -lpthread
David Demelier <markand@malikania.fr>
parents:
1037
diff
changeset
|
179 endif |
b7585f0c3934
make: add -lm, -ldl and -lpthread
David Demelier <markand@malikania.fr>
parents:
1037
diff
changeset
|
180 |
1037 | 181 LIBS+= $(shell pkg-config --libs libbsd-overlay) |
182 | |
183 ifeq (${SSL},1) | |
184 LIBS+= $(shell pkg-config --libs openssl) | |
185 endif | |
186 | |
187 # For config.h file. | |
188 ifeq (${SSL},1) | |
189 SED.ssl= s/@define WITH_SSL@/\#define IRCCD_WITH_SSL/ | |
190 else | |
191 SED.ssl= /@define WITH_SSL@/d | |
192 | |
193 endif | |
194 ifeq (${JS},1) | |
195 SED.js= s/@define WITH_JS@/\#define IRCCD_WITH_JS/ | |
196 else | |
197 SED.js= /@define WITH_JS@/d | |
198 endif | |
199 | |
200 ifeq (${OS},Darwin) | |
201 SHFLAGS= -undefined dynamic_lookup | |
202 else | |
203 SHFLAGS= -shared | |
204 endif | |
205 | |
206 CMD.cc= ${CC} ${DEFS} ${INCS} ${CFLAGS} -MMD -c $< -o $@ | |
207 CMD.ccld= ${CC} ${DEFS} ${INCS} ${CFLAGS} -o $@ $^ ${LIBS} ${LDFLAGS} | |
208 CMD.cchost= ${CC} -Wl,-E -o $@ ${DEFS} ${INCS} ${CFLAGS} \ | |
209 -Wl,--whole-archive $^ -Wl,--no-whole-archive ${LIBS} ${LDFLAGS} | |
210 CMD.ccplg= ${CC} ${DEFS} ${INCS} ${CFLAGS} ${SHFLAGS} -o $@ $^ ${LIBS} ${LDFLAGS} | |
211 | |
212 .SUFFIXES: | |
213 .SUFFIXES: .c .o .js | |
214 | |
215 # Template for Javascript plugins. | |
216 define js-plugin = | |
217 PLUGINS.all+= plugin-${1} | |
218 PLUGINS.inst+= install-plugin-${1} | |
219 | |
220 .PHONY: plugin-${1} | |
221 plugin-${1}: | |
222 | |
223 .PHONY: install-plugin-${1} | |
224 install-plugin-${1}: | |
225 mkdir -p ${DESTDIR}${LIBDIR}/irccd | |
226 mkdir -p ${DESTDIR}${MANDIR}/man7 | |
227 cp plugins/${1}/${1}.js ${DESTDIR}${LIBDIR}/irccd | |
228 cp plugins/${1}/${1}.7 ${DESTDIR}${MANDIR}/man7/irccd-plugin-${1}.7 | |
229 endef | |
230 | |
231 # Template for C native plugins. | |
232 define c-plugin = | |
233 PLUGINS.all+= plugin-${1} | |
234 PLUGINS.objs+= plugins/${1}/${1}.so | |
235 PLUGINS.inst+= install-plugin-${1} | |
236 | |
237 .PHONY: plugin-${1} | |
238 plugin-${1}: plugins/${1}/${1}.so | |
239 | |
240 .PHONY: install-plugin-${1} | |
241 install-plugin-${1}: | |
242 mkdir -p ${DESTDIR}${LIBDIR}/irccd | |
243 mkdir -p ${DESTDIR}${MANDIR}/man7 | |
244 cp plugins/${1}/${1}.so ${DESTDIR}${LIBDIR}/irccd | |
245 cp plugins/${1}/${1}.7 ${DESTDIR}${MANDIR}/man7/irccd-plugin-${1}.7 | |
246 endef | |
247 | |
248 .c.o: | |
249 ${CMD.cc} | |
250 | |
251 .c: | |
252 ${CMD.ccld} | |
253 | |
254 all: irccd/irccd irccdctl/irccdctl | |
255 | |
256 -include ${LIB_DEPS} ${IRCCD_DEPS} | |
257 | |
258 lib/irccd/config.h: lib/irccd/config.h.in | |
259 sed -e "s,@ETCDIR@,${ETCDIR},g" \ | |
260 -e "s,@LIBDIR@,${LIBDIR},g" \ | |
261 -e "s,@SHAREDIR@,${SHAREDIR},g" \ | |
262 -e "s,@VARDIR@,${VARDIR},g" \ | |
263 -e "s,@MAJOR@,${MAJOR},g" \ | |
264 -e "s,@MINOR@,${MINOR},g" \ | |
265 -e "s,@PATCH@,${PATCH},g" \ | |
266 -e "${SED.ssl}" \ | |
267 -e "${SED.js}" \ | |
268 < $< > $@ | |
269 | |
270 ${LIB_OBJS} ${IRCCD_OBJS} irccd/main.o: lib/irccd/config.h | |
271 | |
272 irccd/conf.c: irccd/conf.y | |
273 bison -d -o $@ $< | |
274 | |
275 irccd/lex.c: irccd/lex.l | |
276 flex -o $@ $< | |
277 | |
278 irccd/irccd: irccd/main.o ${IRCCD_OBJS} ${LIB_OBJS} | |
279 ${CMD.cchost} | |
280 | |
281 irccdctl/irccdctl: ${LIB_OBJS} | |
282 | |
283 $(foreach p,${PLUGINS.js},$(eval $(call js-plugin,${p}))) | |
284 $(foreach p,${PLUGINS.c},$(eval $(call c-plugin,${p}))) | |
285 | |
286 install: | |
287 mkdir -p ${DESTDIR}${BINDIR} | |
288 cp irccd/irccd ${DESTDIR}${BINDIR} | |
289 chmod 755 ${DESTDIR}${BINDIR}/irccd | |
290 cp irccdctl/irccdctl ${DESTDIR}${BINDIR} | |
291 chmod 755 ${DESTDIR}${BINDIR}/irccdctl | |
292 mkdir -p ${DESTDIR}${MANDIR}/man1 | |
293 cp ${MAN1} ${DESTDIR}${MANDIR}/man1 | |
294 mkdir -p ${DESTDIR}${MANDIR}/man3 | |
295 cp ${MAN3} ${DESTDIR}${MANDIR}/man3 | |
296 mkdir -p ${DESTDIR}${MANDIR}/man5 | |
297 cp ${MAN5} ${DESTDIR}${MANDIR}/man5 | |
298 mkdir -p ${DESTDIR}${MANDIR}/man7 | |
299 cp ${MAN7} ${DESTDIR}${MANDIR}/man7 | |
300 mkdir -p ${DESTDIR}${ETCDIR} | |
301 cp irccd/irccd.conf ${DESTDIR}${ETCDIR}/irccd.conf.sample | |
302 mkdir -p ${DESTDIR}${LIBDIR}/pkgconfig | |
303 sed -e "s,@MAJOR@,${MAJOR}," \ | |
304 -e "s,@MINOR@,${MINOR}," \ | |
305 -e "s,@PATCH@,${PATCH}," \ | |
306 -e "s,@INCDIR@,${INCDIR}," \ | |
307 -e "s,@SHFLAGS@,${SHFLAGS}," \ | |
308 < lib/irccd.pc.in > ${DESTDIR}${LIBDIR}/pkgconfig/irccd.pc | |
309 | |
310 install-plugins: ${PLUGINS.inst} | |
311 | |
312 install-systemd: | |
313 mkdir -p ${DESTDIR}${LIBDIR}/systemd/system | |
314 sed -e "s,@PATH@,${BINDIR}/irccd," \ | |
1051
403a87c8d0b4
misc: add User/Group options in irccd.service
David Demelier <markand@malikania.fr>
parents:
1045
diff
changeset
|
315 -e "s,@USER@,${USER}," \ |
403a87c8d0b4
misc: add User/Group options in irccd.service
David Demelier <markand@malikania.fr>
parents:
1045
diff
changeset
|
316 -e "s,@GROUP@,${GROUP}," \ |
1037 | 317 < systemd/irccd.service \ |
318 > ${DESTDIR}${LIBDIR}/systemd/system/irccd.service | |
319 | |
320 tests/data/example-dl-plugin.so: tests/data/example-dl-plugin.c | |
321 ${CMD.ccplg} | |
322 | |
323 ${TESTS_OBJS}: ${IRCCD_OBJS} ${LIB_OBJS} | irccd/irccd tests/data/example-dl-plugin.so | |
324 | |
325 # Generic plugin build command. | |
326 plugins/%.so: plugins/%.c | ${IRCCD_OBJS} | |
327 ${CMD.ccplg} | |
328 | |
329 # Plugin `links` require libcurl. | |
330 plugins/links/links.so: plugins/links/links.c ${LIB_OBJS} | |
331 ${CMD.ccplg} $(shell pkg-config --libs --cflags libcurl) | |
332 | |
333 plugins: ${PLUGINS.all} | |
334 | |
335 tests/%: tests/%.c | |
336 ${CMD.cchost} | |
337 | |
338 tests: ${TESTS_OBJS} | |
339 for t in ${TESTS_OBJS}; do ./$$t -v; done | |
340 | |
341 clean: | |
342 rm -f lib/irccd/config.h ${LIB_OBJS} ${LIB_DEPS} | |
343 rm -f irccd/irccd irccd/main.o irccd/main.d \ | |
344 irccd/conf.c irccd/conf.h irccd/lex.c \ | |
345 ${IRCCD_OBJS} ${IRCCD_DEPS} | |
346 rm -f irccdctl/irccdctl | |
347 rm -f ${TESTS_OBJS} tests/data/example-dl-plugin.so | |
348 rm -f ${PLUGINS.objs} | |
349 | |
350 .PHONY: all clean install install-plugins install-systemd plugins tests |