mirror of
https://github.com/znc/znc.git
synced 2026-05-10 07:14:43 +02:00
94055c1c82
Just a simple unit test for CModules that checks that the legacy hooks get called and any modifications flow back to the original CMessage object as appropriate.
235 lines
8.2 KiB
Makefile
235 lines
8.2 KiB
Makefile
SHELL := @SHELL@
|
|
|
|
# Support out-of-tree builds
|
|
srcdir := @srcdir@
|
|
VPATH := @srcdir@
|
|
|
|
prefix := @prefix@
|
|
exec_prefix := @exec_prefix@
|
|
datarootdir := @datarootdir@
|
|
bindir := @bindir@
|
|
datadir := @datadir@
|
|
sysconfdir := @sysconfdir@
|
|
libdir := @libdir@
|
|
includedir := @includedir@
|
|
sbindir := @sbindir@
|
|
localstatedir := @localstatedir@
|
|
systemdsystemunitdir := @systemdsystemunitdir@
|
|
CXX := @CXX@
|
|
CXXFLAGS := -I$(srcdir)/include -Iinclude @CPPFLAGS@ @CXXFLAGS@
|
|
LDFLAGS := @LDFLAGS@
|
|
LIBS := @LIBS@
|
|
LIBZNC := @LIBZNC@
|
|
LIBZNCDIR:= @LIBZNCDIR@
|
|
MODDIR := @MODDIR@
|
|
DATADIR := @DATADIR@
|
|
PKGCONFIGDIR := $(libdir)/pkgconfig
|
|
INSTALL := @INSTALL@
|
|
INSTALL_PROGRAM := @INSTALL_PROGRAM@
|
|
INSTALL_SCRIPT := @INSTALL_SCRIPT@
|
|
INSTALL_DATA := @INSTALL_DATA@
|
|
GIT := @GIT@
|
|
SED := @SED@
|
|
|
|
GTEST_DOWNLOAD :=
|
|
GTEST_DIR := @GTEST_DIR@
|
|
ifeq "$(GTEST_DIR)" ""
|
|
GTEST_VER := 1.7.0
|
|
GTEST_DIR := test/gtest-$(GTEST_VER)
|
|
GTEST_DOWNLOAD := 1
|
|
endif
|
|
|
|
LIB_SRCS := ZNCString.cpp Csocket.cpp znc.cpp IRCNetwork.cpp User.cpp IRCSock.cpp \
|
|
Client.cpp Chan.cpp Nick.cpp Server.cpp Modules.cpp MD5.cpp Buffer.cpp Utils.cpp \
|
|
FileUtils.cpp HTTPSock.cpp Template.cpp ClientCommand.cpp Socket.cpp SHA256.cpp \
|
|
WebModules.cpp Listener.cpp Config.cpp ZNCDebug.cpp Threads.cpp version.cpp Query.cpp \
|
|
SSLVerifyHost.cpp Message.cpp
|
|
LIB_SRCS := $(addprefix src/,$(LIB_SRCS))
|
|
BIN_SRCS := src/main.cpp
|
|
LIB_OBJS := $(patsubst %cpp,%o,$(LIB_SRCS))
|
|
BIN_OBJS := $(patsubst %cpp,%o,$(BIN_SRCS))
|
|
TESTS := StringTest ConfigTest UtilsTest ThreadTest NickTest ClientTest NetworkTest MessageTest ModulesTest
|
|
TESTS := $(addprefix test/,$(addsuffix .o,$(TESTS)))
|
|
CLEAN := znc src/*.o test/*.o core core.* .version_extra .depend modules/.depend \
|
|
unittest $(LIBZNC)
|
|
DISTCLEAN := Makefile config.log config.status znc-buildmod include/znc/zncconfig.h \
|
|
modules/Makefile man/Makefile znc.pc znc-uninstalled.pc test/Makefile
|
|
|
|
CXXFLAGS += -D_MODDIR_=\"$(MODDIR)\" -D_DATADIR_=\"$(DATADIR)\"
|
|
|
|
ifneq "$(V)" ""
|
|
VERBOSE=1
|
|
endif
|
|
ifeq "$(VERBOSE)" ""
|
|
Q=@
|
|
E=@echo
|
|
C=-s
|
|
else
|
|
Q=
|
|
E=@\#
|
|
C=
|
|
endif
|
|
|
|
.PHONY: all man modules clean distclean install version_extra_recompile test
|
|
.SECONDARY:
|
|
|
|
all: znc man modules $(LIBZNC)
|
|
@echo ""
|
|
@echo " ZNC was successfully compiled."
|
|
@echo " Use '$(MAKE) install' to install ZNC to '$(prefix)'."
|
|
|
|
ifeq "$(LIBZNC)" ""
|
|
OBJS := $(BIN_OBJS) $(LIB_OBJS)
|
|
|
|
znc: $(OBJS)
|
|
$(E) Linking znc...
|
|
$(Q)$(CXX) $(LDFLAGS) -o $@ $(OBJS) $(LIBS)
|
|
|
|
else
|
|
znc: $(BIN_OBJS) $(LIBZNC)
|
|
$(E) Linking znc...
|
|
$(Q)$(CXX) $(LDFLAGS) -o $@ $(BIN_OBJS) -L. -lznc -Wl,-rpath,$(LIBZNCDIR) $(LIBS)
|
|
|
|
$(LIBZNC): $(LIB_OBJS)
|
|
$(E) Linking $(LIBZNC)...
|
|
$(Q)$(CXX) $(LDFLAGS) -shared -o $@ $(LIB_OBJS) $(LIBS) -Wl,--out-implib=libznc.dll.a
|
|
endif
|
|
|
|
unittest: $(LIB_OBJS) test/gtest-all.o test/gtest-main.o $(TESTS)
|
|
$(E) Linking unit test...
|
|
$(Q)$(CXX) $(LDFLAGS) -o $@ $(LIB_OBJS) test/gtest-all.o test/gtest-main.o $(TESTS) $(LIBS)
|
|
|
|
man:
|
|
@$(MAKE) -C man $(C)
|
|
|
|
modules: $(LIBZNC) include/znc/Csocket.h
|
|
@$(MAKE) -C modules $(C)
|
|
|
|
clean:
|
|
rm -rf $(CLEAN)
|
|
@$(MAKE) -C modules clean;
|
|
@$(MAKE) -C man clean
|
|
|
|
distclean: clean
|
|
rm -rf $(DISTCLEAN)
|
|
|
|
src/%.o: src/%.cpp Makefile include/znc/Csocket.h
|
|
@mkdir -p .depend src
|
|
$(E) Building core object $*...
|
|
$(Q)$(CXX) $(CXXFLAGS) -c -o $@ $< -MD -MF .depend/$*.dep -MT $@
|
|
|
|
test/%.o: test/%.cpp Makefile include/znc/Csocket.h
|
|
@mkdir -p .depend test
|
|
$(E) Building test object $*...
|
|
$(Q)$(CXX) $(CXXFLAGS) -I$(GTEST_DIR)/include -c -o $@ $< -MD -MF .depend/$*.test.dep -MT $@
|
|
|
|
test/gtest-all.o: $(GTEST_DIR)/src/gtest-all.cc Makefile
|
|
@mkdir -p .depend test
|
|
$(E) Building test object gtest-all...
|
|
$(Q)$(CXX) $(CXXFLAGS) -I$(GTEST_DIR)/include -I$(GTEST_DIR) -c -o $@ $< -MD -MF .depend/gtest-all.dep -MT $@
|
|
|
|
test/gtest-main.o: $(GTEST_DIR)/src/gtest_main.cc Makefile
|
|
@mkdir -p .depend test
|
|
$(E) Building test object gtest-main...
|
|
$(Q)$(CXX) $(CXXFLAGS) -I$(GTEST_DIR)/include -c -o $@ $< -MD -MF .depend/gtest-main.dep -MT $@
|
|
|
|
ifneq "$(GTEST_DOWNLOAD)" ""
|
|
test/gtest.zip:
|
|
@mkdir -p .depend test
|
|
$(E) Downloading GoogleTest $(GTEST_VER)
|
|
$(Q)wget http://googletest.googlecode.com/files/gtest-$(GTEST_VER).zip -O $@
|
|
|
|
$(GTEST_DIR)/src/gtest-all.cc $(GTEST_DIR)/src/gtest_main.cc $(GTEST_DIR)/include/gtest/gtest.h: test/gtest.zip
|
|
$(E) Unpacking GoogleTest $(GTEST_VER)
|
|
$(Q)test -r $@ || unzip $^ -d test/
|
|
$(Q)test -r $@
|
|
$(Q)touch -c $@
|
|
endif
|
|
|
|
ifneq "THIS_IS_NOT_TARBALL" ""
|
|
# If git commit was changed since previous build, add a phony target to dependencies, forcing version.o to be recompiled
|
|
# Nightlies have pregenerated version.cpp
|
|
src/version.cpp: Makefile version.sh $(shell if [ x`cat .version_extra 2> /dev/null` != x`$(srcdir)/version.sh "$(GIT)" 3>&2 2> /dev/null` ]; then echo version_extra_recompile; fi)
|
|
@mkdir -p .depend src
|
|
$(E) Building source file version.cpp...
|
|
$(Q)WRITE_OUTPUT=yes $(srcdir)/version.sh "$(GIT)" > .version_extra 2> /dev/null
|
|
|
|
CLEAN += src/version.cpp src/Csocket.cpp include/znc/Csocket.h
|
|
|
|
src/Csocket.cpp: third_party/Csocket/Csocket.cc
|
|
@rm -f $@
|
|
@mkdir -p src
|
|
@sed -e 's:#include "Csocket.h":#include <znc/Csocket.h>:' $^ > $@
|
|
include/znc/Csocket.h: third_party/Csocket/Csocket.h
|
|
@rm -f $@
|
|
@mkdir -p include/znc
|
|
@sed -e 's:#include "defines.h":#include <znc/defines.h>:' $^ > $@
|
|
third_party/Csocket/Csocket.h third_party/Csocket/Csocket.cc:
|
|
@echo It looks like git submodules are not initialized. Run: git submodule update --init --recursive
|
|
@exit 1
|
|
endif
|
|
|
|
install: znc $(LIBZNC)
|
|
test -d $(DESTDIR)$(bindir) || $(INSTALL) -d $(DESTDIR)$(bindir)
|
|
test -d $(DESTDIR)$(includedir)/znc || $(INSTALL) -d $(DESTDIR)$(includedir)/znc
|
|
test -d $(DESTDIR)$(PKGCONFIGDIR) || $(INSTALL) -d $(DESTDIR)$(PKGCONFIGDIR)
|
|
test -d $(DESTDIR)$(MODDIR) || $(INSTALL) -d $(DESTDIR)$(MODDIR)
|
|
test -d $(DESTDIR)$(DATADIR) || $(INSTALL) -d $(DESTDIR)$(DATADIR)
|
|
cp -R $(srcdir)/webskins $(DESTDIR)$(DATADIR)
|
|
find $(DESTDIR)$(DATADIR)/webskins -type d -exec chmod 0755 '{}' \;
|
|
find $(DESTDIR)$(DATADIR)/webskins -type f -exec chmod 0644 '{}' \;
|
|
$(INSTALL_PROGRAM) znc $(DESTDIR)$(bindir)
|
|
$(INSTALL_SCRIPT) znc-buildmod $(DESTDIR)$(bindir)
|
|
$(INSTALL_DATA) $(srcdir)/include/znc/*.h $(DESTDIR)$(includedir)/znc
|
|
$(INSTALL_DATA) include/znc/*.h $(DESTDIR)$(includedir)/znc
|
|
$(INSTALL_DATA) znc.pc $(DESTDIR)$(PKGCONFIGDIR)
|
|
@$(MAKE) -C modules install DESTDIR=$(DESTDIR);
|
|
if test -n "$(LIBZNC)"; then \
|
|
test -d $(DESTDIR)$(LIBZNCDIR) || $(INSTALL) -d $(DESTDIR)$(LIBZNCDIR) || exit 1 ; \
|
|
$(INSTALL_PROGRAM) $(LIBZNC) $(DESTDIR)$(LIBZNCDIR) || exit 1 ; \
|
|
$(INSTALL_PROGRAM) libznc.dll.a $(DESTDIR)$(libdir) || exit 1 ; \
|
|
fi
|
|
@$(MAKE) -C man install DESTDIR=$(DESTDIR)
|
|
@HAVE_SYSTEMD_TRUE@test -d $(DESTDIR)$(systemdsystemunitdir) || $(INSTALL) -d $(DESTDIR)$(systemdsystemunitdir)
|
|
@HAVE_SYSTEMD_TRUE@$(INSTALL_DATA) $(srcdir)/znc.service $(DESTDIR)$(systemdsystemunitdir)
|
|
@echo ""
|
|
@echo "******************************************************************"
|
|
@echo " ZNC was successfully installed."
|
|
@echo " You can use '$(bindir)/znc --makeconf'"
|
|
@echo " to generate a config file."
|
|
@echo ""
|
|
@echo " If you need help with using ZNC, please visit our wiki at:"
|
|
@echo " http://znc.in"
|
|
|
|
uninstall:
|
|
rm $(DESTDIR)$(bindir)/znc
|
|
rm $(DESTDIR)$(bindir)/znc-buildmod
|
|
rm $(DESTDIR)$(includedir)/znc/*.h
|
|
rm $(DESTDIR)$(PKGCONFIGDIR)/znc.pc
|
|
rm -rf $(DESTDIR)$(DATADIR)/webskins
|
|
if test -n "$(LIBZNC)"; then \
|
|
rm $(DESTDIR)$(LIBZNCDIR)/$(LIBZNC) || exit 1 ; \
|
|
rmdir $(DESTDIR)$(LIBZNCDIR) || exit 1 ; \
|
|
fi
|
|
@$(MAKE) -C man uninstall DESTDIR=$(DESTDIR)
|
|
@if test -n "modules"; then \
|
|
$(MAKE) -C modules uninstall DESTDIR=$(DESTDIR); \
|
|
fi
|
|
rmdir $(DESTDIR)$(bindir)
|
|
rmdir $(DESTDIR)$(includedir)/znc
|
|
rmdir $(DESTDIR)$(PKGCONFIGDIR)
|
|
@echo "Successfully uninstalled, but empty directories were left behind"
|
|
|
|
test: unittest
|
|
$(Q)./unittest
|
|
|
|
test2:
|
|
# The following is only for coverage to see that we also have modules, which (theoretically) should be tested too.
|
|
# It exploits the fact that ZNC opens every module on startup to check whether it was installed properly or not.
|
|
# This should be replaced by a better integration test at some point.
|
|
# Also it uses files at <prefix>/lib/znc, which is less than ideal, especially from build scripts of distros.
|
|
# That's why it's a separate make target.
|
|
$(Q)./znc --makeconf --datadir $(shell pwd)/empty-dir-for-test < /dev/null || true
|
|
|
|
-include $(wildcard .depend/*.dep)
|