Mercurial > irccd
comparison GNUmakefile @ 1037:8f8ce47aba8a
make: switch to GNU make
author | David Demelier <markand@malikania.fr> |
---|---|
date | Tue, 27 Apr 2021 09:22:16 +0200 |
parents | |
children | b7585f0c3934 |
comparison
equal
deleted
inserted
replaced
1036:bafb5943cd35 | 1037:8f8ce47aba8a |
---|---|
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 | |
20 CFLAGS= -O0 -DNDEBUG -Wall -Wextra -Wno-cpp -g -fPIC | |
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 | |
144 # Compile flags. | |
145 DEFS= -D_BSD_SOURCE -DLIBBSD_OVERLAY -DTOP=\"`pwd`\" | |
146 | |
147 # Include directories. | |
148 INCS= -I lib/ | |
149 INCS+= -I ./ | |
150 INCS+= -I extern/libgreatest/ | |
151 INCS+= -I extern/libketopt/ | |
152 INCS+= $(shell pkg-config --cflags libbsd-overlay) | |
153 | |
154 ifeq (${SSL},1) | |
155 INCS+= $(shell pkg-config --cflags openssl) | |
156 endif | |
157 ifeq (${JS},1) | |
158 INCS+= -I extern/libduktape | |
159 endif | |
160 | |
161 # Whole libraries for every binaries. | |
162 LIBS+= $(shell pkg-config --libs libbsd-overlay) | |
163 | |
164 ifeq (${SSL},1) | |
165 LIBS+= $(shell pkg-config --libs openssl) | |
166 endif | |
167 | |
168 # For config.h file. | |
169 ifeq (${SSL},1) | |
170 SED.ssl= s/@define WITH_SSL@/\#define IRCCD_WITH_SSL/ | |
171 else | |
172 SED.ssl= /@define WITH_SSL@/d | |
173 | |
174 endif | |
175 ifeq (${JS},1) | |
176 SED.js= s/@define WITH_JS@/\#define IRCCD_WITH_JS/ | |
177 else | |
178 SED.js= /@define WITH_JS@/d | |
179 endif | |
180 | |
181 # Per system commands. | |
182 OS:= $(shell uname -s) | |
183 | |
184 ifeq (${OS},Darwin) | |
185 SHFLAGS= -undefined dynamic_lookup | |
186 else | |
187 SHFLAGS= -shared | |
188 endif | |
189 | |
190 CMD.cc= ${CC} ${DEFS} ${INCS} ${CFLAGS} -MMD -c $< -o $@ | |
191 CMD.ccld= ${CC} ${DEFS} ${INCS} ${CFLAGS} -o $@ $^ ${LIBS} ${LDFLAGS} | |
192 CMD.cchost= ${CC} -Wl,-E -o $@ ${DEFS} ${INCS} ${CFLAGS} \ | |
193 -Wl,--whole-archive $^ -Wl,--no-whole-archive ${LIBS} ${LDFLAGS} | |
194 CMD.ccplg= ${CC} ${DEFS} ${INCS} ${CFLAGS} ${SHFLAGS} -o $@ $^ ${LIBS} ${LDFLAGS} | |
195 | |
196 .SUFFIXES: | |
197 .SUFFIXES: .c .o .js | |
198 | |
199 # Template for Javascript plugins. | |
200 define js-plugin = | |
201 PLUGINS.all+= plugin-${1} | |
202 PLUGINS.inst+= install-plugin-${1} | |
203 | |
204 .PHONY: plugin-${1} | |
205 plugin-${1}: | |
206 | |
207 .PHONY: install-plugin-${1} | |
208 install-plugin-${1}: | |
209 mkdir -p ${DESTDIR}${LIBDIR}/irccd | |
210 mkdir -p ${DESTDIR}${MANDIR}/man7 | |
211 cp plugins/${1}/${1}.js ${DESTDIR}${LIBDIR}/irccd | |
212 cp plugins/${1}/${1}.7 ${DESTDIR}${MANDIR}/man7/irccd-plugin-${1}.7 | |
213 endef | |
214 | |
215 # Template for C native plugins. | |
216 define c-plugin = | |
217 PLUGINS.all+= plugin-${1} | |
218 PLUGINS.objs+= plugins/${1}/${1}.so | |
219 PLUGINS.inst+= install-plugin-${1} | |
220 | |
221 .PHONY: plugin-${1} | |
222 plugin-${1}: plugins/${1}/${1}.so | |
223 | |
224 .PHONY: install-plugin-${1} | |
225 install-plugin-${1}: | |
226 mkdir -p ${DESTDIR}${LIBDIR}/irccd | |
227 mkdir -p ${DESTDIR}${MANDIR}/man7 | |
228 cp plugins/${1}/${1}.so ${DESTDIR}${LIBDIR}/irccd | |
229 cp plugins/${1}/${1}.7 ${DESTDIR}${MANDIR}/man7/irccd-plugin-${1}.7 | |
230 endef | |
231 | |
232 .c.o: | |
233 ${CMD.cc} | |
234 | |
235 .c: | |
236 ${CMD.ccld} | |
237 | |
238 all: irccd/irccd irccdctl/irccdctl | |
239 | |
240 -include ${LIB_DEPS} ${IRCCD_DEPS} | |
241 | |
242 lib/irccd/config.h: lib/irccd/config.h.in | |
243 sed -e "s,@ETCDIR@,${ETCDIR},g" \ | |
244 -e "s,@LIBDIR@,${LIBDIR},g" \ | |
245 -e "s,@SHAREDIR@,${SHAREDIR},g" \ | |
246 -e "s,@VARDIR@,${VARDIR},g" \ | |
247 -e "s,@MAJOR@,${MAJOR},g" \ | |
248 -e "s,@MINOR@,${MINOR},g" \ | |
249 -e "s,@PATCH@,${PATCH},g" \ | |
250 -e "${SED.ssl}" \ | |
251 -e "${SED.js}" \ | |
252 < $< > $@ | |
253 | |
254 ${LIB_OBJS} ${IRCCD_OBJS} irccd/main.o: lib/irccd/config.h | |
255 | |
256 irccd/conf.c: irccd/conf.y | |
257 bison -d -o $@ $< | |
258 | |
259 irccd/lex.c: irccd/lex.l | |
260 flex -o $@ $< | |
261 | |
262 irccd/irccd: irccd/main.o ${IRCCD_OBJS} ${LIB_OBJS} | |
263 ${CMD.cchost} | |
264 | |
265 irccdctl/irccdctl: ${LIB_OBJS} | |
266 | |
267 $(foreach p,${PLUGINS.js},$(eval $(call js-plugin,${p}))) | |
268 $(foreach p,${PLUGINS.c},$(eval $(call c-plugin,${p}))) | |
269 | |
270 install: | |
271 mkdir -p ${DESTDIR}${BINDIR} | |
272 cp irccd/irccd ${DESTDIR}${BINDIR} | |
273 chmod 755 ${DESTDIR}${BINDIR}/irccd | |
274 cp irccdctl/irccdctl ${DESTDIR}${BINDIR} | |
275 chmod 755 ${DESTDIR}${BINDIR}/irccdctl | |
276 mkdir -p ${DESTDIR}${MANDIR}/man1 | |
277 cp ${MAN1} ${DESTDIR}${MANDIR}/man1 | |
278 mkdir -p ${DESTDIR}${MANDIR}/man3 | |
279 cp ${MAN3} ${DESTDIR}${MANDIR}/man3 | |
280 mkdir -p ${DESTDIR}${MANDIR}/man5 | |
281 cp ${MAN5} ${DESTDIR}${MANDIR}/man5 | |
282 mkdir -p ${DESTDIR}${MANDIR}/man7 | |
283 cp ${MAN7} ${DESTDIR}${MANDIR}/man7 | |
284 mkdir -p ${DESTDIR}${ETCDIR} | |
285 cp irccd/irccd.conf ${DESTDIR}${ETCDIR}/irccd.conf.sample | |
286 mkdir -p ${DESTDIR}${LIBDIR}/pkgconfig | |
287 sed -e "s,@MAJOR@,${MAJOR}," \ | |
288 -e "s,@MINOR@,${MINOR}," \ | |
289 -e "s,@PATCH@,${PATCH}," \ | |
290 -e "s,@INCDIR@,${INCDIR}," \ | |
291 -e "s,@SHFLAGS@,${SHFLAGS}," \ | |
292 < lib/irccd.pc.in > ${DESTDIR}${LIBDIR}/pkgconfig/irccd.pc | |
293 | |
294 install-plugins: ${PLUGINS.inst} | |
295 | |
296 install-systemd: | |
297 mkdir -p ${DESTDIR}${LIBDIR}/systemd/system | |
298 sed -e "s,@PATH@,${BINDIR}/irccd," \ | |
299 < systemd/irccd.service \ | |
300 > ${DESTDIR}${LIBDIR}/systemd/system/irccd.service | |
301 | |
302 tests/data/example-dl-plugin.so: tests/data/example-dl-plugin.c | |
303 ${CMD.ccplg} | |
304 | |
305 ${TESTS_OBJS}: ${IRCCD_OBJS} ${LIB_OBJS} | irccd/irccd tests/data/example-dl-plugin.so | |
306 | |
307 # Generic plugin build command. | |
308 plugins/%.so: plugins/%.c | ${IRCCD_OBJS} | |
309 ${CMD.ccplg} | |
310 | |
311 # Plugin `links` require libcurl. | |
312 plugins/links/links.so: plugins/links/links.c ${LIB_OBJS} | |
313 ${CMD.ccplg} $(shell pkg-config --libs --cflags libcurl) | |
314 | |
315 plugins: ${PLUGINS.all} | |
316 | |
317 tests/%: tests/%.c | |
318 ${CMD.cchost} | |
319 | |
320 tests: ${TESTS_OBJS} | |
321 for t in ${TESTS_OBJS}; do ./$$t -v; done | |
322 | |
323 clean: | |
324 rm -f lib/irccd/config.h ${LIB_OBJS} ${LIB_DEPS} | |
325 rm -f irccd/irccd irccd/main.o irccd/main.d \ | |
326 irccd/conf.c irccd/conf.h irccd/lex.c \ | |
327 ${IRCCD_OBJS} ${IRCCD_DEPS} | |
328 rm -f irccdctl/irccdctl | |
329 rm -f ${TESTS_OBJS} tests/data/example-dl-plugin.so | |
330 rm -f ${PLUGINS.objs} | |
331 | |
332 .PHONY: all clean install install-plugins install-systemd plugins tests |