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