]>
Commit | Line | Data |
---|---|---|
84ae0f2e | 1 | SHELL := @SHELL@ |
2 | ||
ecd50392 | 3 | # Support out-of-tree builds |
4 | srcdir := @srcdir@ | |
5 | VPATH := @srcdir@ | |
6 | ||
608fbdbd | 7 | prefix := @prefix@ |
8 | exec_prefix := @exec_prefix@ | |
9 | datarootdir := @datarootdir@ | |
10 | bindir := @bindir@ | |
11 | datadir := @datadir@ | |
12 | sysconfdir := @sysconfdir@ | |
13 | libdir := @libdir@ | |
a5f6bc36 | 14 | includedir := @includedir@ |
608fbdbd | 15 | sbindir := @sbindir@ |
16 | localstatedir := @localstatedir@ | |
40641b40 | 17 | systemdsystemunitdir := @systemdsystemunitdir@ |
8100ef94 | 18 | CXX := @CXX@ |
8af35e1f | 19 | CXXFLAGS := -I$(srcdir)/include -Iinclude @CPPFLAGS@ @CXXFLAGS@ |
8100ef94 | 20 | LDFLAGS := @LDFLAGS@ |
8100ef94 | 21 | LIBS := @LIBS@ |
432a04e5 | 22 | LIBZNC := @LIBZNC@ |
23 | LIBZNCDIR:= @LIBZNCDIR@ | |
5a2844f9 | 24 | MODDIR := @MODDIR@ |
fbe5dd10 | 25 | DATADIR := @DATADIR@ |
64fbd545 | 26 | PKGCONFIGDIR := $(libdir)/pkgconfig |
eb307ddc | 27 | INSTALL := @INSTALL@ |
28 | INSTALL_PROGRAM := @INSTALL_PROGRAM@ | |
29 | INSTALL_SCRIPT := @INSTALL_SCRIPT@ | |
30 | INSTALL_DATA := @INSTALL_DATA@ | |
a1311277 AS |
31 | GIT := @GIT@ |
32 | SED := @SED@ | |
d9591e95 | 33 | |
17907784 | 34 | GTEST_DIR := @GTEST_DIR@ |
6f40e5dd | 35 | GMOCK_DIR := @GMOCK_DIR@ |
17907784 | 36 | ifeq "$(GTEST_DIR)" "" |
6f40e5dd AS |
37 | GTEST_DIR := $(srcdir)/third_party/googletest/googletest |
38 | endif | |
39 | ifeq "$(GMOCK_DIR)" "" | |
40 | GMOCK_DIR := $(srcdir)/third_party/googletest/googlemock | |
17907784 | 41 | endif |
90ae7853 AS |
42 | qt_CFLAGS := @qt_CFLAGS@ -fPIC -std=c++11 -pthread |
43 | qt_LIBS := @qt_LIBS@ -pthread | |
17907784 | 44 | |
b3bb6fb5 N |
45 | # Force the simple internal regex engine to get consistent behavior on all platforms. |
46 | # See https://code.google.com/p/chromium/issues/detail?id=317224 for more details. | |
47 | GTEST_FLAGS := -DGTEST_HAS_POSIX_RE=0 -I$(GMOCK_DIR)/include -I$(GTEST_DIR)/include | |
565d04a8 N |
48 | # Silence warnings about overload virtual Csock::Write(), and missing field |
49 | # initializers in both gtest and gmock | |
50 | GTEST_FLAGS += -Wno-overloaded-virtual -Wno-missing-field-initializers | |
b3bb6fb5 | 51 | |
fec1a3fe KF |
52 | LIB_SRCS := ZNCString.cpp Csocket.cpp znc.cpp IRCNetwork.cpp User.cpp IRCSock.cpp \ |
53 | Client.cpp Chan.cpp Nick.cpp Server.cpp Modules.cpp MD5.cpp Buffer.cpp Utils.cpp \ | |
eb449190 | 54 | FileUtils.cpp HTTPSock.cpp Template.cpp ClientCommand.cpp Socket.cpp SHA256.cpp \ |
4442af72 | 55 | WebModules.cpp Listener.cpp Config.cpp ZNCDebug.cpp Threads.cpp version.cpp Query.cpp \ |
8eeeaf71 | 56 | SSLVerifyHost.cpp Message.cpp Translation.cpp |
afeab4a9 AS |
57 | LIB_SRCS := $(addprefix src/,$(LIB_SRCS)) |
58 | BIN_SRCS := src/main.cpp | |
432a04e5 | 59 | LIB_OBJS := $(patsubst %cpp,%o,$(LIB_SRCS)) |
60 | BIN_OBJS := $(patsubst %cpp,%o,$(BIN_SRCS)) | |
f71a0a21 | 61 | TESTS := StringTest ConfigTest UtilsTest ThreadTest NickTest ClientTest NetworkTest \ |
b4bb4fa0 | 62 | MessageTest ModulesTest IRCSockTest QueryTest BufferTest UserTest |
e13bfa11 | 63 | TESTS := $(addprefix test/,$(addsuffix .o,$(TESTS))) |
c336ef5e AS |
64 | CLEAN := znc src/*.o test/*.o core core.* .version_extra .depend modules/.depend \ |
65 | unittest $(LIBZNC) | |
2f058fcc | 66 | DISTCLEAN := Makefile config.log config.status znc-buildmod include/znc/zncconfig.h \ |
6aaf0770 | 67 | modules/Makefile man/Makefile znc.pc znc-uninstalled.pc test/Makefile |
d9591e95 | 68 | |
aeeb1eb3 | 69 | CXXFLAGS += -D_MODDIR_=\"$(MODDIR)\" -D_DATADIR_=\"$(DATADIR)\" |
70 | ||
877c5775 | 71 | ifneq "$(V)" "" |
72 | VERBOSE=1 | |
73 | endif | |
c91d032e | 74 | ifeq "$(VERBOSE)" "" |
75 | Q=@ | |
76 | E=@echo | |
77 | C=-s | |
78 | else | |
79 | Q= | |
80 | E=@\# | |
81 | C= | |
82 | endif | |
83 | ||
e13bfa11 | 84 | .PHONY: all man modules clean distclean install version_extra_recompile test |
897806a8 | 85 | .SECONDARY: |
d9591e95 | 86 | |
f72e2f8a | 87 | all: znc man modules $(LIBZNC) |
8b5ba0f1 | 88 | @echo "" |
1f9b20a9 AS |
89 | @echo " ZNC was successfully compiled." |
90 | @echo " Use '$(MAKE) install' to install ZNC to '$(prefix)'." | |
432a04e5 | 91 | |
92 | ifeq "$(LIBZNC)" "" | |
93 | OBJS := $(BIN_OBJS) $(LIB_OBJS) | |
6169df3f | 94 | |
d9591e95 | 95 | znc: $(OBJS) |
c91d032e | 96 | $(E) Linking znc... |
97 | $(Q)$(CXX) $(LDFLAGS) -o $@ $(OBJS) $(LIBS) | |
e13bfa11 | 98 | |
432a04e5 | 99 | else |
100 | znc: $(BIN_OBJS) $(LIBZNC) | |
c91d032e | 101 | $(E) Linking znc... |
e93b029a | 102 | $(Q)$(CXX) $(LDFLAGS) -o $@ $(BIN_OBJS) -L. -lznc -Wl,-rpath,$(LIBZNCDIR) $(LIBS) |
432a04e5 | 103 | |
104 | $(LIBZNC): $(LIB_OBJS) | |
c91d032e | 105 | $(E) Linking $(LIBZNC)... |
4aba9fed | 106 | $(Q)$(CXX) $(LDFLAGS) -shared -o $@ $(LIB_OBJS) $(LIBS) -Wl,--out-implib=libznc.dll.a |
432a04e5 | 107 | endif |
d9591e95 | 108 | |
6f40e5dd | 109 | unittest: $(LIB_OBJS) test/gtest-all.o test/gmock-all.o test/gmock-main.o $(TESTS) |
91c07d5a | 110 | $(E) Linking unit test... |
6f40e5dd | 111 | $(Q)$(CXX) $(LDFLAGS) -o $@ $(LIB_OBJS) test/gtest-all.o test/gmock-all.o test/gmock-main.o $(TESTS) $(LIBS) |
91c07d5a | 112 | |
90ae7853 AS |
113 | inttest: test/Integration.o test/Int-gtest-all.o test/Int-gmock-all.o test/Int-gmock-main.o |
114 | $(E) Linking integration test... | |
115 | $(Q)g++ -std=c++11 -o $@ test/Integration.o test/Int-gtest-all.o test/Int-gmock-all.o test/Int-gmock-main.o $(LIBS) $(qt_LIBS) | |
116 | ||
f59b7122 | 117 | man: |
c91d032e | 118 | @$(MAKE) -C man $(C) |
f59b7122 | 119 | |
9166e6ed | 120 | modules: $(LIBZNC) include/znc/Csocket.h |
84ec4978 | 121 | @$(MAKE) -C modules $(C) |
d280f386 | 122 | |
d9591e95 | 123 | clean: |
6169df3f | 124 | rm -rf $(CLEAN) |
f72e2f8a | 125 | @$(MAKE) -C modules clean; |
f59b7122 | 126 | @$(MAKE) -C man clean |
d9591e95 | 127 | |
44431c46 | 128 | distclean: clean |
6169df3f | 129 | rm -rf $(DISTCLEAN) |
d9591e95 | 130 | |
9166e6ed | 131 | src/%.o: src/%.cpp Makefile include/znc/Csocket.h |
afeab4a9 AS |
132 | @mkdir -p .depend src |
133 | $(E) Building core object $*... | |
34d0da20 | 134 | $(Q)$(CXX) $(CXXFLAGS) -c -o $@ $< -MD -MF .depend/$*.dep -MT $@ |
b6fadce9 | 135 | |
9166e6ed | 136 | test/%.o: test/%.cpp Makefile include/znc/Csocket.h |
e13bfa11 AS |
137 | @mkdir -p .depend test |
138 | $(E) Building test object $*... | |
b3bb6fb5 | 139 | $(Q)$(CXX) $(CXXFLAGS) $(GTEST_FLAGS) -c -o $@ $< -MD -MF .depend/$*.test.dep -MT $@ |
e13bfa11 | 140 | |
17907784 | 141 | test/gtest-all.o: $(GTEST_DIR)/src/gtest-all.cc Makefile |
e13bfa11 AS |
142 | @mkdir -p .depend test |
143 | $(E) Building test object gtest-all... | |
b3bb6fb5 | 144 | $(Q)$(CXX) $(CXXFLAGS) $(GTEST_FLAGS) -I$(GTEST_DIR) -c -o $@ $< -MD -MF .depend/gtest-all.dep -MT $@ |
e13bfa11 | 145 | |
6f40e5dd | 146 | test/gmock-all.o: $(GMOCK_DIR)/src/gmock-all.cc Makefile |
e13bfa11 | 147 | @mkdir -p .depend test |
6f40e5dd | 148 | $(E) Building test object gmock-all... |
b3bb6fb5 | 149 | $(Q)$(CXX) $(CXXFLAGS) $(GTEST_FLAGS) -I$(GMOCK_DIR) -c -o $@ $< -MD -MF .depend/gmock-all.dep -MT $@ |
e13bfa11 | 150 | |
6f40e5dd | 151 | test/gmock-main.o: $(GMOCK_DIR)/src/gmock_main.cc Makefile |
17907784 | 152 | @mkdir -p .depend test |
6f40e5dd | 153 | $(E) Building test object gmock-main... |
b3bb6fb5 | 154 | $(Q)$(CXX) $(CXXFLAGS) $(GTEST_FLAGS) -c -o $@ $< -MD -MF .depend/gmock-main.dep -MT $@ |
e13bfa11 | 155 | |
90ae7853 | 156 | # Qt fails under TSAN, so CXXFLAGS/LDFLAGS can't be used. |
561a1805 | 157 | test/Integration.o: test/integration/main.cpp Makefile |
90ae7853 AS |
158 | @mkdir -p .depend test |
159 | $(E) Building test object Integration... | |
d13742b1 | 160 | $(Q)g++ $(qt_CFLAGS) $(GTEST_FLAGS) -c -o $@ $< -MD -MF .depend/Integration.test.dep -MT $@ '-DZNC_BIN_DIR="$(bindir)"' '-DZNC_SRC_DIR="$(realpath $(srcdir))"' |
90ae7853 AS |
161 | test/Int-gtest-all.o: $(GTEST_DIR)/src/gtest-all.cc Makefile |
162 | @mkdir -p .depend test | |
163 | $(E) Building test object Int-gtest-all... | |
164 | $(Q)g++ $(qt_CFLAGS) $(GTEST_FLAGS) -I$(GTEST_DIR) -c -o $@ $< -MD -MF .depend/Int-gtest-all.dep -MT $@ | |
165 | test/Int-gmock-all.o: $(GMOCK_DIR)/src/gmock-all.cc Makefile | |
166 | @mkdir -p .depend test | |
167 | $(E) Building test object Int-gmock-all... | |
168 | $(Q)g++ $(qt_CFLAGS) $(GTEST_FLAGS) -I$(GMOCK_DIR) -c -o $@ $< -MD -MF .depend/Int-gmock-all.dep -MT $@ | |
169 | test/Int-gmock-main.o: $(GMOCK_DIR)/src/gmock_main.cc Makefile | |
170 | @mkdir -p .depend test | |
171 | $(E) Building test object Int-gmock-main... | |
172 | $(Q)g++ $(qt_CFLAGS) $(GTEST_FLAGS) -c -o $@ $< -MD -MF .depend/Int-gmock-main.dep -MT $@ | |
173 | ||
90b4c882 | 174 | ifneq "THIS_IS_NOT_TARBALL" "" |
bbde9ab4 AS |
175 | # If git commit was changed since previous build, add a phony target to dependencies, forcing version.o to be recompiled |
176 | # Nightlies have pregenerated version.cpp | |
da279f96 | 177 | 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) |
a1311277 | 178 | @mkdir -p .depend src |
58a34fa5 | 179 | $(E) Building source file version.cpp... |
3a7dc7aa | 180 | $(Q)WRITE_OUTPUT=yes $(srcdir)/version.sh "$(GIT)" > .version_extra 2> /dev/null |
cc279666 | 181 | |
561a1805 AS |
182 | CLEAN += src/version.cpp |
183 | endif | |
184 | ||
185 | CLEAN += src/Csocket.cpp include/znc/Csocket.h | |
9166e6ed AS |
186 | |
187 | src/Csocket.cpp: third_party/Csocket/Csocket.cc | |
188 | @rm -f $@ | |
189 | @mkdir -p src | |
190 | @sed -e 's:#include "Csocket.h":#include <znc/Csocket.h>:' $^ > $@ | |
191 | include/znc/Csocket.h: third_party/Csocket/Csocket.h | |
192 | @rm -f $@ | |
193 | @mkdir -p include/znc | |
194 | @sed -e 's:#include "defines.h":#include <znc/defines.h>:' $^ > $@ | |
ffd1352f AS |
195 | third_party/Csocket/Csocket.h third_party/Csocket/Csocket.cc: |
196 | @echo It looks like git submodules are not initialized. Run: git submodule update --init --recursive | |
197 | @exit 1 | |
a1311277 | 198 | |
be60ebb4 | 199 | znc.service: znc.service.in |
561a1805 | 200 | @sed -e "s:\@CMAKE_INSTALL_FULL_BINDIR\@:$(bindir):" $^ > $@ |
be60ebb4 PG |
201 | |
202 | CLEAN += znc.service | |
203 | ||
204 | install: znc znc.service $(LIBZNC) | |
a08ec52d US |
205 | test -d $(DESTDIR)$(bindir) || $(INSTALL) -d $(DESTDIR)$(bindir) |
206 | test -d $(DESTDIR)$(includedir)/znc || $(INSTALL) -d $(DESTDIR)$(includedir)/znc | |
207 | test -d $(DESTDIR)$(PKGCONFIGDIR) || $(INSTALL) -d $(DESTDIR)$(PKGCONFIGDIR) | |
208 | test -d $(DESTDIR)$(MODDIR) || $(INSTALL) -d $(DESTDIR)$(MODDIR) | |
209 | test -d $(DESTDIR)$(DATADIR) || $(INSTALL) -d $(DESTDIR)$(DATADIR) | |
4c7808c5 | 210 | cp -R $(srcdir)/webskins $(DESTDIR)$(DATADIR) |
0cc8bebd | 211 | find $(DESTDIR)$(DATADIR)/webskins -type d -exec chmod 0755 '{}' \; |
212 | find $(DESTDIR)$(DATADIR)/webskins -type f -exec chmod 0644 '{}' \; | |
eb307ddc | 213 | $(INSTALL_PROGRAM) znc $(DESTDIR)$(bindir) |
eb307ddc | 214 | $(INSTALL_SCRIPT) znc-buildmod $(DESTDIR)$(bindir) |
afeab4a9 | 215 | $(INSTALL_DATA) $(srcdir)/include/znc/*.h $(DESTDIR)$(includedir)/znc |
786d94fb | 216 | $(INSTALL_DATA) include/znc/*.h $(DESTDIR)$(includedir)/znc |
eb307ddc | 217 | $(INSTALL_DATA) znc.pc $(DESTDIR)$(PKGCONFIGDIR) |
84ec4978 | 218 | @$(MAKE) -C modules install DESTDIR=$(DESTDIR); |
bec75207 | 219 | if test -n "$(LIBZNC)"; then \ |
a08ec52d | 220 | test -d $(DESTDIR)$(LIBZNCDIR) || $(INSTALL) -d $(DESTDIR)$(LIBZNCDIR) || exit 1 ; \ |
eb307ddc | 221 | $(INSTALL_PROGRAM) $(LIBZNC) $(DESTDIR)$(LIBZNCDIR) || exit 1 ; \ |
4aba9fed | 222 | $(INSTALL_PROGRAM) libznc.dll.a $(DESTDIR)$(libdir) || exit 1 ; \ |
bec75207 | 223 | fi |
f59b7122 | 224 | @$(MAKE) -C man install DESTDIR=$(DESTDIR) |
701c0f35 AS |
225 | @HAVE_SYSTEMD_TRUE@test -d $(DESTDIR)$(systemdsystemunitdir) || $(INSTALL) -d $(DESTDIR)$(systemdsystemunitdir) |
226 | @HAVE_SYSTEMD_TRUE@$(INSTALL_DATA) $(srcdir)/znc.service $(DESTDIR)$(systemdsystemunitdir) | |
1f9b20a9 | 227 | @echo "" |
f1932b93 | 228 | @echo "******************************************************************" |
1f9b20a9 AS |
229 | @echo " ZNC was successfully installed." |
230 | @echo " You can use '$(bindir)/znc --makeconf'" | |
231 | @echo " to generate a config file." | |
232 | @echo "" | |
233 | @echo " If you need help with using ZNC, please visit our wiki at:" | |
234 | @echo " http://znc.in" | |
6169df3f | 235 | |
bec75207 | 236 | uninstall: |
237 | rm $(DESTDIR)$(bindir)/znc | |
bec75207 | 238 | rm $(DESTDIR)$(bindir)/znc-buildmod |
239 | rm $(DESTDIR)$(includedir)/znc/*.h | |
240 | rm $(DESTDIR)$(PKGCONFIGDIR)/znc.pc | |
0cc8bebd | 241 | rm -rf $(DESTDIR)$(DATADIR)/webskins |
bec75207 | 242 | if test -n "$(LIBZNC)"; then \ |
73ba0488 | 243 | rm $(DESTDIR)$(LIBZNCDIR)/$(LIBZNC) || exit 1 ; \ |
bec75207 | 244 | rmdir $(DESTDIR)$(LIBZNCDIR) || exit 1 ; \ |
245 | fi | |
246 | @$(MAKE) -C man uninstall DESTDIR=$(DESTDIR) | |
247 | @if test -n "modules"; then \ | |
248 | $(MAKE) -C modules uninstall DESTDIR=$(DESTDIR); \ | |
249 | fi | |
250 | rmdir $(DESTDIR)$(bindir) | |
251 | rmdir $(DESTDIR)$(includedir)/znc | |
252 | rmdir $(DESTDIR)$(PKGCONFIGDIR) | |
5a2844f9 | 253 | @echo "Successfully uninstalled, but empty directories were left behind" |
bec75207 | 254 | |
e13bfa11 AS |
255 | test: unittest |
256 | $(Q)./unittest | |
ceb1c5ec | 257 | |
90ae7853 AS |
258 | # This test uses files at <prefix>/lib/znc, which is less than ideal, especially from build scripts of distros. |
259 | # That's why it's a separate make target. | |
260 | test2: inttest | |
261 | $(Q)./inttest | |
e13bfa11 | 262 | |
3637091b | 263 | -include $(wildcard .depend/*.dep) |