This commit enables coveralls.io to generate code coverage results by utilizing the gcov data generated during both the unit and functional test runs.
Note that the m4/ax_code_coverage.m4 file is provided by the autoconf team, and it has been used verbatim. The original file is available here: https://git.savannah.gnu.org/gitweb/?p=autoconf-archive.git;a=blob_plain;f=m4/ax_code_coverage.m4 Signed-off-by: Tom Hromatka <tom.hroma...@oracle.com> --- .gitignore | 3 + .travis.yml | 14 +++ bootstrap.sh | 8 +- configure.in | 42 ++++--- m4/ax_code_coverage.m4 | 264 +++++++++++++++++++++++++++++++++++++++++ src/Makefile.am | 8 +- src/tools/Makefile.am | 24 ++++ 7 files changed, 334 insertions(+), 29 deletions(-) create mode 100644 m4/ax_code_coverage.m4 diff --git a/.gitignore b/.gitignore index 7259d0c..6d7c3d7 100644 --- a/.gitignore +++ b/.gitignore @@ -2,6 +2,9 @@ patches/* *.o *.lo *.la +*.gcda +*.gcno +*.gcov stamp-* *.cache .deps/ diff --git a/.travis.yml b/.travis.yml index 4b24840..72e202b 100644 --- a/.travis.yml +++ b/.travis.yml @@ -36,13 +36,27 @@ compiler: addons: apt: packages: + - lcov - lxc - lxd +before_install: + # see https://github.com/eddyxu/cpp-coveralls + - pip install --user cpp-coveralls + # perform the build and fail immediately on error install: - ./bootstrap.sh + - make clean + # enable code coverage + - CFLAGS="$CFLAGS -g -O0" ./configure --sysconfdir=/etc --localstatedir=/var --enable-code-coverage - make script: - make check + +after_failure: + - cat tests/ftests/test-suite.log + +after_success: + - coveralls --exclude tests --exclude googletest --exclude samples --gcov-options '\-lp' diff --git a/bootstrap.sh b/bootstrap.sh index 2a1386a..0668f3d 100755 --- a/bootstrap.sh +++ b/bootstrap.sh @@ -16,11 +16,9 @@ cmake . make popd -aclocal -libtoolize -c -autoconf -autoheader -automake --foreign --add-missing --copy +test -d m4 || mkdir m4 +autoreconf -fi +rm -fr autom4te.cache CFLAGS="$CFLAGS -g -O0" ./configure --sysconfdir=/etc --localstatedir=/var diff --git a/configure.in b/configure.in index fafd245..67c1edb 100644 --- a/configure.in +++ b/configure.in @@ -12,10 +12,14 @@ # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. # -AC_PREREQ(2.61) +AC_PREREQ([2.69]) # In following section update all occurences of version, including soname -AC_INIT([libcgroup], 0.41) +AC_INIT([libcgroup],[0.41]) + +AC_CONFIG_AUX_DIR([build-aux]) +AC_CONFIG_MACRO_DIRS([m4]) + AM_INIT_AUTOMAKE([foreign dist-bzip2 subdir-objects]) m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])]) @@ -35,8 +39,7 @@ AC_CONFIG_SRCDIR([src]) AC_CONFIG_HEADER([config.h]) AC_ARG_ENABLE([bindings], - [AC_HELP_STRING([--enable-bindings], - [enable python bindings [default=no]])], + [AS_HELP_STRING([--enable-bindings],[enable python bindings [default=no]])], [ if test "x$enableval" = xno; then with_bindings=false @@ -49,8 +52,7 @@ AM_CONDITIONAL([WITH_BINDINGS], [test x$with_bindings = xtrue]) # Process command line options AC_ARG_ENABLE([tools], - [AC_HELP_STRING([--enable-tools], - [compile libcgroup tools [default=yes]])], + [AS_HELP_STRING([--enable-tools],[compile libcgroup tools [default=yes]])], [ if test "x$enableval" = xno; then with_tools=false @@ -62,8 +64,7 @@ AC_ARG_ENABLE([tools], AM_CONDITIONAL([WITH_TOOLS], [test x$with_tools = xtrue]) AC_ARG_ENABLE([pam], - [AC_HELP_STRING([--enable-pam], - [compile libcgroup PAM module [default=yes]])], + [AS_HELP_STRING([--enable-pam],[compile libcgroup PAM module [default=yes]])], [ if test "x$enableval" = xno; then with_pam=false @@ -75,8 +76,7 @@ AC_ARG_ENABLE([pam], AM_CONDITIONAL([WITH_PAM], [test x$with_pam = xtrue]) AC_ARG_ENABLE([daemon], - [AC_HELP_STRING([--enable-daemon], - [compile libcgroup daemon [default=yes]])], + [AS_HELP_STRING([--enable-daemon],[compile libcgroup daemon [default=yes]])], [ if test "x$enableval" = xno; then with_daemon=false @@ -88,8 +88,7 @@ AC_ARG_ENABLE([daemon], AM_CONDITIONAL([WITH_DAEMON], [test x$with_daemon = xtrue]) AC_ARG_ENABLE([initscript-install], - [AC_HELP_STRING([--enable-initscript-install], - [install init scripts [default=no]])], + [AS_HELP_STRING([--enable-initscript-install],[install init scripts [default=no]])], [ if test "x$enableval" = xno; then with_initscript_install=false @@ -102,9 +101,8 @@ AM_CONDITIONAL([WITH_INITSCRIPT_INSTALL], [test x$with_initscript_install = xtru socket_path="/var/run/cgred.socket" AC_ARG_ENABLE([cgred-socket], - [AC_HELP_STRING([--enable-cgred-socket=PATH], - specify location of cgrulesengd communication socket - (default=/var/run/cgred.socket))], + [AS_HELP_STRING([--enable-cgred-socket=PATH],[specify location of cgrulesengd communication socket + (default=/var/run/cgred.socket)])], [ if test "x$enableval" = xno -o "x$enableval" = xyes; then AC_MSG_ERROR([Provide valid path with --enable-cgred-socket option.]) @@ -116,9 +114,8 @@ AC_DEFINE_UNQUOTED([CGRULE_CGRED_SOCKET_PATH],"$socket_path", [Cgrulesengd socke pam_module_dir="$libdir/security" AC_ARG_ENABLE([pam-module-dir], - [AC_HELP_STRING([--enable-pam-module-dir=PATH], - specify location of libcgroup PAM module - (default=$libdir/security))], + [AS_HELP_STRING([--enable-pam-module-dir=PATH],[specify location of libcgroup PAM module + (default=$libdir/security)])], [ if test "x$enableval" = xno -o "x$enableval" = xyes; then AC_MSG_ERROR([Provide valid path with --enable-pam-module-dir option.]) @@ -129,9 +126,8 @@ AC_ARG_ENABLE([pam-module-dir], AC_SUBST([pamlibdir],"$pam_module_dir") AC_ARG_ENABLE([opaque-hierarchy], - [AC_HELP_STRING([--enable-opaque-hierarchy=NAME], - [specify name of a hierarchy which libcgroup should ignore, e.g. name=systemd] - (default=none))], + [AS_HELP_STRING([--enable-opaque-hierarchy=NAME],[specify name of a hierarchy which libcgroup should ignore, e.g. name=systemd + (default=none)])], [ if test "x$enableval" = xno -o "x$enableval" = xyes; then AC_MSG_ERROR([Provide name of a hierarchy.]) @@ -155,7 +151,7 @@ AM_PROG_LEX if test "$LEX" != flex; then AC_MSG_ERROR([This program cannot be built unless flex is installed.]) fi -AC_PROG_LIBTOOL +LT_INIT # Checks for header files. AC_HEADER_DIRENT @@ -196,6 +192,8 @@ if test x$with_pam = xtrue; then header files!])]) fi +AX_CODE_COVERAGE + AC_CONFIG_FILES([Makefile tests/Makefile tests/ftests/Makefile diff --git a/m4/ax_code_coverage.m4 b/m4/ax_code_coverage.m4 new file mode 100644 index 0000000..a257469 --- /dev/null +++ b/m4/ax_code_coverage.m4 @@ -0,0 +1,264 @@ +# =========================================================================== +# http://www.gnu.org/software/autoconf-archive/ax_code_coverage.html +# =========================================================================== +# +# SYNOPSIS +# +# AX_CODE_COVERAGE() +# +# DESCRIPTION +# +# Defines CODE_COVERAGE_CPPFLAGS, CODE_COVERAGE_CFLAGS, +# CODE_COVERAGE_CXXFLAGS and CODE_COVERAGE_LIBS which should be included +# in the CPPFLAGS, CFLAGS CXXFLAGS and LIBS/LIBADD variables of every +# build target (program or library) which should be built with code +# coverage support. Also defines CODE_COVERAGE_RULES which should be +# substituted in your Makefile; and $enable_code_coverage which can be +# used in subsequent configure output. CODE_COVERAGE_ENABLED is defined +# and substituted, and corresponds to the value of the +# --enable-code-coverage option, which defaults to being disabled. +# +# Test also for gcov program and create GCOV variable that could be +# substituted. +# +# Note that all optimisation flags in CFLAGS must be disabled when code +# coverage is enabled. +# +# Usage example: +# +# configure.ac: +# +# AX_CODE_COVERAGE +# +# Makefile.am: +# +# @CODE_COVERAGE_RULES@ +# my_program_LIBS = ... $(CODE_COVERAGE_LIBS) ... +# my_program_CPPFLAGS = ... $(CODE_COVERAGE_CPPFLAGS) ... +# my_program_CFLAGS = ... $(CODE_COVERAGE_CFLAGS) ... +# my_program_CXXFLAGS = ... $(CODE_COVERAGE_CXXFLAGS) ... +# +# This results in a "check-code-coverage" rule being added to any +# Makefile.am which includes "@CODE_COVERAGE_RULES@" (assuming the module +# has been configured with --enable-code-coverage). Running `make +# check-code-coverage` in that directory will run the module's test suite +# (`make check`) and build a code coverage report detailing the code which +# was touched, then print the URI for the report. +# +# In earlier versions of this macro, CODE_COVERAGE_LDFLAGS was defined +# instead of CODE_COVERAGE_LIBS. They are both still defined, but use of +# CODE_COVERAGE_LIBS is preferred for clarity; CODE_COVERAGE_LDFLAGS is +# deprecated. They have the same value. +# +# This code was derived from Makefile.decl in GLib, originally licenced +# under LGPLv2.1+. +# +# LICENSE +# +# Copyright (c) 2012, 2016 Philip Withnall +# Copyright (c) 2012 Xan Lopez +# Copyright (c) 2012 Christian Persch +# Copyright (c) 2012 Paolo Borelli +# Copyright (c) 2012 Dan Winship +# Copyright (c) 2015 Bastien ROUCARIES +# +# This library is free software; you can redistribute it and/or modify it +# under the terms of the GNU Lesser General Public License as published by +# the Free Software Foundation; either version 2.1 of the License, or (at +# your option) any later version. +# +# This library is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser +# General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +#serial 20 + +AC_DEFUN([AX_CODE_COVERAGE],[ + dnl Check for --enable-code-coverage + AC_REQUIRE([AC_PROG_SED]) + + # allow to override gcov location + AC_ARG_WITH([gcov], + [AS_HELP_STRING([--with-gcov[=GCOV]], [use given GCOV for coverage (GCOV=gcov).])], + [_AX_CODE_COVERAGE_GCOV_PROG_WITH=$with_gcov], + [_AX_CODE_COVERAGE_GCOV_PROG_WITH=gcov]) + + AC_MSG_CHECKING([whether to build with code coverage support]) + AC_ARG_ENABLE([code-coverage], + AS_HELP_STRING([--enable-code-coverage], + [Whether to enable code coverage support]),, + enable_code_coverage=no) + + AM_CONDITIONAL([CODE_COVERAGE_ENABLED], [test x$enable_code_coverage = xyes]) + AC_SUBST([CODE_COVERAGE_ENABLED], [$enable_code_coverage]) + AC_MSG_RESULT($enable_code_coverage) + + AS_IF([ test "$enable_code_coverage" = "yes" ], [ + # check for gcov + AC_CHECK_TOOL([GCOV], + [$_AX_CODE_COVERAGE_GCOV_PROG_WITH], + [:]) + AS_IF([test "X$GCOV" = "X:"], + [AC_MSG_ERROR([gcov is needed to do coverage])]) + AC_SUBST([GCOV]) + + dnl Check if gcc is being used + AS_IF([ test "$GCC" = "no" ], [ + AC_MSG_ERROR([not compiling with gcc, which is required for gcov code coverage]) + ]) + + AC_CHECK_PROG([LCOV], [lcov], [lcov]) + AC_CHECK_PROG([GENHTML], [genhtml], [genhtml]) + + AS_IF([ test -z "$LCOV" ], [ + AC_MSG_ERROR([To enable code coverage reporting you must have lcov installed]) + ]) + + AS_IF([ test -z "$GENHTML" ], [ + AC_MSG_ERROR([Could not find genhtml from the lcov package]) + ]) + + dnl Build the code coverage flags + dnl Define CODE_COVERAGE_LDFLAGS for backwards compatibility + CODE_COVERAGE_CPPFLAGS="-DNDEBUG" + CODE_COVERAGE_CFLAGS="-O0 -g -fprofile-arcs -ftest-coverage" + CODE_COVERAGE_CXXFLAGS="-O0 -g -fprofile-arcs -ftest-coverage" + CODE_COVERAGE_LIBS="-lgcov" + CODE_COVERAGE_LDFLAGS="$CODE_COVERAGE_LIBS" + + AC_SUBST([CODE_COVERAGE_CPPFLAGS]) + AC_SUBST([CODE_COVERAGE_CFLAGS]) + AC_SUBST([CODE_COVERAGE_CXXFLAGS]) + AC_SUBST([CODE_COVERAGE_LIBS]) + AC_SUBST([CODE_COVERAGE_LDFLAGS]) + + [CODE_COVERAGE_RULES_CHECK=' + -$(A''M_V_at)$(MAKE) $(AM_MAKEFLAGS) -k check + $(A''M_V_at)$(MAKE) $(AM_MAKEFLAGS) code-coverage-capture +'] + [CODE_COVERAGE_RULES_CAPTURE=' + $(code_coverage_v_lcov_cap)$(LCOV) $(code_coverage_quiet) $(addprefix --directory ,$(CODE_COVERAGE_DIRECTORY)) --capture --output-file "$(CODE_COVERAGE_OUTPUT_FILE).tmp" --test-name "$(call code_coverage_sanitize,$(PACKAGE_NAME)-$(PACKAGE_VERSION))" --no-checksum --compat-libtool $(CODE_COVERAGE_LCOV_SHOPTS) $(CODE_COVERAGE_LCOV_OPTIONS) + $(code_coverage_v_lcov_ign)$(LCOV) $(code_coverage_quiet) $(addprefix --directory ,$(CODE_COVERAGE_DIRECTORY)) --remove "$(CODE_COVERAGE_OUTPUT_FILE).tmp" "/tmp/*" $(CODE_COVERAGE_IGNORE_PATTERN) --output-file "$(CODE_COVERAGE_OUTPUT_FILE)" $(CODE_COVERAGE_LCOV_SHOPTS) $(CODE_COVERAGE_LCOV_RMOPTS) + -@rm -f $(CODE_COVERAGE_OUTPUT_FILE).tmp + $(code_coverage_v_genhtml)LANG=C $(GENHTML) $(code_coverage_quiet) $(addprefix --prefix ,$(CODE_COVERAGE_DIRECTORY)) --output-directory "$(CODE_COVERAGE_OUTPUT_DIRECTORY)" --title "$(PACKAGE_NAME)-$(PACKAGE_VERSION) Code Coverage" --legend --show-details "$(CODE_COVERAGE_OUTPUT_FILE)" $(CODE_COVERAGE_GENHTML_OPTIONS) + @echo "file://$(abs_builddir)/$(CODE_COVERAGE_OUTPUT_DIRECTORY)/index.html" +'] + [CODE_COVERAGE_RULES_CLEAN=' +clean: code-coverage-clean +distclean: code-coverage-clean +code-coverage-clean: + -$(LCOV) --directory $(top_builddir) -z + -rm -rf $(CODE_COVERAGE_OUTPUT_FILE) $(CODE_COVERAGE_OUTPUT_FILE).tmp $(CODE_COVERAGE_OUTPUT_DIRECTORY) + -find . \( -name "*.gcda" -o -name "*.gcno" -o -name "*.gcov" \) -delete +'] + ], [ + [CODE_COVERAGE_RULES_CHECK=' + @echo "Need to reconfigure with --enable-code-coverage" +'] + CODE_COVERAGE_RULES_CAPTURE="$CODE_COVERAGE_RULES_CHECK" + CODE_COVERAGE_RULES_CLEAN='' + ]) + +[CODE_COVERAGE_RULES=' +# Code coverage +# +# Optional: +# - CODE_COVERAGE_DIRECTORY: Top-level directory for code coverage reporting. +# Multiple directories may be specified, separated by whitespace. +# (Default: $(top_builddir)) +# - CODE_COVERAGE_OUTPUT_FILE: Filename and path for the .info file generated +# by lcov for code coverage. (Default: +# $(PACKAGE_NAME)-$(PACKAGE_VERSION)-coverage.info) +# - CODE_COVERAGE_OUTPUT_DIRECTORY: Directory for generated code coverage +# reports to be created. (Default: +# $(PACKAGE_NAME)-$(PACKAGE_VERSION)-coverage) +# - CODE_COVERAGE_BRANCH_COVERAGE: Set to 1 to enforce branch coverage, +# set to 0 to disable it and leave empty to stay with the default. +# (Default: empty) +# - CODE_COVERAGE_LCOV_SHOPTS_DEFAULT: Extra options shared between both lcov +# instances. (Default: based on $CODE_COVERAGE_BRANCH_COVERAGE) +# - CODE_COVERAGE_LCOV_SHOPTS: Extra options to shared between both lcov +# instances. (Default: $CODE_COVERAGE_LCOV_SHOPTS_DEFAULT) +# - CODE_COVERAGE_LCOV_OPTIONS_GCOVPATH: --gcov-tool pathtogcov +# - CODE_COVERAGE_LCOV_OPTIONS_DEFAULT: Extra options to pass to the +# collecting lcov instance. (Default: $CODE_COVERAGE_LCOV_OPTIONS_GCOVPATH) +# - CODE_COVERAGE_LCOV_OPTIONS: Extra options to pass to the collecting lcov +# instance. (Default: $CODE_COVERAGE_LCOV_OPTIONS_DEFAULT) +# - CODE_COVERAGE_LCOV_RMOPTS_DEFAULT: Extra options to pass to the filtering +# lcov instance. (Default: empty) +# - CODE_COVERAGE_LCOV_RMOPTS: Extra options to pass to the filtering lcov +# instance. (Default: $CODE_COVERAGE_LCOV_RMOPTS_DEFAULT) +# - CODE_COVERAGE_GENHTML_OPTIONS_DEFAULT: Extra options to pass to the +# genhtml instance. (Default: based on $CODE_COVERAGE_BRANCH_COVERAGE) +# - CODE_COVERAGE_GENHTML_OPTIONS: Extra options to pass to the genhtml +# instance. (Default: $CODE_COVERAGE_GENHTML_OPTIONS_DEFAULT) +# - CODE_COVERAGE_IGNORE_PATTERN: Extra glob pattern of files to ignore +# +# The generated report will be titled using the $(PACKAGE_NAME) and +# $(PACKAGE_VERSION). In order to add the current git hash to the title, +# use the git-version-gen script, available online. + +# Optional variables +CODE_COVERAGE_DIRECTORY ?= $(top_builddir) +CODE_COVERAGE_OUTPUT_FILE ?= $(PACKAGE_NAME)-$(PACKAGE_VERSION)-coverage.info +CODE_COVERAGE_OUTPUT_DIRECTORY ?= $(PACKAGE_NAME)-$(PACKAGE_VERSION)-coverage +CODE_COVERAGE_BRANCH_COVERAGE ?= +CODE_COVERAGE_LCOV_SHOPTS_DEFAULT ?= $(if $(CODE_COVERAGE_BRANCH_COVERAGE),\ +--rc lcov_branch_coverage=$(CODE_COVERAGE_BRANCH_COVERAGE)) +CODE_COVERAGE_LCOV_SHOPTS ?= $(CODE_COVERAGE_LCOV_SHOPTS_DEFAULT) +CODE_COVERAGE_LCOV_OPTIONS_GCOVPATH ?= --gcov-tool "$(GCOV)" +CODE_COVERAGE_LCOV_OPTIONS_DEFAULT ?= $(CODE_COVERAGE_LCOV_OPTIONS_GCOVPATH) +CODE_COVERAGE_LCOV_OPTIONS ?= $(CODE_COVERAGE_LCOV_OPTIONS_DEFAULT) +CODE_COVERAGE_LCOV_RMOPTS_DEFAULT ?= +CODE_COVERAGE_LCOV_RMOPTS ?= $(CODE_COVERAGE_LCOV_RMOPTS_DEFAULT) +CODE_COVERAGE_GENHTML_OPTIONS_DEFAULT ?=\ +$(if $(CODE_COVERAGE_BRANCH_COVERAGE),\ +--rc genhtml_branch_coverage=$(CODE_COVERAGE_BRANCH_COVERAGE)) +CODE_COVERAGE_GENHTML_OPTIONS ?= $(CODE_COVERAGE_GENHTML_OPTIONS_DEFAULTS) +CODE_COVERAGE_IGNORE_PATTERN ?= + +code_coverage_v_lcov_cap = $(code_coverage_v_lcov_cap_$(V)) +code_coverage_v_lcov_cap_ = $(code_coverage_v_lcov_cap_$(AM_DEFAULT_VERBOSITY)) +code_coverage_v_lcov_cap_0 = @echo " LCOV --capture"\ + $(CODE_COVERAGE_OUTPUT_FILE); +code_coverage_v_lcov_ign = $(code_coverage_v_lcov_ign_$(V)) +code_coverage_v_lcov_ign_ = $(code_coverage_v_lcov_ign_$(AM_DEFAULT_VERBOSITY)) +code_coverage_v_lcov_ign_0 = @echo " LCOV --remove /tmp/*"\ + $(CODE_COVERAGE_IGNORE_PATTERN); +code_coverage_v_genhtml = $(code_coverage_v_genhtml_$(V)) +code_coverage_v_genhtml_ = $(code_coverage_v_genhtml_$(AM_DEFAULT_VERBOSITY)) +code_coverage_v_genhtml_0 = @echo " GEN " $(CODE_COVERAGE_OUTPUT_DIRECTORY); +code_coverage_quiet = $(code_coverage_quiet_$(V)) +code_coverage_quiet_ = $(code_coverage_quiet_$(AM_DEFAULT_VERBOSITY)) +code_coverage_quiet_0 = --quiet + +# sanitizes the test-name: replaces with underscores: dashes and dots +code_coverage_sanitize = $(subst -,_,$(subst .,_,$(1))) + +# Use recursive makes in order to ignore errors during check +check-code-coverage:'"$CODE_COVERAGE_RULES_CHECK"' + +# Capture code coverage data +code-coverage-capture: code-coverage-capture-hook'"$CODE_COVERAGE_RULES_CAPTURE"' + +# Hook rule executed before code-coverage-capture, overridable by the user +code-coverage-capture-hook: + +'"$CODE_COVERAGE_RULES_CLEAN"' + +GITIGNOREFILES ?= +GITIGNOREFILES += $(CODE_COVERAGE_OUTPUT_FILE) $(CODE_COVERAGE_OUTPUT_DIRECTORY) + +A''M_DISTCHECK_CONFIGURE_FLAGS ?= +A''M_DISTCHECK_CONFIGURE_FLAGS += --disable-code-coverage + +.PHONY: check-code-coverage code-coverage-capture code-coverage-capture-hook code-coverage-clean +'] + + AC_SUBST([CODE_COVERAGE_RULES]) + m4_ifdef([_AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE([CODE_COVERAGE_RULES])]) +]) diff --git a/src/Makefile.am b/src/Makefile.am index 52d0e00..4a7b974 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -1,3 +1,5 @@ +@CODE_COVERAGE_RULES@ + if WITH_BINDINGS BINDINGS_SUBDIR = bindings endif @@ -12,11 +14,13 @@ CLEANFILES = lex.c parse.c parse.h INCLUDES = -I$(top_srcdir)/include lib_LTLIBRARIES = libcgroup.la libcgroupfortesting.la libcgroup_la_SOURCES = parse.h parse.y lex.l api.c config.c libcgroup-internal.h libcgroup.map wrapper.c log.c -libcgroup_la_LIBADD = -lpthread +libcgroup_la_LIBADD = -lpthread $(CODE_COVERAGE_LIBS) +libcgroup_la_CFLAGS = $(CODE_COVERAGE_CFLAGS) libcgroup_la_LDFLAGS = -Wl,--version-script,$(srcdir)/libcgroup.map \ -version-number $(LIBRARY_VERSION_MAJOR):$(LIBRARY_VERSION_MINOR):$(LIBRARY_VERSION_RELEASE) libcgroupfortesting_la_SOURCES = $(libcgroup_la_SOURCES) -libcgroupfortesting_la_LIBADD = -lpthread +libcgroupfortesting_la_LIBADD = -lpthread $(CODE_COVERAGE_LIBS) +libcgroupfortesting_la_CFLAGS = $(CODE_COVERAGE_CFLAGS) libcgroupfortesting_la_LDFLAGS = -Wl,--version-script,$(top_srcdir)/tests/gunit/libcgroup_unittest.map \ -version-number $(LIBRARY_VERSION_MAJOR):$(LIBRARY_VERSION_MINOR):$(LIBRARY_VERSION_RELEASE) diff --git a/src/tools/Makefile.am b/src/tools/Makefile.am index 4cb02ff..2f3534c 100644 --- a/src/tools/Makefile.am +++ b/src/tools/Makefile.am @@ -1,3 +1,5 @@ +@CODE_COVERAGE_RULES@ + INCLUDES = -I$(top_srcdir)/src -I$(top_srcdir)/include LDADD = $(top_builddir)/src/.libs/libcgroup.la @@ -9,26 +11,48 @@ bin_PROGRAMS = cgexec cgclassify cgcreate cgset cgget cgdelete lssubsys\ sbin_PROGRAMS = cgconfigparser cgclear cgexec_SOURCES = cgexec.c tools-common.c tools-common.h +cgexec_LIBS = $(CODE_COVERAGE_LIBS) +cgexec_CFLAGS = $(CODE_COVERAGE_CFLAGS) cgclassify_SOURCES = cgclassify.c tools-common.c tools-common.h +cgclassify_LIBS = $(CODE_COVERAGE_LIBS) +cgclassify_CFLAGS = $(CODE_COVERAGE_CFLAGS) cgcreate_SOURCES = cgcreate.c tools-common.c tools-common.h +cgcreate_LIBS = $(CODE_COVERAGE_LIBS) +cgcreate_CFLAGS = $(CODE_COVERAGE_CFLAGS) cgset_SOURCES = cgset.c tools-common.c tools-common.h +cgset_LIBS = $(CODE_COVERAGE_LIBS) +cgset_CFLAGS = $(CODE_COVERAGE_CFLAGS) cgget_SOURCES = cgget.c tools-common.c tools-common.h +cgget_LIBS = $(CODE_COVERAGE_LIBS) +cgget_CFLAGS = $(CODE_COVERAGE_CFLAGS) cgconfigparser_SOURCES = cgconfig.c tools-common.c tools-common.h +cgconfigparser_LIBS = $(CODE_COVERAGE_LIBS) +cgconfigparser_CFLAGS = $(CODE_COVERAGE_CFLAGS) cgclear_SOURCES = cgclear.c tools-common.c tools-common.h +cgclear_LIBS = $(CODE_COVERAGE_LIBS) +cgclear_CFLAGS = $(CODE_COVERAGE_CFLAGS) cgdelete_SOURCES = cgdelete.c tools-common.c tools-common.h +cgdelete_LIBS = $(CODE_COVERAGE_LIBS) +cgdelete_CFLAGS = $(CODE_COVERAGE_CFLAGS) lssubsys_SOURCES = lssubsys.c +lssubsys_LIBS = $(CODE_COVERAGE_LIBS) +lssubsys_CFLAGS = $(CODE_COVERAGE_CFLAGS) lscgroup_SOURCES = tools-common.c lscgroup.c +lscgroup_LIBS = $(CODE_COVERAGE_LIBS) +lscgroup_CFLAGS = $(CODE_COVERAGE_CFLAGS) cgsnapshot_SOURCES = cgsnapshot.c +cgsnapshot_LIBS = $(CODE_COVERAGE_LIBS) +cgsnapshot_CFLAGS = $(CODE_COVERAGE_CFLAGS) install-exec-hook: chmod u+s $(DESTDIR)$(bindir)/cgexec -- 2.21.0 _______________________________________________ Libcg-devel mailing list Libcg-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/libcg-devel