--include Makefile.settings
+# Makefile for ctrlproxy
+# Copyright (C) 2002-2009 Jelmer Vernooij <jelmer@samba.org>
+# NOTE: This file is *NOT* autogenerated.
-MODS_SHARED_FILES = $(patsubst %,mods/lib%.$(SHLIBEXT),$(MODS_SHARED))
+include Makefile.settings
+
+BINS += ctrlproxy$(EXEEXT)
+SBINS += ctrlproxyd$(EXEEXT)
GCOV = gcov
ifeq ($(WITH_GCOV),1)
-GCOV_CFLAGS = -ftest-coverage -fprofile-arcs
-GCOV_LIBS = -lgcov
-LIBS += $(GCOV_LIBS) $(GCOV_CFLAGS)
+CFLAGS += --coverage
+LIBS += --coverage
endif
LIBS += $(GNUTLS_LIBS)
CFLAGS += $(GNUTLS_CFLAGS)
-CFLAGS+=-DHAVE_CONFIG_H -DSHAREDIR=\"$(cdatadir)\" -DDEFAULT_CONFIG_DIR=\"$(DEFAULT_CONFIG_DIR)\" -DHELPFILE=\"$(HELPFILE)\"
-CFLAGS+=-ansi -Wall -DMODULESDIR=\"$(modulesdir)\" -DSTRICT_MEMORY_ALLOCS=
-
-LIBIRC_STATIC = libirc.a
-LIBIRC = $(LIBIRC_STATIC)
-
-LIBIRC_SHARED = libirc.$(SHLIBEXT).$(PACKAGE_VERSION)
-LIBIRC_SOVERSION = 1.0
-LIBIRC_SONAME = libirc.$(SHLIBEXT).$(LIBIRC_SOVERSION)
+CFLAGS+=-DHAVE_CONFIG_H -DDEFAULT_CONFIG_DIR=\"$(DEFAULT_CONFIG_DIR)\" -DHELPFILE=\"$(HELPFILE)\"
+CFLAGS+=-DMODULESDIR=\"$(modulesdir)\" -DSTRICT_MEMORY_ALLOCS=
+.PHONY: all clean distclean install install-bin install-dirs install-doc install-data install-pkgconfig
+all:: $(BINS) $(SBINS)
-.PHONY: all clean distclean install install-bin install-dirs install-doc install-data install-mods install-pkgconfig
+ifeq ($(HAVE_PYTHON),yes)
+check:: check-python
+all:: python
+endif
-all: $(BINS) $(MODS_SHARED_FILES)
+experimental:: all
doxygen:
doxygen
-lib_objs = \
- lib/state.o \
- lib/client.o \
- lib/line.o \
- lib/isupport.o \
- lib/network.o
+libircdir = libirc
+include $(libircdir)/Makefile
objs = src/posix.o \
+ src/redirect.o \
src/cache.o \
src/util.o \
src/hooks.o \
- src/linestack.o \
src/plugins.o \
src/settings.o \
src/log.o \
- src/redirect.o \
+ src/client.o \
src/gen_config.o \
src/repl.o \
- src/linestack_file.o \
+ src/ctcp_redirect.o \
src/ctcp.o \
src/motd.o \
src/nickserv.o \
+ src/keyfile.o \
src/admin.o \
src/user.o \
- src/pipes.o \
src/help.o \
src/repl_backends.o \
src/listener.o \
src/log_support.o \
src/log_custom.o \
- $(SSL_OBJS)
-
-lib_headers = \
- lib/state.h \
- lib/client.h \
- lib/line.h \
- lib/isupport.h \
- lib/irc.h \
- lib/network.h
+ src/log_subst.o \
+ src/auto_away.o \
+ src/network.o \
+ $(CTRLPROXY_SSL_OBJS)
+all_objs += $(objs)
headers = src/admin.h \
src/ctcp.h \
src/ctrlproxy.h \
src/hooks.h \
- src/linestack.h \
src/log_support.h \
src/repl.h \
src/settings.h \
src/ssl.h \
- src/log.h
-dep_files = $(patsubst %.o, %.d, $(objs)) $(patsubst %.o, %.d, $(wildcard mods/*.o))
-
-linestack-cmd$(EXEEXT): src/linestack-cmd.o $(objs) $(LIBIRC)
- @echo Linking $@
- @$(LD) $(LIBS) -lreadline -rdynamic -o $@ $^
+ src/log.h \
+ src/cache.h
+dep_files = $(patsubst %.o, %.d, $(objs))
ctrlproxy$(EXEEXT): src/main.o $(objs) $(LIBIRC)
+ @echo Linking $@: $(LD) $(LDFLAGS) -rdynamic -o $@ $^ $(LIBS)
+ @$(LD) $(LDFLAGS) $(DYNAMIC) -o $@ $^ $(LIBS)
+
+src/settings.o: CFLAGS+=-DSYSCONFDIR=\"${sysconfdir}\"
+
+daemon/main.o: CFLAGS+=-DDEFAULT_CONFIG_FILE=\"${sysconfdir}/ctrlproxyd.conf\" \
+ -DSSL_CREDENTIALS_DIR=\"${sysconfdir}/ctrlproxy/ssl\" \
+ -DPIDFILE=\"${localstatedir}/run/ctrlproxyd.pid\"
+
+daemon_objs += daemon/main.o daemon/user.o daemon/client.o daemon/backend.o
+
+ctrlproxyd$(EXEEXT): $(daemon_objs) $(objs) $(LIBIRC)
@echo Linking $@
- @$(LD) $(LDFLAGS) -rdynamic -o $@ $^ $(LIBS)
+ @$(CC) $(LDFLAGS) $(DYNAMIC) -o $@ $^ $(LIBS)
ctrlproxy-admin$(EXEEXT): src/admin-cmd.o
@echo Linking $@
- @$(LD) $(LDFLAGS) -rdynamic -o $@ $^ $(LIBS)
-
-mods/%.o: mods/%.c
- @echo Compiling for shared library $<
- @$(CC) -fPIC -I. -Ilib -Isrc $(CFLAGS) $(GCOV_CFLAGS) -c $< -o $@
+ @$(CC) $(LDFLAGS) $(DYNAMIC) -o $@ $^ $(LIBS)
%.o: %.c
@echo Compiling $<
- @$(CC) -I. -Ilib -Isrc $(CFLAGS) $(GCOV_CFLAGS) -c $< -o $@
+ @$(CC) -I. -I$(libircdir) -Isrc $(CFLAGS) $(GCOV_CFLAGS) -c $< -o $@
-%.d: %.c
- @$(CC) -I. -Ilib -Isrc -M -MT $(<:.c=.o) $(CFLAGS) $< -o $@
+%.d: %.c config.h
+ @$(CC) -I. -I$(libircdir) -Isrc -M -MT $(<:.c=.o) $(CFLAGS) $(PYTHON_CFLAGS) $< -o $@
+# This looks a bit weird but is here to ensure that we never try to
+# run ./autogen.sh outside of bzr checkouts
ifeq ($(BZR_CHECKOUT),yes)
-configure: autogen.sh configure.ac acinclude.m4 $(wildcard mods/*/*.m4)
+configure: autogen.sh configure.ac acinclude.m4
./$<
+else
+configure:
+ ./autogen.sh
endif
-ctrlproxy.pc Makefile.settings: configure Makefile.settings.in ctrlproxy.pc.in
+ctrlproxy.pc Makefile.settings config.h: configure Makefile.settings.in ctrlproxy.pc.in
./$<
-install: all install-dirs install-bin install-header install-mods install-data install-pkgconfig $(EXTRA_INSTALL_TARGETS)
+install: all install-dirs install-bin install-header install-data install-pkgconfig $(EXTRA_INSTALL_TARGETS)
install-dirs:
$(INSTALL) -d $(DESTDIR)$(modulesdir)
-uninstall: uninstall-bin uninstall-header uninstall-mods uninstall-data uninstall-pkgconfig $(patsubst install-%,uninstall-%,$(EXTRA_INSTALL_TARGETS))
+uninstall: uninstall-bin uninstall-header uninstall-data uninstall-pkgconfig $(patsubst install-%,uninstall-%,$(EXTRA_INSTALL_TARGETS))
uninstall-bin:
- -rm -f $(DESTDIR)$(bindir)/ctrlproxy$(EXEEXT)
+ -rm -f $(DESTDIR)$(bindir)/ctrlproxy$(EXEEXT) \
+ $(DESTDIR)$(bindir)/ctrlproxy-admin$(EXEEXT) \
+ $(DESTDIR)$(sbindir)/ctrlproxyd$(EXEEXT)
-rmdir $(DESTDIR)$(bindir)
+ -rmdir $(DESTDIR)$(sbindir)
+ -rmdir $(DESTDIR)$(modulesdir)
install-bin:
$(INSTALL) -d $(DESTDIR)$(bindir)
- $(INSTALL) ctrlproxy$(EXEEXT) $(DESTDIR)$(bindir)
+ $(INSTALL) -d $(DESTDIR)$(sbindir)
+ $(INSTALL) $(BINS) $(DESTDIR)$(bindir)
+ $(INSTALL) $(SBINS) $(DESTDIR)$(sbindir)
uninstall-header:
- -rm -f $(patsubst %,$(DESTDIR)$(destincludedir)/%,$(notdir $(headers)))
+ -rm -f $(patsubst %,$(DESTDIR)$(destincludedir)/%,$(notdir $(headers) $(libirc_headers)))
-rmdir $(DESTDIR)$(destincludedir)
install-header::
$(INSTALL) -d $(DESTDIR)$(destincludedir)
- $(INSTALL) -m 0644 $(headers) $(DESTDIR)$(destincludedir)
+ $(INSTALL) -m 0644 $(libirc_headers) $(headers) $(DESTDIR)$(destincludedir)
+
+doc::
+ $(MAKE) -C doc PACKAGE_VERSION=$(PACKAGE_VERSION)
install-doc:: doc
$(INSTALL) -d $(DESTDIR)$(docdir)
- $(INSTALL) -m 0644 UPGRADING $(DESTDIR)$(docdir)
$(MAKE) -C doc install PACKAGE_VERSION=$(PACKAGE_VERSION)
uninstall-doc:
$(MAKE) -C doc uninstall
- rm -f $(DESTDIR)$(docdir)/UPGRADING
-rmdir $(DESTDIR)$(docdir)
uninstall-data::
- -rm -f $(DESTDIR)$(cdatadir)/motd
+ -rm -f $(DESTDIR)$(DEFAULT_CONFIG_DIR)/motd
-rm -f $(DESTDIR)$(DEFAULT_CONFIG_DIR)/config
- -rm -f $(DESTDIR)$(DEFAULT_CONFIG_DIR)/networks/admin
- -rmdir $(DESTDIR)$(DEFAULT_CONFIG_DIR)/networks
-rmdir $(DESTDIR)$(DEFAULT_CONFIG_DIR)
- -rmdir $(DESTDIR)$(cdatadir)
+ -rmdir $(DESTDIR)$(sysconfdir)
install-data:
- $(INSTALL) -d $(DESTDIR)$(cdatadir)
- $(INSTALL) -m 0644 motd $(DESTDIR)$(cdatadir)
+ $(INSTALL) -d $(DESTDIR)$(sysconfdir)
$(INSTALL) -d $(DESTDIR)$(DEFAULT_CONFIG_DIR)
- $(INSTALL) -d $(DESTDIR)$(DEFAULT_CONFIG_DIR)/networks
+ $(INSTALL) -m 0644 motd $(DESTDIR)$(DEFAULT_CONFIG_DIR)
$(INSTALL) -m 0644 config.default $(DESTDIR)$(DEFAULT_CONFIG_DIR)/config
- $(INSTALL) -m 0644 config.admin $(DESTDIR)$(DEFAULT_CONFIG_DIR)/networks/admin
-
-install-mods: all
- $(INSTALL) -d $(DESTDIR)$(modulesdir)
- $(INSTALL) $(MODS_SHARED_FILES) $(DESTDIR)$(modulesdir)
-
-uninstall-mods:
- -rm -f $(patsubst %,$(DESTDIR)$(modulesdir)/%,$(notdir $(MODS_SHARED_FILES)))
- -rmdir $(DESTDIR)$(modulesdir)
install-pkgconfig:
$(INSTALL) -d $(DESTDIR)$(libdir)/pkgconfig
-rm -f $(DESTDIR)$(libdir)/pkgconfig/ctrlproxy.pc
-rmdir $(DESTDIR)$(libdir)/pkgconfig
-gcov: test
+gcov: check
$(GCOV) -f -p -o src/ src/*.c
lcov:
lcov --base-directory `pwd` --directory . --capture --output-file ctrlproxy.info
genhtml -o coverage ctrlproxy.info
-mods/lib%.$(SHLIBEXT): mods/%.o
+%.$(SHLIBEXT):
@echo Linking $@
- @$(LD) $(LDFLAGS) -fPIC -shared -o $@ $^
-
-$(LIBIRC_STATIC): $(lib_objs)
- ar -rcs $@ $^
+ @$(CC) -shared $(LDFLAGS) -o $@ $^
-$(LIBIRC_SHARED): $(lib_objs)
- $(LD) -shared $(LDFLAGS) -Wl,-soname,$(LIBIRC_SONAME) -o $@ $^
+cscope.out::
+ cscope -b -R
clean::
- @echo Removing .so files
- @rm -f $(MODS_SHARED_FILES)
- @echo Removing dependency files
- @rm -f $(dep_files)
@echo Removing object files and executables
- @rm -f src/*.o testsuite/check ctrlproxy$(EXEEXT) testsuite/*.o *~ mods/*.o
- @rm -f linestack-cmd$(EXEEXT) ctrlproxy-admin$(EXEEXT)
+ @rm -f src/*.o daemon/*.o python/*.o testsuite/check ctrlproxy$(EXEEXT) testsuite/*.o *~
+ @rm -f ctrlproxy-admin$(EXEEXT)
+ @rm -f ctrlproxyd$(EXEEXT)
+ @rm -f mods/*.$(SHLIBEXT) mods/*.o
@echo Removing gcov output
- @rm -f *.gcov *.gcno *.gcda
+ @rm -f *.gcov *.gcno *.gcda */*.gcda */*.gcno */*.gcov
@echo Removing test output
@rm -rf test-*
ctags:
ctags -R .
+# Python specific stuff below this line
+mods/python.o python/ctrlproxy.o: CFLAGS+=$(PYTHON_CFLAGS)
+mods/python.o python/ctrlproxy.o: CFLAGS+=-fPIC
+mods/libpython.so: mods/python.o python/ctrlproxy.o $(pyirc_objs)
+mods/libpython.so: LDFLAGS+=$(PYTHON_LDFLAGS)
+
+ifeq ($(HAVE_PYTHON),yes)
+all_objs += $(pyirc_objs) mods/python.o python/ctrlproxy.o
+endif
+
+python:: mods/libpython.$(SHLIBEXT)
+
+install-python: all
+ $(PYTHON) setup.py install --root="$(DESTDIR)"
+
+clean::
+ @rm -f python/tests/*.pyc
+# $(PYTHON) setup.py clean
+
# RFC compliance testing using ircdtorture
TEST_SERVER := localhost
testsuite/test-client.o testsuite/test-network.o \
testsuite/test-tls.o testsuite/test-redirect.o \
testsuite/test-networkinfo.o testsuite/test-ctcp.o \
- testsuite/test-help.o testsuite/test-nickserv.o
+ testsuite/test-help.o testsuite/test-nickserv.o \
+ testsuite/test-url.o testsuite/test-motd.o \
+ testsuite/test-log-subst.o testsuite/test-transport.o
testsuite/check: $(check_objs) $(objs) $(LIBIRC)
@echo Linking $@
@$(CC) $(LIBS) -o $@ $^ $(CHECK_LIBS)
-CTRLPROXY_MODULESDIR=$(shell pwd)/mods
-
-test:: testsuite/check
+check:: testsuite/check
@echo Running testsuite
- @$(VALGRIND) ./testsuite/check
+ @$(DEBUGGER) ./testsuite/check $(CHECK_OPTIONS)
-check: test
+check-nofork::
+ $(MAKE) check CHECK_OPTIONS=-nsv
+check-gdb:
+ $(MAKE) check-nofork DEBUGGER="gdb --args"
+
+clean::
+ @echo Removing dependency files
+ @rm -f $(dep_files)
+
+examples:: example/libfoo.$(SHLIBEXT) example/libirc-simple
+
+example/libfoo.$(SHLIBEXT): example/foo.o
+example/foo.o: CFLAGS+=-I$(libircdir)
+
+example/libirc-simple: example/irc_simple.o $(LIBIRC)
+ @Linking $@
+ @$(CC) -o $@ $^
+
+example/irc_simple.o: CFLAGS+=-I$(libircdir)
+
+ifeq ($(GCC),yes)
-include $(dep_files)
+endif