<p>neels <strong>submitted</strong> this change.</p><p><a href="https://gerrit.osmocom.org/c/libosmocore/+/13496">View Change</a></p><div style="white-space:pre-wrap">Approvals:
  laforge: Looks good to me, but someone else must approve
  fixeria: Looks good to me, but someone else must approve
  osmith: Looks good to me, approved
  Jenkins Builder: Verified

</div><pre style="font-family: monospace,monospace; white-space: pre-wrap;">Add code coverage support<br><br>The coverage report shows what code is covered by tests and what is not<br>and the ratio could be tracked over time. These reports will allow us<br>to identify code that is not being tested and improve the test suites.<br><br>To enable the reports configure with --enable-code-coverage and execute<br>"make check-code-coverage". The HTML report will be generated in a<br>subdirectory with name libosmocore-$(PACKAGE_VERSION)-coverage/index.html<br><br>The report is generated using gcov, lcov and lcov_cobertura tools and<br>the OSMO_AC_CODE_COVERAGE macro. The osmo_ax_code_coverage.m4 is a copy of<br>ax_code_coverage.m4 taken from autoconf-archive v2018.03.13. It was<br>copied to avoid the additional external dependency and renamed to avoid<br>overwriting it in case autoconf-archive is already installed as we are<br>going to install it in $(datadir)/aclocal in order to be reused in other<br>osmocom's projects.<br><br>Closes: OS#1987<br>Change-Id: I6f4ffb91bd7f3dd070aa09dd16d5ad1faf130a4c<br>---<br>M .gitignore<br>M Makefile.am<br>M configure.ac<br>M debian/libosmocore-dev.install<br>A m4/osmo_ac_code_coverage.m4<br>A m4/osmo_ax_code_coverage.m4<br>6 files changed, 330 insertions(+), 0 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/.gitignore b/.gitignore</span><br><span>index 51c443f..5224233 100644</span><br><span>--- a/.gitignore</span><br><span>+++ b/.gitignore</span><br><span>@@ -95,3 +95,7 @@</span><br><span> # vi files</span><br><span> *.sw?</span><br><span> /tests/libsercomstub.a</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+# code coverage reports</span><br><span style="color: hsl(120, 100%, 40%);">+libosmocore-*-coverage*</span><br><span style="color: hsl(120, 100%, 40%);">+coverage-cobertura.xml</span><br><span>diff --git a/Makefile.am b/Makefile.am</span><br><span>index 2e73f72..7b6ba0a 100644</span><br><span>--- a/Makefile.am</span><br><span>+++ b/Makefile.am</span><br><span>@@ -7,7 +7,12 @@</span><br><span> pkgconfig_DATA = libosmocore.pc libosmocodec.pc libosmovty.pc libosmogsm.pc \</span><br><span>              libosmogb.pc libosmoctrl.pc libosmocoding.pc libosmosim.pc</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+aclocaldir = $(datadir)/aclocal</span><br><span style="color: hsl(120, 100%, 40%);">+dist_aclocal_DATA = m4/osmo_ac_code_coverage.m4 \</span><br><span style="color: hsl(120, 100%, 40%);">+                                   m4/osmo_ax_code_coverage.m4</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> @RELMAKE@</span><br><span style="color: hsl(120, 100%, 40%);">+@CODE_COVERAGE_RULES@</span><br><span> </span><br><span> relengdir = $(includedir)</span><br><span> releng_DATA = osmo-release.mk</span><br><span>diff --git a/configure.ac b/configure.ac</span><br><span>index 6c54e66..060d081 100644</span><br><span>--- a/configure.ac</span><br><span>+++ b/configure.ac</span><br><span>@@ -357,6 +357,8 @@</span><br><span>       AM_CONDITIONAL(HAVE_SSE4_1, false)</span><br><span> fi</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+OSMO_AC_CODE_COVERAGE</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> dnl Check if the compiler supports specified GCC's built-in function</span><br><span> AC_DEFUN([CHECK_BUILTIN_SUPPORT], [</span><br><span>   AC_CACHE_CHECK(</span><br><span>diff --git a/debian/libosmocore-dev.install b/debian/libosmocore-dev.install</span><br><span>index 944a7bf..4a7e0af 100644</span><br><span>--- a/debian/libosmocore-dev.install</span><br><span>+++ b/debian/libosmocore-dev.install</span><br><span>@@ -4,3 +4,4 @@</span><br><span> usr/lib/*/lib*.la</span><br><span> usr/lib/*/pkgconfig/*</span><br><span> usr/bin/osmo-release.sh</span><br><span style="color: hsl(120, 100%, 40%);">+usr/share/aclocal/osmo*.m4</span><br><span>diff --git a/m4/osmo_ac_code_coverage.m4 b/m4/osmo_ac_code_coverage.m4</span><br><span>new file mode 100644</span><br><span>index 0000000..7921db5</span><br><span>--- /dev/null</span><br><span>+++ b/m4/osmo_ac_code_coverage.m4</span><br><span>@@ -0,0 +1,51 @@</span><br><span style="color: hsl(120, 100%, 40%);">+AC_DEFUN([OSMO_AC_CODE_COVERAGE],[</span><br><span style="color: hsl(120, 100%, 40%);">+ dnl Check for --enable-code-coverage</span><br><span style="color: hsl(120, 100%, 40%);">+  AC_REQUIRE([OSMO_AX_CODE_COVERAGE])</span><br><span style="color: hsl(120, 100%, 40%);">+   AC_REQUIRE([AX_CHECK_COMPILE_FLAG])</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ AS_IF([ test "x$enable_code_coverage" = "xyes" ], [</span><br><span style="color: hsl(120, 100%, 40%);">+               # Check whether --coverage flags is supported and add it to CFLAGS</span><br><span style="color: hsl(120, 100%, 40%);">+            # When it is not supported add CODE_COVERAGE_CFLAGS to CFLAGS instead</span><br><span style="color: hsl(120, 100%, 40%);">+         AX_CHECK_COMPILE_FLAG([--coverage],</span><br><span style="color: hsl(120, 100%, 40%);">+                   [CFLAGS="$CFLAGS -O0 -g --coverage"],</span><br><span style="color: hsl(120, 100%, 40%);">+                       [CFLAGS="$CFLAGS $CODE_COVERAGE_CFLAGS"])</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+         # Add both the absolute source and build directories to the coverage directories.</span><br><span style="color: hsl(120, 100%, 40%);">+             CODE_COVERAGE_DIRECTORY='$(abspath $(abs_top_srcdir)) $(abspath $(abs_top_builddir))'</span><br><span style="color: hsl(120, 100%, 40%);">+         AC_SUBST(CODE_COVERAGE_DIRECTORY)</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+           # Enable branch coverage by default</span><br><span style="color: hsl(120, 100%, 40%);">+           CODE_COVERAGE_BRANCH_COVERAGE='1'</span><br><span style="color: hsl(120, 100%, 40%);">+             AC_SUBST(CODE_COVERAGE_BRANCH_COVERAGE)</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+             # Exclude external files by default</span><br><span style="color: hsl(120, 100%, 40%);">+           CODE_COVERAGE_LCOV_OPTIONS='$(CODE_COVERAGE_LCOV_OPTIONS_DEFAULT) --no-external'</span><br><span style="color: hsl(120, 100%, 40%);">+              AC_SUBST(CODE_COVERAGE_LCOV_OPTIONS)</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+                # Exclude tests sources from the coverage report</span><br><span style="color: hsl(120, 100%, 40%);">+              CODE_COVERAGE_IGNORE_PATTERN='"$(abspath $(abs_top_srcdir))/tests/*"'</span><br><span style="color: hsl(120, 100%, 40%);">+               AC_SUBST(CODE_COVERAGE_IGNORE_PATTERN)</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+              # lcov_cobertura is needed only when you want to export the coverage report in</span><br><span style="color: hsl(120, 100%, 40%);">+                # the Cobertura's XML format supported by Jenkin's Cobertura plugin</span><br><span style="color: hsl(120, 100%, 40%);">+           AC_CHECK_PROG([LCOV_COBERTURA], [lcov_cobertura], [lcov_cobertura])</span><br><span style="color: hsl(120, 100%, 40%);">+           AS_IF([test "x$LCOV_COBERTURA" != "xno"], [m4_pattern_allow([AM_V_GEN]) CODE_COVERAGE_RULES+='</span><br><span style="color: hsl(120, 100%, 40%);">+coverage-cobertura.xml: $(CODE_COVERAGE_OUTPUT_FILE)</span><br><span style="color: hsl(120, 100%, 40%);">+  $(AM_V_GEN)$(LCOV_COBERTURA) -b $(top_srcdir) -o $$@@ $(CODE_COVERAGE_OUTPUT_FILE)</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+.PHONY: code-coverage-cobertura</span><br><span style="color: hsl(120, 100%, 40%);">+code-coverage-cobertura: code-coverage-capture coverage-cobertura.xml</span><br><span style="color: hsl(120, 100%, 40%);">+'</span><br><span style="color: hsl(120, 100%, 40%);">+           ], [CODE_COVERAGE_RULES+='</span><br><span style="color: hsl(120, 100%, 40%);">+.PHONY: code-coverage-cobertura</span><br><span style="color: hsl(120, 100%, 40%);">+code-coverage-cobertura:</span><br><span style="color: hsl(120, 100%, 40%);">+     @echo "Need to install lcov_cobertura"</span><br><span style="color: hsl(120, 100%, 40%);">+'</span><br><span style="color: hsl(120, 100%, 40%);">+               ])</span><br><span style="color: hsl(120, 100%, 40%);">+    ], [CODE_COVERAGE_RULES+='</span><br><span style="color: hsl(120, 100%, 40%);">+.PHONY: code-coverage-cobertura</span><br><span style="color: hsl(120, 100%, 40%);">+code-coverage-cobertura:</span><br><span style="color: hsl(120, 100%, 40%);">+     @echo "Need to and reconfigure with --enable-code-coverage"</span><br><span style="color: hsl(120, 100%, 40%);">+'</span><br><span style="color: hsl(120, 100%, 40%);">+  ])</span><br><span style="color: hsl(120, 100%, 40%);">+])</span><br><span>diff --git a/m4/osmo_ax_code_coverage.m4 b/m4/osmo_ax_code_coverage.m4</span><br><span>new file mode 100644</span><br><span>index 0000000..23cebb0</span><br><span>--- /dev/null</span><br><span>+++ b/m4/osmo_ax_code_coverage.m4</span><br><span>@@ -0,0 +1,267 @@</span><br><span style="color: hsl(120, 100%, 40%);">+#</span><br><span style="color: hsl(120, 100%, 40%);">+#  Renamed version of AX_CODE_COVERAGE macro from autoconf-archive v2018.03.13</span><br><span style="color: hsl(120, 100%, 40%);">+#</span><br><span style="color: hsl(120, 100%, 40%);">+# ===========================================================================</span><br><span style="color: hsl(120, 100%, 40%);">+#     https://www.gnu.org/software/autoconf-archive/ax_code_coverage.html</span><br><span style="color: hsl(120, 100%, 40%);">+# ===========================================================================</span><br><span style="color: hsl(120, 100%, 40%);">+#</span><br><span style="color: hsl(120, 100%, 40%);">+# SYNOPSIS</span><br><span style="color: hsl(120, 100%, 40%);">+#</span><br><span style="color: hsl(120, 100%, 40%);">+#   OSMO_AX_CODE_COVERAGE()</span><br><span style="color: hsl(120, 100%, 40%);">+#</span><br><span style="color: hsl(120, 100%, 40%);">+# DESCRIPTION</span><br><span style="color: hsl(120, 100%, 40%);">+#</span><br><span style="color: hsl(120, 100%, 40%);">+#   Defines CODE_COVERAGE_CPPFLAGS, CODE_COVERAGE_CFLAGS,</span><br><span style="color: hsl(120, 100%, 40%);">+#   CODE_COVERAGE_CXXFLAGS and CODE_COVERAGE_LIBS which should be included</span><br><span style="color: hsl(120, 100%, 40%);">+#   in the CPPFLAGS, CFLAGS CXXFLAGS and LIBS/LIBADD variables of every</span><br><span style="color: hsl(120, 100%, 40%);">+#   build target (program or library) which should be built with code</span><br><span style="color: hsl(120, 100%, 40%);">+#   coverage support. Also defines CODE_COVERAGE_RULES which should be</span><br><span style="color: hsl(120, 100%, 40%);">+#   substituted in your Makefile; and $enable_code_coverage which can be</span><br><span style="color: hsl(120, 100%, 40%);">+#   used in subsequent configure output. CODE_COVERAGE_ENABLED is defined</span><br><span style="color: hsl(120, 100%, 40%);">+#   and substituted, and corresponds to the value of the</span><br><span style="color: hsl(120, 100%, 40%);">+#   --enable-code-coverage option, which defaults to being disabled.</span><br><span style="color: hsl(120, 100%, 40%);">+#</span><br><span style="color: hsl(120, 100%, 40%);">+#   Test also for gcov program and create GCOV variable that could be</span><br><span style="color: hsl(120, 100%, 40%);">+#   substituted.</span><br><span style="color: hsl(120, 100%, 40%);">+#</span><br><span style="color: hsl(120, 100%, 40%);">+#   Note that all optimization flags in CFLAGS must be disabled when code</span><br><span style="color: hsl(120, 100%, 40%);">+#   coverage is enabled.</span><br><span style="color: hsl(120, 100%, 40%);">+#</span><br><span style="color: hsl(120, 100%, 40%);">+#   Usage example:</span><br><span style="color: hsl(120, 100%, 40%);">+#</span><br><span style="color: hsl(120, 100%, 40%);">+#   configure.ac:</span><br><span style="color: hsl(120, 100%, 40%);">+#</span><br><span style="color: hsl(120, 100%, 40%);">+#     OSMO_AX_CODE_COVERAGE</span><br><span style="color: hsl(120, 100%, 40%);">+#</span><br><span style="color: hsl(120, 100%, 40%);">+#   Makefile.am:</span><br><span style="color: hsl(120, 100%, 40%);">+#</span><br><span style="color: hsl(120, 100%, 40%);">+#     @CODE_COVERAGE_RULES@</span><br><span style="color: hsl(120, 100%, 40%);">+#     my_program_LIBS = ... $(CODE_COVERAGE_LIBS) ...</span><br><span style="color: hsl(120, 100%, 40%);">+#     my_program_CPPFLAGS = ... $(CODE_COVERAGE_CPPFLAGS) ...</span><br><span style="color: hsl(120, 100%, 40%);">+#     my_program_CFLAGS = ... $(CODE_COVERAGE_CFLAGS) ...</span><br><span style="color: hsl(120, 100%, 40%);">+#     my_program_CXXFLAGS = ... $(CODE_COVERAGE_CXXFLAGS) ...</span><br><span style="color: hsl(120, 100%, 40%);">+#</span><br><span style="color: hsl(120, 100%, 40%);">+#   This results in a "check-code-coverage" rule being added to any</span><br><span style="color: hsl(120, 100%, 40%);">+#   Makefile.am which includes "@CODE_COVERAGE_RULES@" (assuming the module</span><br><span style="color: hsl(120, 100%, 40%);">+#   has been configured with --enable-code-coverage). Running `make</span><br><span style="color: hsl(120, 100%, 40%);">+#   check-code-coverage` in that directory will run the module's test suite</span><br><span style="color: hsl(120, 100%, 40%);">+#   (`make check`) and build a code coverage report detailing the code which</span><br><span style="color: hsl(120, 100%, 40%);">+#   was touched, then print the URI for the report.</span><br><span style="color: hsl(120, 100%, 40%);">+#</span><br><span style="color: hsl(120, 100%, 40%);">+#   In earlier versions of this macro, CODE_COVERAGE_LDFLAGS was defined</span><br><span style="color: hsl(120, 100%, 40%);">+#   instead of CODE_COVERAGE_LIBS. They are both still defined, but use of</span><br><span style="color: hsl(120, 100%, 40%);">+#   CODE_COVERAGE_LIBS is preferred for clarity; CODE_COVERAGE_LDFLAGS is</span><br><span style="color: hsl(120, 100%, 40%);">+#   deprecated. They have the same value.</span><br><span style="color: hsl(120, 100%, 40%);">+#</span><br><span style="color: hsl(120, 100%, 40%);">+#   This code was derived from Makefile.decl in GLib, originally licenced</span><br><span style="color: hsl(120, 100%, 40%);">+#   under LGPLv2.1+.</span><br><span style="color: hsl(120, 100%, 40%);">+#</span><br><span style="color: hsl(120, 100%, 40%);">+# LICENSE</span><br><span style="color: hsl(120, 100%, 40%);">+#</span><br><span style="color: hsl(120, 100%, 40%);">+#   Copyright (c) 2012, 2016 Philip Withnall</span><br><span style="color: hsl(120, 100%, 40%);">+#   Copyright (c) 2012 Xan Lopez</span><br><span style="color: hsl(120, 100%, 40%);">+#   Copyright (c) 2012 Christian Persch</span><br><span style="color: hsl(120, 100%, 40%);">+#   Copyright (c) 2012 Paolo Borelli</span><br><span style="color: hsl(120, 100%, 40%);">+#   Copyright (c) 2012 Dan Winship</span><br><span style="color: hsl(120, 100%, 40%);">+#   Copyright (c) 2015 Bastien ROUCARIES</span><br><span style="color: hsl(120, 100%, 40%);">+#</span><br><span style="color: hsl(120, 100%, 40%);">+#   This library is free software; you can redistribute it and/or modify it</span><br><span style="color: hsl(120, 100%, 40%);">+#   under the terms of the GNU Lesser General Public License as published by</span><br><span style="color: hsl(120, 100%, 40%);">+#   the Free Software Foundation; either version 2.1 of the License, or (at</span><br><span style="color: hsl(120, 100%, 40%);">+#   your option) any later version.</span><br><span style="color: hsl(120, 100%, 40%);">+#</span><br><span style="color: hsl(120, 100%, 40%);">+#   This library is distributed in the hope that it will be useful, but</span><br><span style="color: hsl(120, 100%, 40%);">+#   WITHOUT ANY WARRANTY; without even the implied warranty of</span><br><span style="color: hsl(120, 100%, 40%);">+#   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser</span><br><span style="color: hsl(120, 100%, 40%);">+#   General Public License for more details.</span><br><span style="color: hsl(120, 100%, 40%);">+#</span><br><span style="color: hsl(120, 100%, 40%);">+#   You should have received a copy of the GNU Lesser General Public License</span><br><span style="color: hsl(120, 100%, 40%);">+#   along with this program. If not, see <https://www.gnu.org/licenses/>.</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+#serial 25</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+AC_DEFUN([OSMO_AX_CODE_COVERAGE],[</span><br><span style="color: hsl(120, 100%, 40%);">+  dnl Check for --enable-code-coverage</span><br><span style="color: hsl(120, 100%, 40%);">+  AC_REQUIRE([AC_PROG_SED])</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+   # allow to override gcov location</span><br><span style="color: hsl(120, 100%, 40%);">+     AC_ARG_WITH([gcov],</span><br><span style="color: hsl(120, 100%, 40%);">+     [AS_HELP_STRING([--with-gcov[=GCOV]], [use given GCOV for coverage (GCOV=gcov).])],</span><br><span style="color: hsl(120, 100%, 40%);">+   [_AX_CODE_COVERAGE_GCOV_PROG_WITH=$with_gcov],</span><br><span style="color: hsl(120, 100%, 40%);">+        [_AX_CODE_COVERAGE_GCOV_PROG_WITH=gcov])</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+  AC_MSG_CHECKING([whether to build with code coverage support])</span><br><span style="color: hsl(120, 100%, 40%);">+        AC_ARG_ENABLE([code-coverage],</span><br><span style="color: hsl(120, 100%, 40%);">+          AS_HELP_STRING([--enable-code-coverage],</span><br><span style="color: hsl(120, 100%, 40%);">+      [Whether to enable code coverage support]),,</span><br><span style="color: hsl(120, 100%, 40%);">+          enable_code_coverage=no)</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+  AM_CONDITIONAL([CODE_COVERAGE_ENABLED], [test x$enable_code_coverage = xyes])</span><br><span style="color: hsl(120, 100%, 40%);">+ AC_SUBST([CODE_COVERAGE_ENABLED], [$enable_code_coverage])</span><br><span style="color: hsl(120, 100%, 40%);">+    AC_MSG_RESULT($enable_code_coverage)</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+        AS_IF([ test "$enable_code_coverage" = "yes" ], [</span><br><span style="color: hsl(120, 100%, 40%);">+         # check for gcov</span><br><span style="color: hsl(120, 100%, 40%);">+              AC_CHECK_TOOL([GCOV],</span><br><span style="color: hsl(120, 100%, 40%);">+           [$_AX_CODE_COVERAGE_GCOV_PROG_WITH],</span><br><span style="color: hsl(120, 100%, 40%);">+                  [:])</span><br><span style="color: hsl(120, 100%, 40%);">+                AS_IF([test "X$GCOV" = "X:"],</span><br><span style="color: hsl(120, 100%, 40%);">+               [AC_MSG_ERROR([gcov is needed to do coverage])])</span><br><span style="color: hsl(120, 100%, 40%);">+            AC_SUBST([GCOV])</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+            dnl Check if gcc is being used</span><br><span style="color: hsl(120, 100%, 40%);">+                AS_IF([ test "$GCC" = "no" ], [</span><br><span style="color: hsl(120, 100%, 40%);">+                   AC_MSG_ERROR([not compiling with gcc, which is required for gcov code coverage])</span><br><span style="color: hsl(120, 100%, 40%);">+              ])</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+          AC_CHECK_PROG([LCOV], [lcov], [lcov])</span><br><span style="color: hsl(120, 100%, 40%);">+         AC_CHECK_PROG([GENHTML], [genhtml], [genhtml])</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+              AS_IF([ test -z "$LCOV" ], [</span><br><span style="color: hsl(120, 100%, 40%);">+                        AC_MSG_ERROR([To enable code coverage reporting you must have lcov installed])</span><br><span style="color: hsl(120, 100%, 40%);">+                ])</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+          AS_IF([ test -z "$GENHTML" ], [</span><br><span style="color: hsl(120, 100%, 40%);">+                     AC_MSG_ERROR([Could not find genhtml from the lcov package])</span><br><span style="color: hsl(120, 100%, 40%);">+          ])</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+          dnl Build the code coverage flags</span><br><span style="color: hsl(120, 100%, 40%);">+             dnl Define CODE_COVERAGE_LDFLAGS for backwards compatibility</span><br><span style="color: hsl(120, 100%, 40%);">+          CODE_COVERAGE_CPPFLAGS="-DNDEBUG"</span><br><span style="color: hsl(120, 100%, 40%);">+           CODE_COVERAGE_CFLAGS="-O0 -g -fprofile-arcs -ftest-coverage"</span><br><span style="color: hsl(120, 100%, 40%);">+                CODE_COVERAGE_CXXFLAGS="-O0 -g -fprofile-arcs -ftest-coverage"</span><br><span style="color: hsl(120, 100%, 40%);">+              CODE_COVERAGE_LIBS="-lgcov"</span><br><span style="color: hsl(120, 100%, 40%);">+         CODE_COVERAGE_LDFLAGS="$CODE_COVERAGE_LIBS"</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+               AC_SUBST([CODE_COVERAGE_CPPFLAGS])</span><br><span style="color: hsl(120, 100%, 40%);">+            AC_SUBST([CODE_COVERAGE_CFLAGS])</span><br><span style="color: hsl(120, 100%, 40%);">+              AC_SUBST([CODE_COVERAGE_CXXFLAGS])</span><br><span style="color: hsl(120, 100%, 40%);">+            AC_SUBST([CODE_COVERAGE_LIBS])</span><br><span style="color: hsl(120, 100%, 40%);">+                AC_SUBST([CODE_COVERAGE_LDFLAGS])</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+           [CODE_COVERAGE_RULES_CHECK='</span><br><span style="color: hsl(120, 100%, 40%);">+      -$(A''M_V_at)$(MAKE) $(AM_MAKEFLAGS) -k check</span><br><span style="color: hsl(120, 100%, 40%);">+ $(A''M_V_at)$(MAKE) $(AM_MAKEFLAGS) code-coverage-capture</span><br><span style="color: hsl(120, 100%, 40%);">+']</span><br><span style="color: hsl(120, 100%, 40%);">+             [CODE_COVERAGE_RULES_CAPTURE='</span><br><span style="color: hsl(120, 100%, 40%);">+    $(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)</span><br><span style="color: hsl(120, 100%, 40%);">+       $(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)</span><br><span style="color: hsl(120, 100%, 40%);">+      -@rm -f $(CODE_COVERAGE_OUTPUT_FILE).tmp</span><br><span style="color: hsl(120, 100%, 40%);">+      $(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)</span><br><span style="color: hsl(120, 100%, 40%);">+  @echo "file://$(abs_builddir)/$(CODE_COVERAGE_OUTPUT_DIRECTORY)/index.html"</span><br><span style="color: hsl(120, 100%, 40%);">+']</span><br><span style="color: hsl(120, 100%, 40%);">+         [CODE_COVERAGE_RULES_CLEAN='</span><br><span style="color: hsl(120, 100%, 40%);">+clean: code-coverage-clean</span><br><span style="color: hsl(120, 100%, 40%);">+distclean: code-coverage-clean</span><br><span style="color: hsl(120, 100%, 40%);">+code-coverage-clean:</span><br><span style="color: hsl(120, 100%, 40%);">+    -$(LCOV) --directory $(top_builddir) -z</span><br><span style="color: hsl(120, 100%, 40%);">+       -rm -rf $(CODE_COVERAGE_OUTPUT_FILE) $(CODE_COVERAGE_OUTPUT_FILE).tmp $(CODE_COVERAGE_OUTPUT_DIRECTORY)</span><br><span style="color: hsl(120, 100%, 40%);">+       -find . \( -name "*.gcda" -o -name "*.gcno" -o -name "*.gcov" \) -delete</span><br><span style="color: hsl(120, 100%, 40%);">+']</span><br><span style="color: hsl(120, 100%, 40%);">+        ], [</span><br><span style="color: hsl(120, 100%, 40%);">+          [CODE_COVERAGE_RULES_CHECK='</span><br><span style="color: hsl(120, 100%, 40%);">+      @echo "Need to reconfigure with --enable-code-coverage"</span><br><span style="color: hsl(120, 100%, 40%);">+']</span><br><span style="color: hsl(120, 100%, 40%);">+             CODE_COVERAGE_RULES_CAPTURE="$CODE_COVERAGE_RULES_CHECK"</span><br><span style="color: hsl(120, 100%, 40%);">+            CODE_COVERAGE_RULES_CLEAN=''</span><br><span style="color: hsl(120, 100%, 40%);">+  ])</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+[CODE_COVERAGE_RULES='</span><br><span style="color: hsl(120, 100%, 40%);">+# Code coverage</span><br><span style="color: hsl(120, 100%, 40%);">+#</span><br><span style="color: hsl(120, 100%, 40%);">+# Optional:</span><br><span style="color: hsl(120, 100%, 40%);">+#  - CODE_COVERAGE_DIRECTORY: Top-level directory for code coverage reporting.</span><br><span style="color: hsl(120, 100%, 40%);">+#    Multiple directories may be specified, separated by whitespace.</span><br><span style="color: hsl(120, 100%, 40%);">+#    (Default: $(top_builddir))</span><br><span style="color: hsl(120, 100%, 40%);">+#  - CODE_COVERAGE_OUTPUT_FILE: Filename and path for the .info file generated</span><br><span style="color: hsl(120, 100%, 40%);">+#    by lcov for code coverage. (Default:</span><br><span style="color: hsl(120, 100%, 40%);">+#    $(PACKAGE_NAME)-$(PACKAGE_VERSION)-coverage.info)</span><br><span style="color: hsl(120, 100%, 40%);">+#  - CODE_COVERAGE_OUTPUT_DIRECTORY: Directory for generated code coverage</span><br><span style="color: hsl(120, 100%, 40%);">+#    reports to be created. (Default:</span><br><span style="color: hsl(120, 100%, 40%);">+#    $(PACKAGE_NAME)-$(PACKAGE_VERSION)-coverage)</span><br><span style="color: hsl(120, 100%, 40%);">+#  - CODE_COVERAGE_BRANCH_COVERAGE: Set to 1 to enforce branch coverage,</span><br><span style="color: hsl(120, 100%, 40%);">+#    set to 0 to disable it and leave empty to stay with the default.</span><br><span style="color: hsl(120, 100%, 40%);">+#    (Default: empty)</span><br><span style="color: hsl(120, 100%, 40%);">+#  - CODE_COVERAGE_LCOV_SHOPTS_DEFAULT: Extra options shared between both lcov</span><br><span style="color: hsl(120, 100%, 40%);">+#    instances. (Default: based on $CODE_COVERAGE_BRANCH_COVERAGE)</span><br><span style="color: hsl(120, 100%, 40%);">+#  - CODE_COVERAGE_LCOV_SHOPTS: Extra options to shared between both lcov</span><br><span style="color: hsl(120, 100%, 40%);">+#    instances. (Default: $CODE_COVERAGE_LCOV_SHOPTS_DEFAULT)</span><br><span style="color: hsl(120, 100%, 40%);">+#  - CODE_COVERAGE_LCOV_OPTIONS_GCOVPATH: --gcov-tool pathtogcov</span><br><span style="color: hsl(120, 100%, 40%);">+#  - CODE_COVERAGE_LCOV_OPTIONS_DEFAULT: Extra options to pass to the</span><br><span style="color: hsl(120, 100%, 40%);">+#    collecting lcov instance. (Default: $CODE_COVERAGE_LCOV_OPTIONS_GCOVPATH)</span><br><span style="color: hsl(120, 100%, 40%);">+#  - CODE_COVERAGE_LCOV_OPTIONS: Extra options to pass to the collecting lcov</span><br><span style="color: hsl(120, 100%, 40%);">+#    instance. (Default: $CODE_COVERAGE_LCOV_OPTIONS_DEFAULT)</span><br><span style="color: hsl(120, 100%, 40%);">+#  - CODE_COVERAGE_LCOV_RMOPTS_DEFAULT: Extra options to pass to the filtering</span><br><span style="color: hsl(120, 100%, 40%);">+#    lcov instance. (Default: empty)</span><br><span style="color: hsl(120, 100%, 40%);">+#  - CODE_COVERAGE_LCOV_RMOPTS: Extra options to pass to the filtering lcov</span><br><span style="color: hsl(120, 100%, 40%);">+#    instance. (Default: $CODE_COVERAGE_LCOV_RMOPTS_DEFAULT)</span><br><span style="color: hsl(120, 100%, 40%);">+#  - CODE_COVERAGE_GENHTML_OPTIONS_DEFAULT: Extra options to pass to the</span><br><span style="color: hsl(120, 100%, 40%);">+#    genhtml instance. (Default: based on $CODE_COVERAGE_BRANCH_COVERAGE)</span><br><span style="color: hsl(120, 100%, 40%);">+#  - CODE_COVERAGE_GENHTML_OPTIONS: Extra options to pass to the genhtml</span><br><span style="color: hsl(120, 100%, 40%);">+#    instance. (Default: $CODE_COVERAGE_GENHTML_OPTIONS_DEFAULT)</span><br><span style="color: hsl(120, 100%, 40%);">+#  - CODE_COVERAGE_IGNORE_PATTERN: Extra glob pattern of files to ignore</span><br><span style="color: hsl(120, 100%, 40%);">+#</span><br><span style="color: hsl(120, 100%, 40%);">+# The generated report will be titled using the $(PACKAGE_NAME) and</span><br><span style="color: hsl(120, 100%, 40%);">+# $(PACKAGE_VERSION). In order to add the current git hash to the title,</span><br><span style="color: hsl(120, 100%, 40%);">+# use the git-version-gen script, available online.</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+# Optional variables</span><br><span style="color: hsl(120, 100%, 40%);">+CODE_COVERAGE_DIRECTORY ?= $(top_builddir)</span><br><span style="color: hsl(120, 100%, 40%);">+CODE_COVERAGE_OUTPUT_FILE ?= $(PACKAGE_NAME)-$(PACKAGE_VERSION)-coverage.info</span><br><span style="color: hsl(120, 100%, 40%);">+CODE_COVERAGE_OUTPUT_DIRECTORY ?= $(PACKAGE_NAME)-$(PACKAGE_VERSION)-coverage</span><br><span style="color: hsl(120, 100%, 40%);">+CODE_COVERAGE_BRANCH_COVERAGE ?=</span><br><span style="color: hsl(120, 100%, 40%);">+CODE_COVERAGE_LCOV_SHOPTS_DEFAULT ?= $(if $(CODE_COVERAGE_BRANCH_COVERAGE),\</span><br><span style="color: hsl(120, 100%, 40%);">+--rc lcov_branch_coverage=$(CODE_COVERAGE_BRANCH_COVERAGE))</span><br><span style="color: hsl(120, 100%, 40%);">+CODE_COVERAGE_LCOV_SHOPTS ?= $(CODE_COVERAGE_LCOV_SHOPTS_DEFAULT)</span><br><span style="color: hsl(120, 100%, 40%);">+CODE_COVERAGE_LCOV_OPTIONS_GCOVPATH ?= --gcov-tool "$(GCOV)"</span><br><span style="color: hsl(120, 100%, 40%);">+CODE_COVERAGE_LCOV_OPTIONS_DEFAULT ?= $(CODE_COVERAGE_LCOV_OPTIONS_GCOVPATH)</span><br><span style="color: hsl(120, 100%, 40%);">+CODE_COVERAGE_LCOV_OPTIONS ?= $(CODE_COVERAGE_LCOV_OPTIONS_DEFAULT)</span><br><span style="color: hsl(120, 100%, 40%);">+CODE_COVERAGE_LCOV_RMOPTS_DEFAULT ?=</span><br><span style="color: hsl(120, 100%, 40%);">+CODE_COVERAGE_LCOV_RMOPTS ?= $(CODE_COVERAGE_LCOV_RMOPTS_DEFAULT)</span><br><span style="color: hsl(120, 100%, 40%);">+CODE_COVERAGE_GENHTML_OPTIONS_DEFAULT ?=\</span><br><span style="color: hsl(120, 100%, 40%);">+$(if $(CODE_COVERAGE_BRANCH_COVERAGE),\</span><br><span style="color: hsl(120, 100%, 40%);">+--rc genhtml_branch_coverage=$(CODE_COVERAGE_BRANCH_COVERAGE))</span><br><span style="color: hsl(120, 100%, 40%);">+CODE_COVERAGE_GENHTML_OPTIONS ?= $(CODE_COVERAGE_GENHTML_OPTIONS_DEFAULT)</span><br><span style="color: hsl(120, 100%, 40%);">+CODE_COVERAGE_IGNORE_PATTERN ?=</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+GITIGNOREFILES ?=</span><br><span style="color: hsl(120, 100%, 40%);">+GITIGNOREFILES += $(CODE_COVERAGE_OUTPUT_FILE) $(CODE_COVERAGE_OUTPUT_DIRECTORY)</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+code_coverage_v_lcov_cap = $(code_coverage_v_lcov_cap_$(V))</span><br><span style="color: hsl(120, 100%, 40%);">+code_coverage_v_lcov_cap_ = $(code_coverage_v_lcov_cap_$(AM_DEFAULT_VERBOSITY))</span><br><span style="color: hsl(120, 100%, 40%);">+code_coverage_v_lcov_cap_0 = @echo "  LCOV   --capture"\</span><br><span style="color: hsl(120, 100%, 40%);">+ $(CODE_COVERAGE_OUTPUT_FILE);</span><br><span style="color: hsl(120, 100%, 40%);">+code_coverage_v_lcov_ign = $(code_coverage_v_lcov_ign_$(V))</span><br><span style="color: hsl(120, 100%, 40%);">+code_coverage_v_lcov_ign_ = $(code_coverage_v_lcov_ign_$(AM_DEFAULT_VERBOSITY))</span><br><span style="color: hsl(120, 100%, 40%);">+code_coverage_v_lcov_ign_0 = @echo "  LCOV   --remove /tmp/*"\</span><br><span style="color: hsl(120, 100%, 40%);">+ $(CODE_COVERAGE_IGNORE_PATTERN);</span><br><span style="color: hsl(120, 100%, 40%);">+code_coverage_v_genhtml = $(code_coverage_v_genhtml_$(V))</span><br><span style="color: hsl(120, 100%, 40%);">+code_coverage_v_genhtml_ = $(code_coverage_v_genhtml_$(AM_DEFAULT_VERBOSITY))</span><br><span style="color: hsl(120, 100%, 40%);">+code_coverage_v_genhtml_0 = @echo "  GEN   " $(CODE_COVERAGE_OUTPUT_DIRECTORY);</span><br><span style="color: hsl(120, 100%, 40%);">+code_coverage_quiet = $(code_coverage_quiet_$(V))</span><br><span style="color: hsl(120, 100%, 40%);">+code_coverage_quiet_ = $(code_coverage_quiet_$(AM_DEFAULT_VERBOSITY))</span><br><span style="color: hsl(120, 100%, 40%);">+code_coverage_quiet_0 = --quiet</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+# sanitizes the test-name: replaces with underscores: dashes and dots</span><br><span style="color: hsl(120, 100%, 40%);">+code_coverage_sanitize = $(subst -,_,$(subst .,_,$(1)))</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+# Use recursive makes in order to ignore errors during check</span><br><span style="color: hsl(120, 100%, 40%);">+check-code-coverage:'"$CODE_COVERAGE_RULES_CHECK"'</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+# Capture code coverage data</span><br><span style="color: hsl(120, 100%, 40%);">+code-coverage-capture: code-coverage-capture-hook'"$CODE_COVERAGE_RULES_CAPTURE"'</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+# Hook rule executed before code-coverage-capture, overridable by the user</span><br><span style="color: hsl(120, 100%, 40%);">+code-coverage-capture-hook:</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+'"$CODE_COVERAGE_RULES_CLEAN"'</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+A''M_DISTCHECK_CONFIGURE_FLAGS ?=</span><br><span style="color: hsl(120, 100%, 40%);">+A''M_DISTCHECK_CONFIGURE_FLAGS += --disable-code-coverage</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+.PHONY: check-code-coverage code-coverage-capture code-coverage-capture-hook code-coverage-clean</span><br><span style="color: hsl(120, 100%, 40%);">+']</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+       AC_SUBST([CODE_COVERAGE_RULES])</span><br><span style="color: hsl(120, 100%, 40%);">+       m4_ifdef([_AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE([CODE_COVERAGE_RULES])])</span><br><span style="color: hsl(120, 100%, 40%);">+])</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/c/libosmocore/+/13496">change 13496</a>. To unsubscribe, or for help writing mail filters, visit <a href="https://gerrit.osmocom.org/settings">settings</a>.</p><div itemscope itemtype="http://schema.org/EmailMessage"><div itemscope itemprop="action" itemtype="http://schema.org/ViewAction"><link itemprop="url" href="https://gerrit.osmocom.org/c/libosmocore/+/13496"/><meta itemprop="name" content="View Change"/></div></div>

<div style="display:none"> Gerrit-Project: libosmocore </div>
<div style="display:none"> Gerrit-Branch: master </div>
<div style="display:none"> Gerrit-Change-Id: I6f4ffb91bd7f3dd070aa09dd16d5ad1faf130a4c </div>
<div style="display:none"> Gerrit-Change-Number: 13496 </div>
<div style="display:none"> Gerrit-PatchSet: 8 </div>
<div style="display:none"> Gerrit-Owner: vvvelichkov <vvvelichkov@gmail.com> </div>
<div style="display:none"> Gerrit-Reviewer: Jenkins Builder </div>
<div style="display:none"> Gerrit-Reviewer: Max <suraev@alumni.ntnu.no> </div>
<div style="display:none"> Gerrit-Reviewer: fixeria <axilirator@gmail.com> </div>
<div style="display:none"> Gerrit-Reviewer: laforge <laforge@osmocom.org> </div>
<div style="display:none"> Gerrit-Reviewer: neels <nhofmeyr@sysmocom.de> </div>
<div style="display:none"> Gerrit-Reviewer: osmith <osmith@sysmocom.de> </div>
<div style="display:none"> Gerrit-Reviewer: pespin <pespin@sysmocom.de> </div>
<div style="display:none"> Gerrit-Reviewer: vvvelichkov <vvvelichkov@gmail.com> </div>
<div style="display:none"> Gerrit-MessageType: merged </div>