ETAGS=ctags -e if ENABLE_MOBILEAPP if ENABLE_GTKAPP SUBDIRS = gtk browser else if ENABLE_WASM SUBDIRS = wasm browser else !ENABLE_WASM SUBDIRS = browser endif !ENABLE_WASM endif else SUBDIRS = . browser test cypress_test export ENABLE_DEBUG bin_PROGRAMS = \ coolforkit \ coolmount \ coolstress \ coolconvert coolconfig if ENABLE_LIBFUZZER else bin_PROGRAMS += coolwsd if ENABLE_DEBUG bin_PROGRAMS += coolwsd-inproc endif endif dist_bin_SCRIPTS = coolwsd-systemplate-setup man_MANS = man/coolwsd.1 \ man/coolforkit.1 \ man/coolconvert.1 \ man/coolconfig.1 \ man/coolstress.1 \ man/coolwsd-systemplate-setup.1 \ man/coolmount.1 dist_doc_DATA = wsd/README \ wsd/README.vars \ wsd/protocol.txt \ wsd/reference.md \ wsd/metrics.txt coolwsddatadir = @COOLWSD_DATADIR@ coolwsddata_DATA = discovery.xml \ favicon.ico coolwsdconfigdir = @COOLWSD_CONFIGDIR@ coolwsdconfig_DATA = coolwsd.xml \ coolkitconfig.xcu apache2configdir = ${sysconfdir}/apache2/conf-available apache2config_DATA = etc/apache2/coolwsd.conf nginxconfigdir = ${sysconfdir}/nginx/snippets nginxconfig_DATA = etc/nginx/coolwsd.conf ACLOCAL_AMFLAGS = -I m4 # quick and easy for now. include_paths = -I${top_srcdir}/common -I${top_srcdir}/net -I${top_srcdir}/wsd -I${top_srcdir}/kit ${ZLIB_CFLAGS} ${ZSTD_CFLAGS} ${PNG_CFLAGS} if ENABLE_SSL include_paths += ${OPENSSL_CFLAGS} endif AM_CPPFLAGS = -pthread -DCOOLWSD_DATADIR='"@COOLWSD_DATADIR@"' \ -DCOOLWSD_CONFIGDIR='"@COOLWSD_CONFIGDIR@"' \ -DDEBUG_ABSSRCDIR='"@abs_srcdir@"' \ ${include_paths} if !ENABLE_DEBUG AM_CPPFLAGS += -DNDEBUG endif AM_LDFLAGS = -Wl,-E -lpam $(ZLIB_LIBS) $(ZSTD_LIBS) ${PNG_LIBS} # Clang's linker doesn't like -pthread. if !HAVE_CLANG AM_LDFLAGS += -pthread endif if ENABLE_SSL AM_LDFLAGS += ${OPENSSL_LIBS} else coolwsd_LDADD = ${OPENSSL_LIBS} coolconfig_LDADD = ${OPENSSL_LIBS} endif AM_ETAGSFLAGS = --c++-kinds=+p --fields=+iaS --extra=+q -R --totals=yes --exclude=browser * AM_CTAGSFLAGS = $(AM_ETAGSFLAGS) shared_sources = common/FileUtil.cpp \ common/JailUtil.cpp \ common/Log.cpp \ common/Protocol.cpp \ common/StringVector.cpp \ common/Session.cpp \ common/Seccomp.cpp \ common/MessageQueue.cpp \ common/MobileApp.cpp \ common/TraceEvent.cpp \ common/SigUtil.cpp \ common/SpookyV2.cpp \ common/Unit.cpp \ common/Util.cpp \ common/ConfigUtil.cpp \ common/Authorization.cpp \ common/CommandControl.cpp \ common/Simd.cpp \ net/DelaySocket.cpp \ net/HttpRequest.cpp \ net/HttpHelper.cpp \ net/NetUtil.cpp \ net/Socket.cpp \ wsd/Exceptions.cpp if ENABLE_SSL shared_sources += net/Ssl.cpp endif coolwsd_sources = common/Crypto.cpp \ wsd/Admin.cpp \ wsd/AdminModel.cpp \ wsd/Auth.cpp \ wsd/DocumentBroker.cpp \ wsd/ProxyProtocol.cpp \ wsd/COOLWSD.cpp \ wsd/ClientSession.cpp \ wsd/FileServer.cpp \ wsd/ProxyRequestHandler.cpp \ wsd/FileServerUtil.cpp \ wsd/RequestDetails.cpp \ wsd/RequestVettingStation.cpp \ wsd/Storage.cpp \ wsd/StorageConnectionManager.cpp \ wsd/HostUtil.cpp \ wsd/TileCache.cpp \ wsd/ProofKey.cpp \ wsd/QuarantineUtil.cpp \ wsd/WopiProxy.cpp coolwsd_SOURCES = $(coolwsd_sources) \ $(shared_sources) \ wsd/coolwsd-fork.cpp EXTRA_coolwsd_DEPENDENCIES = browser/node_modules noinst_PROGRAMS = clientnb \ connect \ lokitclient \ coolmap \ coolsocketdump if ENABLE_LIBFUZZER noinst_PROGRAMS += \ admin_fuzzer \ clientsession_fuzzer \ httpresponse_fuzzer \ httpecho_fuzzer endif connect_SOURCES = tools/Connect.cpp \ common/DummyTraceEventEmitter.cpp \ common/Log.cpp \ common/Protocol.cpp \ common/StringVector.cpp \ common/Util.cpp lokitclient_SOURCES = common/Log.cpp \ common/DummyTraceEventEmitter.cpp \ tools/KitClient.cpp \ common/Protocol.cpp \ common/StringVector.cpp \ common/TraceEvent.cpp \ common/Util.cpp noinst_LIBRARIES = libsimd.a libsimd_a_SOURCES = kit/DeltaSimd.c libsimd_a_CFLAGS = @SIMD_CFLAGS@ coolforkit_sources = kit/ChildSession.cpp \ kit/ForKit.cpp \ kit/Kit.cpp coolforkit_SOURCES = $(coolforkit_sources) \ $(shared_sources) \ kit/forkit-main.cpp coolforkit_LDADD = libsimd.a if ENABLE_DEBUG coolwsd_inproc_SOURCES = $(coolwsd_sources) \ $(shared_sources) \ $(coolforkit_sources) \ wsd/coolwsd-inproc.cpp coolwsd_inproc_LDADD = ${coolwsd_LDADD} \ ${coolforkit_LDADD} endif if ENABLE_LIBFUZZER coolforkit_SOURCES += \ common/DummyTraceEventEmitter.cpp common_fuzzer_sources = \ common/DummyTraceEventEmitter.cpp \ $(coolwsd_sources) \ wsd/coolwsd-inproc.cpp \ $(coolforkit_sources) \ $(shared_sources) admin_fuzzer_CPPFLAGS = \ $(AM_CPPFLAGS) admin_fuzzer_SOURCES = \ $(common_fuzzer_sources) \ fuzzer/Admin.cpp admin_fuzzer_LDFLAGS = -fsanitize=fuzzer $(AM_LDFLAGS) admin_fuzzer_LDADD = libsimd.a clientsession_fuzzer_CPPFLAGS = \ $(AM_CPPFLAGS) clientsession_fuzzer_SOURCES = \ $(common_fuzzer_sources) \ fuzzer/ClientSession.cpp clientsession_fuzzer_LDFLAGS = -fsanitize=fuzzer $(AM_LDFLAGS) clientsession_fuzzer_LDADD = libsimd.a httpresponse_fuzzer_CPPFLAGS = \ $(AM_CPPFLAGS) httpresponse_fuzzer_SOURCES = \ $(common_fuzzer_sources) \ fuzzer/HttpResponse.cpp httpresponse_fuzzer_LDFLAGS = -fsanitize=fuzzer $(AM_LDFLAGS) httpresponse_fuzzer_LDADD = libsimd.a httpecho_fuzzer_CPPFLAGS = \ $(AM_CPPFLAGS) \ -I${top_srcdir}/test httpecho_fuzzer_SOURCES = \ $(common_fuzzer_sources) \ fuzzer/HttpEcho.cpp httpecho_fuzzer_LDFLAGS = -fsanitize=fuzzer $(AM_LDFLAGS) httpecho_fuzzer_LDADD = libsimd.a endif # ENABLE_LIBFUZZER clientnb_SOURCES = net/clientnb.cpp \ common/DummyTraceEventEmitter.cpp \ common/Log.cpp \ common/StringVector.cpp \ common/Util.cpp coolmount_SOURCES = tools/mount.cpp coolmap_SOURCES = tools/map.cpp coolconvert_SOURCES = tools/Tool.cpp coolstress_CPPFLAGS = -DTDOC=\"$(abs_top_srcdir)/test/data\" ${include_paths} coolstress_SOURCES = tools/Stress.cpp \ common/DummyTraceEventEmitter.cpp \ $(shared_sources) coolconfig_SOURCES = tools/Config.cpp \ tools/ConfigMigrationAssistant.cpp \ common/DummyTraceEventEmitter.cpp \ common/Crypto.cpp \ common/Log.cpp \ common/StringVector.cpp \ common/Util.cpp coolsocketdump_SOURCES = tools/WebSocketDump.cpp \ common/DummyTraceEventEmitter.cpp \ $(shared_sources) wsd_headers = wsd/Admin.hpp \ wsd/AdminModel.hpp \ wsd/Auth.hpp \ wsd/ClientSession.hpp \ wsd/ContentSecurityPolicy.hpp \ wsd/DocumentBroker.hpp \ wsd/ProxyProtocol.hpp \ wsd/Exceptions.hpp \ wsd/FileServer.hpp \ wsd/ProxyRequestHandler.hpp \ wsd/COOLWSD.hpp \ wsd/ProofKey.hpp \ wsd/RequestDetails.hpp \ wsd/RequestVettingStation.hpp \ wsd/SenderQueue.hpp \ wsd/ServerURL.hpp \ wsd/Storage.hpp \ wsd/StorageConnectionManager.hpp \ wsd/TileCache.hpp \ wsd/TileDesc.hpp \ wsd/TraceFile.hpp \ wsd/UserMessages.hpp \ wsd/QuarantineUtil.hpp \ wsd/HostUtil.hpp \ wsd/WopiProxy.hpp shared_headers = common/Common.hpp \ common/Clipboard.hpp \ common/Crypto.hpp \ common/JsonUtil.hpp \ common/FileUtil.hpp \ common/JailUtil.hpp \ common/LangUtil.hpp \ common/Log.hpp \ common/Protocol.hpp \ common/StateEnum.hpp \ common/StringVector.hpp \ common/Seccomp.hpp \ common/Session.hpp \ common/Unit.hpp \ common/Util.hpp \ common/ConfigUtil.hpp \ common/Authorization.hpp \ common/MessageQueue.hpp \ common/Message.hpp \ common/MobileApp.hpp \ common/Png.hpp \ common/TraceEvent.hpp \ common/Rectangle.hpp \ common/RenderTiles.hpp \ common/SigUtil.hpp \ common/security.h \ common/SpookyV2.h \ common/CommandControl.hpp \ common/Simd.hpp \ net/Buffer.hpp \ net/DelaySocket.hpp \ net/FakeSocket.hpp \ net/HttpRequest.hpp \ net/HttpHelper.hpp \ net/NetUtil.hpp \ net/ServerSocket.hpp \ net/Socket.hpp \ net/WebSocketHandler.hpp \ net/WebSocketSession.hpp \ tools/Replay.hpp if ENABLE_SSL shared_headers += net/Ssl.hpp \ net/SslSocket.hpp endif kit_headers = kit/ChildSession.hpp \ kit/Delta.hpp \ kit/DeltaSimd.h \ kit/DummyLibreOfficeKit.hpp \ kit/Kit.hpp \ kit/KitHelper.hpp \ kit/SetupKitEnvironment.hpp \ kit/Watermark.hpp noinst_HEADERS = $(wsd_headers) $(shared_headers) $(kit_headers) \ tools/COOLWebSocket.hpp \ test/UnitHTTP.hpp \ test/HttpTestServer.hpp \ test/WopiTestServer.hpp \ test/countcoolkits.hpp \ test/lokassert.hpp \ test/test.hpp \ test/testlog.hpp \ test/HttpTestServer.hpp \ test/WOPIUploadConflictCommon.hpp \ test/UnitWSDClient.hpp \ test/helpers.hpp GIT_BRANCH := $(shell git symbolic-ref --short HEAD) GIT_HASH := $(shell git log -1 --format=%h) dist-hook: git log -1 --format=%h > $(distdir)/dist_git_hash 2> /dev/null || rm $(distdir)/dist_git_hash mkdir -p $(distdir)/bundled/include/LibreOfficeKit/ cp @LOKIT_PATH@/LibreOfficeKit/LibreOfficeKit.h \ @LOKIT_PATH@/LibreOfficeKit/LibreOfficeKit.hxx \ @LOKIT_PATH@/LibreOfficeKit/LibreOfficeKitEnums.h \ @LOKIT_PATH@/LibreOfficeKit/LibreOfficeKitInit.h \ @LOKIT_PATH@/LibreOfficeKit/LibreOfficeKitTypes.h \ $(distdir)/bundled/include/LibreOfficeKit/ EXTRA_DIST = discovery.xml \ favicon.ico \ coolkitconfig.xcu \ coolwsd.init.rhel6 \ coolwsd.spec \ coolwsd.xml.in \ coolwsd.service \ debian/compat \ debian/copyright \ debian/coolwsd.preinst \ debian/coolwsd.service \ debian/rules \ debian/source/format \ debian/changelog \ debian/control \ debian/coolwsd.postinst \ debian/coolwsd.postrm \ etc/key.pem \ etc/cert.pem \ etc/ca-chain.cert.pem \ etc/apache2/coolwsd.conf \ etc/nginx/coolwsd.conf \ scripts/unocommands.py \ scripts/refresh-git-hooks \ README.md \ $(man_MANS) if ENABLE_LIBFUZZER CLEANUP_COMMAND=true else # Use coolwsd to cleanup jails, if any. If it fails, we may have a broken/old coolwsd binary, remove it to rebuild. # A CI box may switch branches without cleaning up the binaries, if coolwsd from a broken branch is used here # it will fail all subsequent builds, until it's rebuilt from the new branch. So removing coolwsd after failing is needed. CLEANUP_COMMAND=if test -s ./coolwsd; then echo "Cleaning up..." && ./coolwsd --disable-cool-user-checking --cleanup --o:logging.level=trace || rm ./coolwsd; fi endif CLEANUP_COVERAGE=rm -rf ${abs_top_srcdir}/gcov; find . -iname "*.gc??" -delete if HAVE_LO_PATH SYSTEM_STAMP = @SYSTEMPLATE_PATH@/system_stamp CAPABILITIES = $(if @ENABLE_SETCAP@,true,false) RUN_GDB = $(if $(GDB_FRONTEND),$(GDB_FRONTEND),gdb --tui --args) if ENABLE_SETCAP SET_CAPS_COMMAND=sudo @SETCAP@ cap_fowner,cap_chown,cap_mknod,cap_sys_chroot=ep coolforkit && sudo @SETCAP@ cap_sys_admin=ep coolmount else SET_CAPS_COMMAND=echo "Skipping capability setting" endif if ENABLE_LIBFUZZER CLEANUP_DEPS= else CLEANUP_DEPS=coolwsd coolmount coolforkit endif # Build coolwsd and coolmount first, so we can cleanup before updating # the systemplate directory, which we can't rm if it's mounted. $(SYSTEM_STAMP): ${top_srcdir}/coolwsd-systemplate-setup $(CLEANUP_DEPS) $(SET_CAPS_COMMAND) $(CLEANUP_COMMAND) if test "z@SYSTEMPLATE_PATH@" != "z"; then chmod u+w -R --silent "@SYSTEMPLATE_PATH@" ; rm -rf "@SYSTEMPLATE_PATH@" && \ ${top_srcdir}/coolwsd-systemplate-setup "@SYSTEMPLATE_PATH@" "@LO_PATH@" && touch $@; fi @JAILS_PATH@: @$(CLEANUP_COMMAND) mkdir -p $@ cleanup: $(CLEANUP_COMMAND) # Always cleanup before removing the binaries. # Note: this can break with -j option! clean-am: cleanup clean-binPROGRAMS clean-generic clean-libtool clean-local clean-noinstPROGRAMS mostlyclean-am clean-local: $(CLEANUP_COMMAND) if test "z@SYSTEMPLATE_PATH@" != "z"; then rm -rf "@SYSTEMPLATE_PATH@" || echo "WARNING: failed to remove the systemplate"; fi if test "z@JAILS_PATH@" != "z"; then rm -rf "@JAILS_PATH@" || echo "WARNING: failed to remove all jails cleanly"; fi rm -rf "${top_srcdir}/loleaflet" rm -rf loolconfig loolconvert loolforkit loolmap loolmount # kill old binaries rm -rf loolwsd loolwsd_fuzzer coolwsd_fuzzer loolstress loolsocketdump $(CLEANUP_COVERAGE) if ENABLE_DEBUG # can write to /tmp/coolwsd.log OUTPUT_TO_FILE=true else # can't write to /var/log/coolwsd.log OUTPUT_TO_FILE=false endif setup-wsd: all @JAILS_PATH@ @echo "Launching coolwsd" @fc-cache "@LO_PATH@"/share/fonts/truetype @cp $(abs_top_srcdir)/test/data/hello.odt $(abs_top_srcdir)/test/data/hello-world.odt @cp $(abs_top_srcdir)/test/data/hello.ods $(abs_top_srcdir)/test/data/hello-world.ods @cp $(abs_top_srcdir)/test/data/hello.odp $(abs_top_srcdir)/test/data/hello-world.odp @echo COMMON_PARAMS = \ --o:sys_template_path="@SYSTEMPLATE_PATH@" \ --o:child_root_path="@JAILS_PATH@" --o:storage.filesystem[@allow]=true \ --o:ssl.cert_file_path="$(abs_top_srcdir)/etc/cert.pem" \ --o:ssl.key_file_path="$(abs_top_srcdir)/etc/key.pem" \ --o:ssl.ca_file_path="$(abs_top_srcdir)/etc/ca-chain.cert.pem" \ --o:admin_console.username=admin --o:admin_console.password=admin run: setup-wsd ./coolwsd $(COMMON_PARAMS) \ --o:security.capabilities="$(CAPABILITIES)" \ --o:logging.file[@enable]=${OUTPUT_TO_FILE} --o:logging.level=trace \ --o:trace_event[@enable]=true if ENABLE_DEBUG run-one: setup-wsd ./coolwsd $(COMMON_PARAMS) \ --o:security.capabilities="$(CAPABILITIES)" \ --o:logging.file[@enable]=true --o:logging.level=trace \ --singlekit run-inproc: setup-wsd @echo "Launching coolwsd-inproc" ./coolwsd-inproc $(COMMON_PARAMS) \ --o:logging.file[@enable]=true --o:logging.level=trace run-massif-inproc: setup-wsd @echo "Launching coolwsd under valgrind for single process" valgrind --tool=massif --num-callers=64 --trace-children=no -v \ ./coolwsd-inproc $(COMMON_PARAMS) \ --o:logging.file[@enable]=false --o:logging.level=trace endif sync-writer: browser-sync start --config browsersync-config.js --startPath "browser/96c23f663/cool.html?file_path=file://$(abs_top_srcdir)/test/data/hello-world.odt" sync-calc: browser-sync start --config browsersync-config.js --startPath "browser/96c23f663/cool.html?file_path=file://$(abs_top_srcdir)/test/data/hello-world.ods" sync-impress: browser-sync start --config browsersync-config.js --startPath "browser/96c23f663/cool.html?file_path=file://$(abs_top_srcdir)/test/data/hello-world.odp" run-trace: setup-wsd ./coolwsd $(COMMON_PARAMS) \ --o:logging.file[@enable]=false --o:logging.level=trace \ --o:trace[@enable]=true --o:trace.path=${builddir}/trace.txt.gz \ --o:trace.outgoing.record=false run-valgrind: setup-wsd @echo "Launching coolwsd under valgrind (but not forkit/coolkit, yet)" valgrind --tool=memcheck --trace-children=no -v --read-var-info=yes \ ./coolwsd $(COMMON_PARAMS) \ --o:logging.file[@enable]=false --o:logging.level=trace run-gdb: setup-wsd @echo "Launching coolwsd under gdb" $(RUN_GDB) \ ./coolwsd $(COMMON_PARAMS) \ --o:security.capabilities="false" \ --o:logging.file[@enable]=false --o:logging.level=error run-callgrind: setup-wsd @echo "Launching coolwsd under valgrind's callgrind" valgrind --tool=callgrind --simulate-cache=yes --dump-instr=yes --num-callers=50 --error-limit=no --trace-children=yes \ ./coolwsd $(COMMON_PARAMS) \ --o:security.capabilities="false" \ --o:logging.file[@enable]=false --o:logging.level=error run-strace: setup-wsd @echo "Launching coolwsd under strace" strace -o strace.log -f -tt -s 256 \ ./coolwsd $(COMMON_PARAMS) \ --o:security.capabilities="false" \ --o:logging.file[@enable]=false --o:logging.level=error else SYSTEM_STAMP = endif .PHONY: cleanup setup-wsd if ENABLE_LIBFUZZER ALL_LOCAL_DEPS= else ALL_LOCAL_DEPS=coolwsd endif # After building coolforkit, set its capabilities as required. Do it # already after a plain 'make' to allow for testing without # installing. When building for packaging, no need for this, as the # capabilities won't survive packaging anyway. Instead, handle it when # installing the RPM or Debian package. all-local: $(ALL_LOCAL_DEPS) @JAILS_PATH@ $(SYSTEM_STAMP) $(SET_CAPS_COMMAND) @$(abs_top_srcdir)/scripts/refresh-git-hooks # just run the build without any tests build-nocheck: all-am endif define file_target $(1): $(2) endef define file_targets $(foreach file,$(1),$(call file_target,$(file),$(patsubst %.cmd,%.cpp,$(file)))) endef CLANGXX_COMPILE_FLAGS=clang++ $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) JSON_COMPILE_FLAGS=$(subst ",\",$(subst \,\\,$(CLANGXX_COMPILE_FLAGS))) JSON_COMPILE_SRC = $(patsubst %.cpp,%.cmd,$(wildcard **/*.cpp)) $(eval $(call file_targets,$(JSON_COMPILE_SRC))) .cpp.cmd: @echo -n "{\"directory\":\"$(abs_builddir)\",\"command\":\"" > $@ @echo -n $(JSON_COMPILE_FLAGS) >> $@ @echo -n "\",\"file\":\"$<\"}" >> $@ $(abs_srcdir)/compile_commands.json: $(JSON_COMPILE_SRC) @echo -n "[" > $@ @for file in $(JSON_COMPILE_SRC) ; \ do \ cat $$file; \ echo ","; \ rm -f $$file; \ done >> $@ @echo -n "]" >> $@ compile_commands: $(abs_srcdir)/compile_commands.json browser/node_modules: browser/package.json browser/archived-packages @cd browser && npm install eslint: browser/node_modules browser/node_modules/.bin/eslint browser/src browser/js browser/admin/src \ --max-warnings 0 \ --resolve-plugins-relative-to browser \ --ignore-path browser/.eslintignore \ --no-eslintrc \ --config browser/.eslintrc install-exec-hook: cd $(DESTDIR)$(bindir) && \ $(LN_S) coolconfig loolconfig && \ $(LN_S) coolwsd loolwsd && \ $(LN_S) coolwsd-systemplate-setup loolwsd-systemplate-setup stress_file=$(abs_top_srcdir)/test/data/hello-world.odt trace_dir=$(abs_top_srcdir)/test/traces stress: @cp $(abs_top_srcdir)/test/data/hello.odt $(stress_file) @echo "Watch at: https://localhost:9980/browser/12345/cool.html?file_path=$(stress_file)" ./coolstress wss://localhost:9980 \ $(stress_file) $(trace_dir)/writer-quick.txt \ $(stress_file) $(trace_dir)/writer-add-bullet.txt \ $(stress_file) $(trace_dir)/writer-mash-text-table.txt \ $(stress_file) $(trace_dir)/writer-document-edit.txt \ $(stress_file) $(trace_dir)/writer-mash-text-table.txt \ $(stress_file) $(trace_dir)/writer-hello-shape.txt \ $(stress_file) $(trace_dir)/writer-quick.txt if ENABLE_CODE_COVERAGE GEN_COVERAGE_COMMAND=mkdir -p ${abs_top_srcdir}/gcov && \ lcov --no-external --capture --rc 'lcov_excl_line=' --rc 'lcov_excl_br_line=LOG_|TST_|LOK_|WSD_|TRANSITION|assert' \ --compat libtool=on --directory ${abs_top_srcdir}/. --output-file ${abs_top_srcdir}/gcov/cool.coverage.test.info && \ genhtml --prefix ${abs_top_srcdir}/. --ignore-errors source ${abs_top_srcdir}/gcov/cool.coverage.test.info \ --legend --title "${GIT_BRANCH} @ ${GIT_HASH}" --output-directory=${abs_top_srcdir}/gcov/html && \ echo "Code-Coverage report generated in ${abs_top_srcdir}/gcov/html" else GEN_COVERAGE_COMMAND=true endif # typically the system nss won't work in a jail and fail to init which is fatal for # exporting to pdf, which is something that gets tested check-for-system-nss: @if test -e "@LO_PATH@/../config_host.mk"; then \ if grep -q SYSTEM_NSS=TRUE "@LO_PATH@/../config_host.mk"; then \ echo make check will fail unless core is configured using --without-system-nss; \ exit 1; \ fi \ fi check: check-for-system-nss check-recursive eslint $(GEN_COVERAGE_COMMAND) coverage-report: $(GEN_COVERAGE_COMMAND) coverage-clean: $(CLEANUP_COVERAGE) czech: check @echo "This should do something much cooler"