Enable code coverage
To enable: './configure --enable-code-coverage'
To build and generate report: 'make check-code-coverage'
Tested:
Verified that 'make check-code-coverage' generates lcov report.
Signed-off-by: Priyanga <priyram1@in.ibm.com>
Change-Id: I36a9b501c441ef25595808ce77fc1ca36c1ac323
diff --git a/.lcovrc b/.lcovrc
new file mode 100644
index 0000000..da753fe
--- /dev/null
+++ b/.lcovrc
@@ -0,0 +1,4 @@
+geninfo_gcov_all_blocks = 1
+lcov_function_coverage = 1
+lcov_branch_coverage = 0
+
diff --git a/Makefile.am b/Makefile.am
index 406e1bc..0df10bb 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -1 +1,30 @@
+# Ignore system headers
+CODE_COVERAGE_IGNORE_PATTERN = '/include/*' '/usr/include/*' '$(includedir)/*'
+export CODE_COVERAGE_IGNORE_PATTERN
+CODE_COVERAGE_LCOV_SHOPTS = $(CODE_COVERAGE_LCOV_SHOPTS_DEFAULT)
+# Use our configuration file for lcov
+CODE_COVERAGE_LCOV_SHOPTS += --config-file $(abs_srcdir)/.lcovrc
+export CODE_COVERAGE_LCOV_SHOPTS
+CODE_COVERAGE_LCOV_OPTIONS = $(CODE_COVERAGE_LCOV_OPTIONS_DEFAULT)
+# Use our configuration file for lcov
+CODE_COVERAGE_LCOV_OPTIONS += --config-file $(abs_srcdir)/.lcovrc
+export CODE_COVERAGE_LCOV_OPTIONS
+CODE_COVERAGE_LCOV_RMOPTS = $(CODE_COVERAGE_LCOV_RMOPTS_DEFAULT)
+# Use our configuration file for lcov
+CODE_COVERAGE_LCOV_RMOPTS += --config-file $(abs_srcdir)/.lcovrc
+export CODE_COVERAGE_LCOV_RMOPTS
+CODE_COVERAGE_GENHTML_OPTIONS = $(CODE_COVERAGE_GENHTML_OPTIONS_DEFAULT)
+# Use our configuration file for genhtml
+CODE_COVERAGE_GENHTML_OPTIONS += --config-file $(abs_srcdir)/.lcovrc
+# Don't generate the absolute path for each file in the HTML output
+CODE_COVERAGE_GENHTML_OPTIONS += --prefix $(abs_srcdir) --prefix $(abs_builddir)
+export CODE_COVERAGE_GENHTML_OPTIONS
+if AUTOCONF_CODE_COVERAGE_2019_01_06
+include $(top_srcdir)/aminclude_static.am
+clean-local: code-coverage-clean
+distclean-local: code-coverage-dist-clean
+else
+@CODE_COVERAGE_RULES@
+endif
+
SUBDIRS = libpldm libpldmresponder test
diff --git a/configure.ac b/configure.ac
index b192d79..e7b9f44 100644
--- a/configure.ac
+++ b/configure.ac
@@ -7,6 +7,19 @@
AM_INIT_AUTOMAKE([subdir-objects -Wall -Werror foreign dist-xz])
AM_SILENT_RULES([yes])
+# Make sure the default CFLAGS of `-O2 -g` don't override CODE_COVERAGE_CFLAGS
+# It is important that this comes before AC_PROG_C{C,XX}, as we are attempting
+# to stop them from populating default CFLAGS and CXXFLAGS.
+#AS_IF([test "x$enable_tests" = "xno"], [enable_code_coverage=no])
+AS_IF([test "x$enable_code_coverage" != "xno"], [
+ AS_IF([test "x${CXXFLAGS+set}" != "xset"], [
+ AC_SUBST(CXXFLAGS, [""])
+ ])
+ AS_IF([test "x${CFLAGS+set}" != "xset"], [
+ AC_SUBST(CFLAGS, [""])
+ ])
+])
+
# Checks for programs.
AC_PROG_CXX
AC_PROG_CC
@@ -20,6 +33,14 @@
# For linking
LT_INIT
+# Code coverage
+AX_CODE_COVERAGE
+AM_EXTRA_RECURSIVE_TARGETS([check-code-coverage])
+m4_ifdef([_AX_CODE_COVERAGE_RULES],
+ [AM_CONDITIONAL(AUTOCONF_CODE_COVERAGE_2019_01_06, [true])],
+ [AM_CONDITIONAL(AUTOCONF_CODE_COVERAGE_2019_01_06, [false])])
+AX_ADD_AM_MACRO_STATIC([])
+
# Check/set gtest specific functions.
AX_PTHREAD([GTEST_CPPFLAGS="-DGTEST_HAS_PTHREAD=1"],[GTEST_CPPFLAGS="-DGTEST_HAS_PTHREAD=0"])
AC_SUBST(GTEST_CPPFLAGS)
diff --git a/libpldm/Makefile.am b/libpldm/Makefile.am
index 3ff405b..5b95c39 100644
--- a/libpldm/Makefile.am
+++ b/libpldm/Makefile.am
@@ -5,8 +5,8 @@
libpldmdir = ${libdir}
libpldm_la_SOURCES = \
base.c
-libpldm_la_LDFLAGS = \
- -version-info 1:0:0 -shared
-
+libpldm_la_LDFLAGS = -version-info 1:0:0 -shared
+libpldm_la_CFLAGS = $(CODE_COVERAGE_CFLAGS)
+libpldm_la_LIBADD = $(CODE_COVERAGE_LIBS)
pkgconfiglibdir = ${libdir}/pkgconfig
pkgconfiglib_DATA = libpldm.pc
diff --git a/libpldmresponder/Makefile.am b/libpldmresponder/Makefile.am
index f308394..a9b1507 100644
--- a/libpldmresponder/Makefile.am
+++ b/libpldmresponder/Makefile.am
@@ -3,6 +3,10 @@
libpldmresponder_la_SOURCES = \
base.cpp
libpldmresponder_la_LIBADD = \
- ../libpldm/libpldm.la
+ ../libpldm/libpldm.la \
+ $(CODE_COVERAGE_LIBS)
libpldmresponder_la_LDFLAGS = \
-version-info 1:0:0 -shared
+libpldmresponder_la_CXXFLAGS = $(CODE_COVERAGE_CXXFLAGS)
+libpldmresponder_la_CPPFLAGS = $(CODE_COVERAGE_CPPFLAGS)
+
diff --git a/test/Makefile.am b/test/Makefile.am
index 82101f7..35a7395 100644
--- a/test/Makefile.am
+++ b/test/Makefile.am
@@ -1,4 +1,4 @@
-AM_CPPFLAGS = -I$(top_srcdir)
+AM_CPPFLAGS = -I$(top_srcdir) $(CODE_COVERAGE_CPPFLAGS)
TESTS = $(check_PROGRAMS)
@@ -12,7 +12,8 @@
$(AM_CPPFLAGS)
test_cxxflags = \
- $(PTHREAD_CFLAGS)
+ $(PTHREAD_CFLAGS) \
+ $(CODE_COVERAGE_CXXFLAGS)
test_ldflags = \
-lgtest_main \
@@ -23,13 +24,14 @@
libpldm_base_test_CPPFLAGS = $(test_cppflags)
libpldm_base_test_CXXFLAGS = $(test_cxxflags)
libpldm_base_test_LDFLAGS = $(test_ldflags)
-libpldm_base_test_LDADD = $(top_builddir)/libpldm/base.o
+libpldm_base_test_LDADD = $(top_builddir)/libpldm/libpldm_la-base.o $(CODE_COVERAGE_LIBS)
libpldm_base_test_SOURCES = libpldm_base_test.cpp
libpldmresponder_base_test_CPPFLAGS = $(test_cppflags)
libpldmresponder_base_test_CXXFLAGS = $(test_cxxflags)
libpldmresponder_base_test_LDFLAGS = $(test_ldflags)
libpldmresponder_base_test_LDADD = \
- $(top_builddir)/libpldm/base.o \
- $(top_builddir)/libpldmresponder/base.o
+ $(top_builddir)/libpldm/libpldm_la-base.o \
+ $(top_builddir)/libpldmresponder/libpldmresponder_la-base.o $(CODE_COVERAGE_LIBS)
+
libpldmresponder_base_test_SOURCES = libpldmresponder_base_test.cpp