Usage: $ ./configure --enable-code-coverage-tests --enable-debug \ --enable-samsung-ipc-device=fifo [...] $ make check $ sudo make install [...]
Signed-off-by: Denis 'GNUtoo' Carikli <[email protected]> --- Makefile.am | 54 ++++++++++++++++++++++++++++++++++++++++++-- configure.ac | 33 ++++++++++++++++++++++++++- scripts/manifest.scm | 2 ++ 3 files changed, 86 insertions(+), 3 deletions(-) diff --git a/Makefile.am b/Makefile.am index f5dcb1d..17c4ab2 100644 --- a/Makefile.am +++ b/Makefile.am @@ -1,5 +1,7 @@ NULL = +EXTRA_DIST = $(NULL) + SUBDIRS = \ samsung-ipc \ samsung-ipc/tests \ @@ -11,7 +13,7 @@ SUBDIRS = \ pkgconfigdir = $(libdir)/pkgconfig pkgconfig_DATA = samsung-ipc.pc -EXTRA_DIST = \ +EXTRA_DIST += \ Android.mk \ android_versions.mk \ CONTRIBUTING \ @@ -29,6 +31,18 @@ MAINTAINERCLEANFILES = \ mkinstalldirs *~ \ $(NULL) +################################################################################ +# Extra checks # +################################################################################ + +if WANT_CODE_COVERAGE +check-local: build-code-coverage check-tarball-builds +install-data-local: install-code-coverage +clean-local: clean-code-coverage +else # WANT_CODE_COVERAGE +check-local: check-tarball-builds +endif # WANT_CODE_COVERAGE + # With the next release of libsamsung-ipc, we will also release # tarballs. # @@ -46,7 +60,7 @@ MAINTAINERCLEANFILES = \ # infinite recursion as a given test from a tarball would then spawn # another build and test from a tarball which would then spawn again # another build and test. -check-local: dist +check-tarball-builds: dist if [ -d $(srcdir)/.git ] ; then \ BUILD_TMPDIR=`mktemp -d` && \ echo $$BUILD_TMPDIR && \ @@ -59,3 +73,39 @@ check-local: dist make install DESTDIR=`realpath $$BUILD_TMPDIR/destdir` && \ rm -rf $$BUILD_TMPDIR ; \ fi + +################# +# Code coverage # +################# +if WANT_CODE_COVERAGE + +CODE_COVERAGE_DIR = lcov + +EXTRA_DIST += $(CODE_COVERAGE_DIR) + +build-code-coverage: + lcov --compat-libtool --directory . --capture --output-file libsamsung-ipc.info + genhtml -o $(CODE_COVERAGE_DIR) libsamsung-ipc.info + + BUILD_TMPDIR=$(mktemp -d) && \ + cd ${BUILD_TMPDIR} && \ + mkdir build destdir && \ + tar xf $(srcdir)/libsamsung-ipc-$(VERSION).tar.xz && \ + cd build && \ + ../libsamsung-ipc-$(VERSION)/configure \ + --enable-code-coverage-tests \ + --enable-debug \ + --enable-samsung-ipc-device=fifo \ + make -j3 check \ + make install DESTDIR=$(realpath ../destdir) + +install-code-coverage: check + install -d $(DESTDIR)/$(datadir)/libsamsung-ipc/$(CODE_COVERAGE_DIR)/ + find $(srcdir)/$(CODE_COVERAGE_DIR) -type f | \ + xargs -I src install -D src \ + $(DESTDIR)/$(datadir)/libsamsung-ipc/$(CODE_COVERAGE_DIR)/ + +clean-code-coverage: + rm -rf $(CODE_COVERAGE_DIR) + +endif # WANT_CODE_COVERAGE diff --git a/configure.ac b/configure.ac index f53a55d..8d84140 100644 --- a/configure.ac +++ b/configure.ac @@ -32,7 +32,9 @@ AC_SUBST(STRICT_CFLAGS) # python AC_SUBST(PYTHON3) AC_CHECK_PROG([PYTHON3], [python3], [python3]) - +#------------------------------------------------------------------------------ +# code coverage +AC_SUBST(CODE_COVERAGE) #------------------------------------------------------------------------------ # valgrind AC_SUBST(VALGRIND) @@ -63,6 +65,27 @@ AC_ARG_ENABLE(strict-cflags, [strict_cflags="no"]) AM_CONDITIONAL( [WANT_STRICT_CFLAGS], [test x"$strict_cflags" = x"yes"]) +#------------------------------------------------------------------------------ +# TODO: GCC has --enable-checking= for extensive runtime checks and one of the +# available values is valgrind, so it would be a good idea to convert to +# it for consistency across free software projects. +AC_ARG_ENABLE( + [code-coverage-tests], + [AS_HELP_STRING([--enable-code-coverage-tests], + [Build with --coverage, -O0 and use lcov from PATH during + tests (default=disabled)])], + [code_coverage_tests=$enableval], + [code_coverage="no"]) + +AM_CONDITIONAL( [WANT_CODE_COVERAGE], [test x"$code_coverage_tests" = x"yes"]) + +AS_IF([test x"code_coverage_tests" = x"yes"], + [AC_CHECK_PROG([CODE_COVERAGE], [lcov], [lcov]) + AS_IF( + [test x"$VALGRIND" = x""], + [AC_MSG_ERROR( + [code coverage tests are enabled but lcov was not found in PATH ($PATH)])])]) + #------------------------------------------------------------------------------ # TODO: GCC has --enable-checking= for extensive runtime checks and one of the # available values is valgrind, so it would be a good idea to convert to @@ -115,6 +138,12 @@ AS_IF([test x"$strict_cflags" = x"yes"], AS_IF([test x"$valgrind_tests" = x"yes"], [: ${CFLAGS="-ggdb3 -O0"}], [test x"$debug" = x"yes"], [: ${CFLAGS="-ggdb -O0"}], []) +AS_IF([test x"$code_coverage_tests" = x"yes"], + [: ${LDFLAGS=" --coverage"}], []) + +AS_IF([test x"$code_coverage_tests" = x"yes"], + [ CFLAGS+=" --coverage"], []) + AC_PROG_CC AM_PROG_CC_C_O AC_GNU_SOURCE @@ -136,6 +165,7 @@ echo echo "Compiler flags:" echo echo " CFLAGS..................: $CFLAGS $STRICT_CFLAGS" +echo " LDFLAGS.................: $LDFLAGS" echo echo echo "Interpreters paths:" @@ -153,6 +183,7 @@ echo " prefix..................: $prefix" echo echo " valgrind tests..........: $valgrind_tests" echo +echo " code coverage tests.....: $code_coverage_tests" echo "------------------------------------------------------------------------" echo echo "Now type 'make' to compile and 'make install' to install this package." diff --git a/scripts/manifest.scm b/scripts/manifest.scm index afe4ca5..dfc82c7 100644 --- a/scripts/manifest.scm +++ b/scripts/manifest.scm @@ -23,6 +23,7 @@ (use-modules (gnu packages autotools) (gnu packages base) + (gnu packages code) (gnu packages commencement) (gnu packages compression) (gnu packages curl) @@ -46,6 +47,7 @@ gzip gcc-toolchain grep + lcov libtool gnu-make openssl -- 2.39.1 _______________________________________________ Replicant mailing list [email protected] https://lists.osuosl.org/mailman/listinfo/replicant
