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