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