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