Add simple tests for libirc.
[jelmer/ctrlproxy.git] / Makefile
1 # Makefile for ctrlproxy
2 # Copyright (C) 2002-2008 Jelmer Vernooij <jelmer@samba.org>
3 # NOTE: This file is *NOT* autogenerated.
4
5 include Makefile.settings
6
7 BINS += ctrlproxy$(EXEEXT)
8 SBINS += ctrlproxyd$(EXEEXT)
9
10 GCOV = gcov
11
12 ifeq ($(WITH_GCOV),1)
13 CFLAGS += --coverage
14 LIBS += --coverage
15 endif
16
17 LIBS += $(GNUTLS_LIBS)
18 CFLAGS += $(GNUTLS_CFLAGS)
19
20 CFLAGS+=-DHAVE_CONFIG_H -DDEFAULT_CONFIG_DIR=\"$(DEFAULT_CONFIG_DIR)\" -DHELPFILE=\"$(HELPFILE)\"
21 CFLAGS+=-ansi -Wall -DMODULESDIR=\"$(modulesdir)\" -DSTRICT_MEMORY_ALLOCS=
22
23 LIBIRC_STATIC = libirc.a
24 LIBIRC = $(LIBIRC_STATIC)
25
26 LIBIRC_SHARED = libirc.$(SHLIBEXT).$(PACKAGE_VERSION)
27 LIBIRC_SOVERSION = 1.0
28 LIBIRC_SONAME = libirc.$(SHLIBEXT).$(LIBIRC_SOVERSION)
29
30 .PHONY: all clean distclean install install-bin install-dirs install-doc install-data install-pkgconfig
31
32 all: $(BINS) $(SBINS)
33
34 experimental:: all 
35
36 doxygen:
37         doxygen
38
39 lib_objs = \
40            lib/state.o \
41            lib/client.o \
42            lib/transport.o \
43            lib/line.o \
44            lib/isupport.o \
45            lib/connection.o \
46            lib/url.o \
47            lib/util.o \
48            lib/listener.o
49
50 objs = src/posix.o \
51            src/cache.o \
52            src/util.o \
53            src/hooks.o \
54            src/linestack.o \
55            src/plugins.o \
56            src/settings.o \
57            src/log.o \
58            src/client.o \
59            src/redirect.o \
60            src/gen_config.o \
61            src/repl.o \
62            src/linestack_file.o \
63            src/ctcp_redirect.o \
64            src/ctcp.o \
65            src/motd.o \
66            src/nickserv.o \
67            src/keyfile.o \
68            src/admin.o \
69            src/user.o \
70            src/help.o \
71            src/repl_backends.o \
72            src/listener.o \
73            src/log_support.o \
74            src/log_custom.o \
75            src/log_subst.o \
76            src/auto_away.o \
77            src/network.o \
78            $(SSL_OBJS)
79
80 lib_headers = \
81                   lib/state.h \
82                   lib/client.h \
83                   lib/line.h \
84                   lib/isupport.h \
85                   lib/irc.h \
86                   lib/connection.h \
87                   lib/url.h \
88                   lib/listener.h \
89                   lib/util.h
90
91 headers = src/admin.h \
92                   src/ctcp.h \
93                   src/ctrlproxy.h \
94                   src/hooks.h \
95                   src/linestack.h \
96                   src/log_support.h \
97                   src/repl.h \
98                   src/settings.h \
99                   src/ssl.h \
100                   src/log.h \
101                   src/cache.h
102 dep_files = $(patsubst %.o, %.d, $(objs))
103
104 linestack-cmd$(EXEEXT): src/linestack-cmd.o $(objs) $(LIBIRC)
105         @echo Linking $@
106         @$(LD) $(LIBS) -lreadline -rdynamic -o $@ $^
107
108 ctrlproxy$(EXEEXT): src/main.o $(objs) $(LIBIRC)
109         @echo Linking $@
110         @$(LD) $(LDFLAGS) -rdynamic -o $@ $^ $(LIBS)
111
112 src/settings.o: CFLAGS+=-DSYSCONFDIR=\"${sysconfdir}\"
113
114 daemon/main.o: CFLAGS+=-DDEFAULT_CONFIG_FILE=\"${sysconfdir}/ctrlproxyd.conf\" \
115                            -DSSL_CREDENTIALS_DIR=\"${sysconfdir}/ctrlproxy/ssl\" \
116                                            -DPIDFILE=\"${localstatedir}/run/ctrlproxyd.pid\"
117
118 daemon_objs += daemon/main.o daemon/user.o daemon/client.o daemon/backend.o
119
120 ctrlproxyd$(EXEEXT): $(daemon_objs) $(objs) $(LIBIRC)
121         @echo Linking $@
122         @$(LD) $(LDFLAGS) -rdynamic -o $@ $^ $(LIBS)
123
124 ctrlproxy-admin$(EXEEXT): src/admin-cmd.o
125         @echo Linking $@
126         @$(LD) $(LDFLAGS) -rdynamic -o $@ $^ $(LIBS)
127
128 %.o: %.c
129         @echo Compiling $<
130         @$(CC) -I. -Ilib -Isrc $(CFLAGS) $(GCOV_CFLAGS) -c $< -o $@
131
132 %.d: %.c config.h
133         @$(CC) -I. -Ilib -Isrc -M -MT $(<:.c=.o) $(CFLAGS) $< -o $@
134
135 # This looks a bit weird but is here to ensure that we never try to 
136 # run ./autogen.sh outside of bzr checkouts
137 ifeq ($(BZR_CHECKOUT),yes)
138 configure: autogen.sh configure.ac acinclude.m4
139         ./$<
140 else
141 configure:
142         ./autogen.sh
143 endif
144
145 ctrlproxy.pc Makefile.settings config.h: configure Makefile.settings.in ctrlproxy.pc.in
146         ./$<
147
148 install: all install-dirs install-bin install-header install-data install-pkgconfig $(EXTRA_INSTALL_TARGETS)
149 install-dirs:
150         $(INSTALL) -d $(DESTDIR)$(modulesdir)
151
152 uninstall: uninstall-bin uninstall-header uninstall-data uninstall-pkgconfig $(patsubst install-%,uninstall-%,$(EXTRA_INSTALL_TARGETS))
153 uninstall-bin:
154         -rm -f $(DESTDIR)$(bindir)/ctrlproxy$(EXEEXT) \
155                    $(DESTDIR)$(bindir)/ctrlproxy-admin$(EXEEXT) \
156                    $(DESTDIR)$(sbindir)/ctrlproxyd$(EXEEXT)
157         -rmdir $(DESTDIR)$(bindir)
158         -rmdir $(DESTDIR)$(sbindir)
159         -rmdir $(DESTDIR)$(modulesdir)
160
161 install-bin:
162         $(INSTALL) -d $(DESTDIR)$(bindir)
163         $(INSTALL) -d $(DESTDIR)$(sbindir)
164         $(INSTALL) $(BINS) $(DESTDIR)$(bindir)
165         $(INSTALL) $(SBINS) $(DESTDIR)$(sbindir)
166
167 uninstall-header:
168         -rm -f $(patsubst %,$(DESTDIR)$(destincludedir)/%,$(notdir $(headers) $(lib_headers)))
169         -rmdir $(DESTDIR)$(destincludedir)
170
171 install-header::
172         $(INSTALL) -d $(DESTDIR)$(destincludedir)
173         $(INSTALL) -m 0644 $(lib_headers) $(headers) $(DESTDIR)$(destincludedir)
174
175 doc::
176         $(MAKE) -C doc PACKAGE_VERSION=$(PACKAGE_VERSION)
177
178 install-doc:: doc
179         $(INSTALL) -d $(DESTDIR)$(docdir)
180         $(MAKE) -C doc install PACKAGE_VERSION=$(PACKAGE_VERSION)
181
182 uninstall-doc: 
183         $(MAKE) -C doc uninstall
184         -rmdir $(DESTDIR)$(docdir)
185
186 uninstall-data::
187         -rm -f $(DESTDIR)$(DEFAULT_CONFIG_DIR)/motd
188         -rm -f $(DESTDIR)$(DEFAULT_CONFIG_DIR)/config
189         -rmdir $(DESTDIR)$(DEFAULT_CONFIG_DIR)
190         -rmdir $(DESTDIR)$(sysconfdir)
191
192 install-data:
193         $(INSTALL) -d $(DESTDIR)$(sysconfdir)
194         $(INSTALL) -d $(DESTDIR)$(DEFAULT_CONFIG_DIR)
195         $(INSTALL) -m 0644 motd $(DESTDIR)$(DEFAULT_CONFIG_DIR)
196         $(INSTALL) -m 0644 config.default $(DESTDIR)$(DEFAULT_CONFIG_DIR)/config
197
198 install-pkgconfig:
199         $(INSTALL) -d $(DESTDIR)$(libdir)/pkgconfig
200         $(INSTALL) -m 0644 ctrlproxy.pc $(DESTDIR)$(libdir)/pkgconfig
201
202 uninstall-pkgconfig:
203         -rm -f $(DESTDIR)$(libdir)/pkgconfig/ctrlproxy.pc
204         -rmdir $(DESTDIR)$(libdir)/pkgconfig
205
206 gcov: check
207         $(GCOV) -f -p -o src/ src/*.c 
208
209 lcov:
210         lcov --base-directory `pwd` --directory . --capture --output-file ctrlproxy.info
211         genhtml -o coverage ctrlproxy.info
212
213 $(LIBIRC_STATIC): $(lib_objs)
214         @echo Linking $@
215         @ar -rcs $@ $^
216
217 $(LIBIRC_SHARED): $(lib_objs)
218         $(LD) -shared $(LDFLAGS) -Wl,-soname,$(LIBIRC_SONAME) -o $@ $^
219
220 cscope.out::
221         cscope -b -R
222
223 clean::
224         @echo Removing dependency files
225         @rm -f $(dep_files)
226         @echo Removing object files and executables
227         @rm -f src/*.o lib/*.o daemon/*.o testsuite/check ctrlproxy$(EXEEXT) testsuite/*.o *~
228         @rm -f linestack-cmd$(EXEEXT) ctrlproxy-admin$(EXEEXT)
229         @rm -f ctrlproxyd$(EXEEXT)
230         @rm -f $(LIBIRC_STATIC) $(LIBIRC_SHARED)
231         @echo Removing gcov output
232         @rm -f *.gcov *.gcno *.gcda  */*.gcda */*.gcno */*.gcov
233         @echo Removing test output
234         @rm -rf test-*
235
236 doc-dist:: configure
237         $(MAKE) -C doc dist
238
239 dist: configure doc-dist distclean
240
241 distclean:: clean 
242         rm -f build config.h ctrlproxy.pc *.log
243         rm -rf autom4te.cache/ config.log config.status
244
245 realclean:: distclean
246         @$(MAKE) -C doc clean
247
248 ctags:
249         ctags -R .
250
251 # RFC compliance testing using ircdtorture
252
253 TEST_SERVER := localhost
254 TEST_PORT := 6667
255
256 testsuite/ctrlproxyrc.torture: testsuite/ctrlproxyrc.torture.in
257         sed -e 's/@SERVER@/$(TEST_SERVER)/;s/@PORT@/$(TEST_PORT)/;' < $< > $@
258
259 rfctest: testsuite/ctrlproxyrc.torture
260         @$(IRCDTORTURE) -- ./ctrlproxy -d 0 -i TEST -r $<
261
262 # Unit tests
263 check_objs = testsuite/test-cmp.o testsuite/test-user.o \
264                          testsuite/test-admin.o testsuite/test-isupport.o \
265                          testsuite/test-parser.o testsuite/test-state.o \
266                          testsuite/test-util.o testsuite/test-line.o \
267                          testsuite/torture.o testsuite/test-linestack.o \
268                          testsuite/test-client.o testsuite/test-network.o \
269                          testsuite/test-tls.o testsuite/test-redirect.o \
270                          testsuite/test-networkinfo.o testsuite/test-ctcp.o \
271                          testsuite/test-help.o testsuite/test-nickserv.o \
272                          testsuite/test-url.o testsuite/test-motd.o \
273                          testsuite/test-log-subst.o testsuite/test-transport.o
274
275 testsuite/check: $(check_objs) $(objs) $(LIBIRC)
276         @echo Linking $@
277         @$(CC) $(LIBS) -o $@ $^ $(CHECK_LIBS)
278
279 check:: testsuite/check
280         @echo Running testsuite
281         @$(DEBUGGER) ./testsuite/check $(CHECK_OPTIONS)
282
283 check-nofork:: 
284         $(MAKE) check CHECK_OPTIONS=-nsv
285
286 check-gdb: 
287         $(MAKE) check-nofork DEBUGGER="gdb --args"
288
289 examples:: example/libfoo.$(SHLIBEXT) example/libirc-simple
290
291 example/libfoo.$(SHLIBEXT): example/foo.o
292 example/foo.o: CFLAGS+=-Ilib
293
294 example/libirc-simple: example/irc_simple.o $(LIBIRC)
295         $(CC) -o $@ $^
296
297 example/irc_simple.o: CFLAGS+=-Ilib
298
299 -include $(dep_files)