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