summaryrefslogtreecommitdiffstats
path: root/Makefile.am
diff options
context:
space:
mode:
Diffstat (limited to 'Makefile.am')
-rw-r--r--Makefile.am164
1 files changed, 164 insertions, 0 deletions
diff --git a/Makefile.am b/Makefile.am
new file mode 100644
index 0000000..ebcf3e7
--- /dev/null
+++ b/Makefile.am
@@ -0,0 +1,164 @@
+ACLOCAL_AMFLAGS = -I m4macros ${ACLOCAL_FLAGS}
+# ^^^^^^^^ This has to be the first line and cannot come later in this
+# Makefile.am due to some bork in some versions of autotools.
+
+SUBDIRS = tools . ext src doc m4macros @PREMIUM_DIR@ @CONTRIB_DIR@
+
+USE_LCOV=@USE_LCOV@
+LCOV=@LCOV@
+GENHTML=@GENHTML@
+DISTCHECK_GTEST_CONFIGURE_FLAG=@DISTCHECK_GTEST_CONFIGURE_FLAG@
+DISTCHECK_CRYPTO_CONFIGURE_FLAG=@DISTCHECK_CRYPTO_CONFIGURE_FLAG@
+DISTCHECK_BOOST_CONFIGURE_FLAG=@DISTCHECK_BOOST_CONFIGURE_FLAG@
+DISTCHECK_LOG4CPLUS_CONFIGURE_FLAG=@DISTCHECK_LOG4CPLUS_CONFIGURE_FLAG@
+DISTCHECK_PERFDHCP_CONFIGURE_FLAG=@DISTCHECK_PERFDHCP_CONFIGURE_FLAG@
+DISTCHECK_KEA_SHELL_CONFIGURE_FLAG=@DISTCHECK_KEA_SHELL_CONFIGURE_FLAG@
+DISTCHECK_PREMIUM_CONFIGURE_FLAG=@DISTCHECK_PREMIUM_CONFIGURE_FLAG@
+DISTCHECK_CONTRIB_CONFIGURE_FLAG=@DISTCHECK_CONTRIB_CONFIGURE_FLAG@
+
+OVERALL_COVERAGE_DIR=$(abs_top_builddir)/coverage-cpp-html
+
+DISTCLEANFILES = config.report
+
+# When running distcheck target, do not install the configurations
+DISTCHECK_CONFIGURE_FLAGS = --disable-install-configurations
+
+# Use same --with-gtest flag if set
+DISTCHECK_CONFIGURE_FLAGS += $(DISTCHECK_GTEST_CONFIGURE_FLAG)
+
+# Keep the crypto backend config
+DISTCHECK_CONFIGURE_FLAGS += $(DISTCHECK_CRYPTO_CONFIGURE_FLAG)
+
+# Keep the Boost configuration which becomes sensible
+DISTCHECK_CONFIGURE_FLAGS += $(DISTCHECK_BOOST_CONFIGURE_FLAG)
+
+# Keep the log4cplus path too
+DISTCHECK_CONFIGURE_FLAGS += $(DISTCHECK_LOG4CPLUS_CONFIGURE_FLAG)
+
+# Keep perfdhcp if enabled
+DISTCHECK_CONFIGURE_FLAGS += $(DISTCHECK_PERFDHCP_CONFIGURE_FLAG)
+
+# Keep kea-shell if enabled
+DISTCHECK_CONFIGURE_FLAGS += $(DISTCHECK_KEA_SHELL_CONFIGURE_FLAG)
+
+# Keep the premium config
+DISTCHECK_CONFIGURE_FLAGS += $(DISTCHECK_PREMIUM_CONFIGURE_FLAG)
+
+# Keep the contrib config
+DISTCHECK_CONFIGURE_FLAGS += $(DISTCHECK_CONTRIB_CONFIGURE_FLAG)
+
+dist_doc_DATA = AUTHORS COPYING ChangeLog README CONTRIBUTING.md platforms.rst code_of_conduct.md
+
+.PHONY: check-valgrind check-valgrind-suppress
+
+check-valgrind:
+if HAVE_VALGRIND
+ @VALGRIND_COMMAND="$(VALGRIND) -q --gen-suppressions=all --track-origins=yes --num-callers=48 --leak-check=full --fullpath-after=" \
+ make -C $(abs_top_builddir) check
+else
+ @echo "*** Valgrind is required for check-valgrind ***"; exit 1;
+endif
+
+check-valgrind-suppress:
+if HAVE_VALGRIND
+ @VALGRIND_COMMAND="$(VALGRIND) -q --gen-suppressions=all --track-origins=yes --error-exitcode=1 --suppressions=$(abs_top_srcdir)/src/valgrind-suppressions --suppressions=$(abs_top_srcdir)/src/valgrind-suppressions.revisit --num-callers=48 --leak-check=full --fullpath-after=" \
+ make -C $(abs_top_builddir) check
+else
+ @echo "*** Valgrind is required for check-valgrind-suppress ***"; exit 1;
+endif
+
+clean-cpp-coverage:
+ @if [ $(USE_LCOV) = yes ] ; then \
+ $(LCOV) --directory . --zerocounters; \
+ rm -rf $(OVERALL_COVERAGE_DIR); \
+ else \
+ echo "C++ code coverage not enabled at configuration time." ; \
+ echo "Use: ./configure --with-lcov" ; \
+ fi
+
+perform-coverage:
+ find src -mindepth 2 -maxdepth 2 -type d | xargs -I{} bash -c "cd {}; make check || true"
+
+report-cpp-coverage:
+if HAVE_BOTAN
+BOTAN_PATH=botan/\*
+else
+BOTAN_PATH=
+endif
+if HAVE_OPENSSL
+OPENSSL_PATH=openssl/\*
+else
+OPENSSL_PATH=
+endif
+ @if [ $(USE_LCOV) = yes ] ; then \
+ $(LCOV) --capture --directory . \
+ --ignore-errors gcov,source,graph \
+ --output-file all.info; \
+ $(LCOV) --remove all.info \
+ c++/* \
+ boost/\* \
+if HAVE_BOTAN
+ botan/\* \
+endif
+ ext/coroutine/\* \
+ gtest/\* \
+ include/\* \
+ lib/\eval/\* \
+ log4cplus/\* \
+ unittests/\* \
+ tests/\* \
+ testutils/\* \
+ valgrind/\* \
+ $(BOTAN_PATH) \
+ $(OPENSSL_PATH) \
+ --ignore-errors gcov,source,graph \
+ --output report.info; \
+ sed --in-place --expression "s|$(abs_top_srcdir)|$(abs_top_builddir)|g" report.info; \
+ "$(GENHTML)" --frames --show-details --title 'Kea code coverage report' --legend \
+ --function-coverage --ignore-errors source --demangle-cpp \
+ --output "$(OVERALL_COVERAGE_DIR)" report.info; \
+ printf "Generated C++ code coverage report in HTML at %s.\n" "$(OVERALL_COVERAGE_DIR)"; \
+ else \
+ echo "C++ code coverage not enabled at configuration time." ; \
+ echo "Use: ./configure --with-lcov" ; \
+ fi
+
+# for c++ test coverage
+.NOTPARALLEL: coverage
+
+coverage: clean-coverage perform-coverage report-coverage
+
+clean-coverage: clean-cpp-coverage
+
+report-coverage: report-cpp-coverage
+
+# for static C++ check using cppcheck (when available)
+cppcheck:
+ cppcheck -I./src/lib -I./src/bin --enable=all \
+ --suppressions-list=src/cppcheck-suppress.lst --inline-suppr \
+ --quiet --error-exitcode=1 \
+ --template '{file}:{line}: check_fail: {message} ({severity},{id})' \
+ src
+
+# this is a shortcut that builds only documentation dependencies and documentation itself
+docs:
+ $(MAKE) -C doc/sphinx
+
+
+# These steps are necessary during installation
+install-exec-hook:
+ mkdir -p $(DESTDIR)${localstatedir}/log/
+ mkdir -p $(DESTDIR)${localstatedir}/lib/${PACKAGE_NAME}
+ mkdir -p $(DESTDIR)${runstatedir}/${PACKAGE_NAME}
+
+EXTRA_DIST = tools/path_replacer.sh
+EXTRA_DIST += tools/mk_cfgrpt.sh
+
+#### include external sources in the distributed tarball:
+EXTRA_DIST += ext/coroutine/coroutine.hpp
+
+CLEANFILES = $(abs_top_builddir)/logger_lockfile
+
+# config.h may be included by headers supplied for building user-written
+# hooks libraries, so we need to include it in the distribution.
+pkginclude_HEADERS = config.h kea_version.h