Mercurial > irccd
annotate GNUmakefile @ 1045:13e374b9c522
make: add DEBUG option
author | David Demelier <markand@malikania.fr> |
---|---|
date | Sun, 20 Jun 2021 09:13:37 +0200 |
parents | b7585f0c3934 |
children | 403a87c8d0b4 |
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 | |
30 | |
31 SSL= 1 | |
32 JS= 1 | |
33 | |
34 MAJOR= 4 | |
35 MINOR= 0 | |
36 PATCH= 0 | |
37 | |
38 LIB_SRCS= lib/irccd/channel.c \ | |
39 lib/irccd/conn.c \ | |
40 lib/irccd/event.c \ | |
41 lib/irccd/hook.c \ | |
42 lib/irccd/irccd.c \ | |
43 lib/irccd/log.c \ | |
44 lib/irccd/plugin.c \ | |
45 lib/irccd/rule.c \ | |
46 lib/irccd/server.c \ | |
47 lib/irccd/subst.c \ | |
48 lib/irccd/util.c | |
49 LIB_OBJS= ${LIB_SRCS:.c=.o} | |
50 LIB_DEPS= ${LIB_SRCS:.c=.d} | |
51 | |
52 IRCCD_SRCS= irccd/conf.c \ | |
53 irccd/dl-plugin.c \ | |
54 irccd/lex.c \ | |
55 irccd/peer.c \ | |
56 irccd/transport.c \ | |
57 irccd/unicode.c | |
58 | |
59 ifeq (${JS},1) | |
60 IRCCD_SRCS+= extern/libduktape/duktape.c \ | |
61 irccd/js-plugin.c \ | |
62 irccd/jsapi-chrono.c \ | |
63 irccd/jsapi-directory.c \ | |
64 irccd/jsapi-file.c \ | |
65 irccd/jsapi-hook.c \ | |
66 irccd/jsapi-irccd.c \ | |
67 irccd/jsapi-logger.c \ | |
68 irccd/jsapi-plugin.c \ | |
69 irccd/jsapi-rule.c \ | |
70 irccd/jsapi-server.c \ | |
71 irccd/jsapi-system.c \ | |
72 irccd/jsapi-timer.c \ | |
73 irccd/jsapi-unicode.c \ | |
74 irccd/jsapi-util.c | |
75 endif | |
76 | |
77 IRCCD_OBJS= ${IRCCD_SRCS:.c=.o} | |
78 IRCCD_DEPS= ${IRCCD_SRCS:.c=.d} | |
79 | |
80 MAN1= man/irccd.1 \ | |
81 man/irccdctl.1 | |
82 | |
83 MAN3= man/irccd-api-chrono.3 \ | |
84 man/irccd-api-directory.3 \ | |
85 man/irccd-api-file.3 \ | |
86 man/irccd-api-hook.3 \ | |
87 man/irccd-api-logger.3 \ | |
88 man/irccd-api-plugin.3 \ | |
89 man/irccd-api-rule.3 \ | |
90 man/irccd-api-server.3 \ | |
91 man/irccd-api-system.3 \ | |
92 man/irccd-api-timer.3 \ | |
93 man/irccd-api-unicode.3 \ | |
94 man/irccd-api-util.3 \ | |
95 man/irccd-api.3 \ | |
96 man/libirccd-channel.3 \ | |
97 man/libirccd-compat.3 \ | |
98 man/libirccd-event.3 \ | |
99 man/libirccd-hook.3 \ | |
100 man/libirccd-log.3 \ | |
101 man/libirccd-rule.3 \ | |
102 man/libirccd-subst.3 \ | |
103 man/libirccd-util.3 \ | |
104 man/libirccd.3 | |
105 | |
106 MAN5= man/irccd.conf.5 | |
107 | |
108 MAN7= man/irccd-ipc.7 \ | |
109 man/irccd-templates.7 | |
110 | |
111 PLUGINS.js= ask auth hangman history joke logger plugin roulette tictactoe | |
112 PLUGINS.c= links | |
113 | |
114 TESTS= tests/test-bot.c \ | |
115 tests/test-channel.c \ | |
116 tests/test-dl-plugin.c \ | |
117 tests/test-event.c \ | |
118 tests/test-log.c \ | |
119 tests/test-rule.c \ | |
120 tests/test-subst.c \ | |
121 tests/test-util.c | |
122 | |
123 ifeq (${JS},1) | |
124 TESTS+= tests/test-jsapi-chrono.c \ | |
125 tests/test-jsapi-directory.c \ | |
126 tests/test-jsapi-file.c \ | |
127 tests/test-jsapi-irccd.c \ | |
128 tests/test-jsapi-timer.c \ | |
129 tests/test-jsapi-system.c \ | |
130 tests/test-jsapi-unicode.c \ | |
131 tests/test-jsapi-util.c \ | |
132 tests/test-plugin-ask.c \ | |
133 tests/test-plugin-auth.c \ | |
134 tests/test-plugin-hangman.c \ | |
135 tests/test-plugin-history.c \ | |
136 tests/test-plugin-joke.c \ | |
137 tests/test-plugin-logger.c \ | |
138 tests/test-plugin-plugin.c \ | |
139 tests/test-plugin-tictactoe.c | |
140 endif | |
141 | |
142 TESTS_OBJS= ${TESTS:.c=} | |
143 | |
1038
b7585f0c3934
make: add -lm, -ldl and -lpthread
David Demelier <markand@malikania.fr>
parents:
1037
diff
changeset
|
144 # Per system commands. |
b7585f0c3934
make: add -lm, -ldl and -lpthread
David Demelier <markand@malikania.fr>
parents:
1037
diff
changeset
|
145 OS:= $(shell uname -s) |
b7585f0c3934
make: add -lm, -ldl and -lpthread
David Demelier <markand@malikania.fr>
parents:
1037
diff
changeset
|
146 |
1037 | 147 # Compile flags. |
148 DEFS= -D_BSD_SOURCE -DLIBBSD_OVERLAY -DTOP=\"`pwd`\" | |
149 | |
1045
13e374b9c522
make: add DEBUG option
David Demelier <markand@malikania.fr>
parents:
1038
diff
changeset
|
150 ifeq (${DEBUG},1) |
13e374b9c522
make: add DEBUG option
David Demelier <markand@malikania.fr>
parents:
1038
diff
changeset
|
151 CFLAGS+= -O0 -g |
13e374b9c522
make: add DEBUG option
David Demelier <markand@malikania.fr>
parents:
1038
diff
changeset
|
152 else |
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 endif |
13e374b9c522
make: add DEBUG option
David Demelier <markand@malikania.fr>
parents:
1038
diff
changeset
|
155 |
1037 | 156 # Include directories. |
157 INCS= -I lib/ | |
158 INCS+= -I ./ | |
159 INCS+= -I extern/libgreatest/ | |
160 INCS+= -I extern/libketopt/ | |
161 INCS+= $(shell pkg-config --cflags libbsd-overlay) | |
162 | |
163 ifeq (${SSL},1) | |
164 INCS+= $(shell pkg-config --cflags openssl) | |
165 endif | |
166 ifeq (${JS},1) | |
167 INCS+= -I extern/libduktape | |
168 endif | |
169 | |
170 # Whole libraries for every binaries. | |
1038
b7585f0c3934
make: add -lm, -ldl and -lpthread
David Demelier <markand@malikania.fr>
parents:
1037
diff
changeset
|
171 LIBS+= -l pthread |
b7585f0c3934
make: add -lm, -ldl and -lpthread
David Demelier <markand@malikania.fr>
parents:
1037
diff
changeset
|
172 LIBS+= -l m |
b7585f0c3934
make: add -lm, -ldl and -lpthread
David Demelier <markand@malikania.fr>
parents:
1037
diff
changeset
|
173 |
b7585f0c3934
make: add -lm, -ldl and -lpthread
David Demelier <markand@malikania.fr>
parents:
1037
diff
changeset
|
174 ifeq (${OS},Linux) |
b7585f0c3934
make: add -lm, -ldl and -lpthread
David Demelier <markand@malikania.fr>
parents:
1037
diff
changeset
|
175 LIBS+= -l dl |
b7585f0c3934
make: add -lm, -ldl and -lpthread
David Demelier <markand@malikania.fr>
parents:
1037
diff
changeset
|
176 endif |
b7585f0c3934
make: add -lm, -ldl and -lpthread
David Demelier <markand@malikania.fr>
parents:
1037
diff
changeset
|
177 |
1037 | 178 LIBS+= $(shell pkg-config --libs libbsd-overlay) |
179 | |
180 ifeq (${SSL},1) | |
181 LIBS+= $(shell pkg-config --libs openssl) | |
182 endif | |
183 | |
184 # For config.h file. | |
185 ifeq (${SSL},1) | |
186 SED.ssl= s/@define WITH_SSL@/\#define IRCCD_WITH_SSL/ | |
187 else | |
188 SED.ssl= /@define WITH_SSL@/d | |
189 | |
190 endif | |
191 ifeq (${JS},1) | |
192 SED.js= s/@define WITH_JS@/\#define IRCCD_WITH_JS/ | |
193 else | |
194 SED.js= /@define WITH_JS@/d | |
195 endif | |
196 | |
197 | |
198 ifeq (${OS},Darwin) | |
199 SHFLAGS= -undefined dynamic_lookup | |
200 else | |
201 SHFLAGS= -shared | |
202 endif | |
203 | |
204 CMD.cc= ${CC} ${DEFS} ${INCS} ${CFLAGS} -MMD -c $< -o $@ | |
205 CMD.ccld= ${CC} ${DEFS} ${INCS} ${CFLAGS} -o $@ $^ ${LIBS} ${LDFLAGS} | |
206 CMD.cchost= ${CC} -Wl,-E -o $@ ${DEFS} ${INCS} ${CFLAGS} \ | |
207 -Wl,--whole-archive $^ -Wl,--no-whole-archive ${LIBS} ${LDFLAGS} | |
208 CMD.ccplg= ${CC} ${DEFS} ${INCS} ${CFLAGS} ${SHFLAGS} -o $@ $^ ${LIBS} ${LDFLAGS} | |
209 | |
210 .SUFFIXES: | |
211 .SUFFIXES: .c .o .js | |
212 | |
213 # Template for Javascript plugins. | |
214 define js-plugin = | |
215 PLUGINS.all+= plugin-${1} | |
216 PLUGINS.inst+= install-plugin-${1} | |
217 | |
218 .PHONY: plugin-${1} | |
219 plugin-${1}: | |
220 | |
221 .PHONY: install-plugin-${1} | |
222 install-plugin-${1}: | |
223 mkdir -p ${DESTDIR}${LIBDIR}/irccd | |
224 mkdir -p ${DESTDIR}${MANDIR}/man7 | |
225 cp plugins/${1}/${1}.js ${DESTDIR}${LIBDIR}/irccd | |
226 cp plugins/${1}/${1}.7 ${DESTDIR}${MANDIR}/man7/irccd-plugin-${1}.7 | |
227 endef | |
228 | |
229 # Template for C native plugins. | |
230 define c-plugin = | |
231 PLUGINS.all+= plugin-${1} | |
232 PLUGINS.objs+= plugins/${1}/${1}.so | |
233 PLUGINS.inst+= install-plugin-${1} | |
234 | |
235 .PHONY: plugin-${1} | |
236 plugin-${1}: plugins/${1}/${1}.so | |
237 | |
238 .PHONY: install-plugin-${1} | |
239 install-plugin-${1}: | |
240 mkdir -p ${DESTDIR}${LIBDIR}/irccd | |
241 mkdir -p ${DESTDIR}${MANDIR}/man7 | |
242 cp plugins/${1}/${1}.so ${DESTDIR}${LIBDIR}/irccd | |
243 cp plugins/${1}/${1}.7 ${DESTDIR}${MANDIR}/man7/irccd-plugin-${1}.7 | |
244 endef | |
245 | |
246 .c.o: | |
247 ${CMD.cc} | |
248 | |
249 .c: | |
250 ${CMD.ccld} | |
251 | |
252 all: irccd/irccd irccdctl/irccdctl | |
253 | |
254 -include ${LIB_DEPS} ${IRCCD_DEPS} | |
255 | |
256 lib/irccd/config.h: lib/irccd/config.h.in | |
257 sed -e "s,@ETCDIR@,${ETCDIR},g" \ | |
258 -e "s,@LIBDIR@,${LIBDIR},g" \ | |
259 -e "s,@SHAREDIR@,${SHAREDIR},g" \ | |
260 -e "s,@VARDIR@,${VARDIR},g" \ | |
261 -e "s,@MAJOR@,${MAJOR},g" \ | |
262 -e "s,@MINOR@,${MINOR},g" \ | |
263 -e "s,@PATCH@,${PATCH},g" \ | |
264 -e "${SED.ssl}" \ | |
265 -e "${SED.js}" \ | |
266 < $< > $@ | |
267 | |
268 ${LIB_OBJS} ${IRCCD_OBJS} irccd/main.o: lib/irccd/config.h | |
269 | |
270 irccd/conf.c: irccd/conf.y | |
271 bison -d -o $@ $< | |
272 | |
273 irccd/lex.c: irccd/lex.l | |
274 flex -o $@ $< | |
275 | |
276 irccd/irccd: irccd/main.o ${IRCCD_OBJS} ${LIB_OBJS} | |
277 ${CMD.cchost} | |
278 | |
279 irccdctl/irccdctl: ${LIB_OBJS} | |
280 | |
281 $(foreach p,${PLUGINS.js},$(eval $(call js-plugin,${p}))) | |
282 $(foreach p,${PLUGINS.c},$(eval $(call c-plugin,${p}))) | |
283 | |
284 install: | |
285 mkdir -p ${DESTDIR}${BINDIR} | |
286 cp irccd/irccd ${DESTDIR}${BINDIR} | |
287 chmod 755 ${DESTDIR}${BINDIR}/irccd | |
288 cp irccdctl/irccdctl ${DESTDIR}${BINDIR} | |
289 chmod 755 ${DESTDIR}${BINDIR}/irccdctl | |
290 mkdir -p ${DESTDIR}${MANDIR}/man1 | |
291 cp ${MAN1} ${DESTDIR}${MANDIR}/man1 | |
292 mkdir -p ${DESTDIR}${MANDIR}/man3 | |
293 cp ${MAN3} ${DESTDIR}${MANDIR}/man3 | |
294 mkdir -p ${DESTDIR}${MANDIR}/man5 | |
295 cp ${MAN5} ${DESTDIR}${MANDIR}/man5 | |
296 mkdir -p ${DESTDIR}${MANDIR}/man7 | |
297 cp ${MAN7} ${DESTDIR}${MANDIR}/man7 | |
298 mkdir -p ${DESTDIR}${ETCDIR} | |
299 cp irccd/irccd.conf ${DESTDIR}${ETCDIR}/irccd.conf.sample | |
300 mkdir -p ${DESTDIR}${LIBDIR}/pkgconfig | |
301 sed -e "s,@MAJOR@,${MAJOR}," \ | |
302 -e "s,@MINOR@,${MINOR}," \ | |
303 -e "s,@PATCH@,${PATCH}," \ | |
304 -e "s,@INCDIR@,${INCDIR}," \ | |
305 -e "s,@SHFLAGS@,${SHFLAGS}," \ | |
306 < lib/irccd.pc.in > ${DESTDIR}${LIBDIR}/pkgconfig/irccd.pc | |
307 | |
308 install-plugins: ${PLUGINS.inst} | |
309 | |
310 install-systemd: | |
311 mkdir -p ${DESTDIR}${LIBDIR}/systemd/system | |
312 sed -e "s,@PATH@,${BINDIR}/irccd," \ | |
313 < systemd/irccd.service \ | |
314 > ${DESTDIR}${LIBDIR}/systemd/system/irccd.service | |
315 | |
316 tests/data/example-dl-plugin.so: tests/data/example-dl-plugin.c | |
317 ${CMD.ccplg} | |
318 | |
319 ${TESTS_OBJS}: ${IRCCD_OBJS} ${LIB_OBJS} | irccd/irccd tests/data/example-dl-plugin.so | |
320 | |
321 # Generic plugin build command. | |
322 plugins/%.so: plugins/%.c | ${IRCCD_OBJS} | |
323 ${CMD.ccplg} | |
324 | |
325 # Plugin `links` require libcurl. | |
326 plugins/links/links.so: plugins/links/links.c ${LIB_OBJS} | |
327 ${CMD.ccplg} $(shell pkg-config --libs --cflags libcurl) | |
328 | |
329 plugins: ${PLUGINS.all} | |
330 | |
331 tests/%: tests/%.c | |
332 ${CMD.cchost} | |
333 | |
334 tests: ${TESTS_OBJS} | |
335 for t in ${TESTS_OBJS}; do ./$$t -v; done | |
336 | |
337 clean: | |
338 rm -f lib/irccd/config.h ${LIB_OBJS} ${LIB_DEPS} | |
339 rm -f irccd/irccd irccd/main.o irccd/main.d \ | |
340 irccd/conf.c irccd/conf.h irccd/lex.c \ | |
341 ${IRCCD_OBJS} ${IRCCD_DEPS} | |
342 rm -f irccdctl/irccdctl | |
343 rm -f ${TESTS_OBJS} tests/data/example-dl-plugin.so | |
344 rm -f ${PLUGINS.objs} | |
345 | |
346 .PHONY: all clean install install-plugins install-systemd plugins tests |