Merge lp:~allanlesage/overlay-scrollbar/TDD into lp:overlay-scrollbar

Proposed by Allan LeSage
Status: Needs review
Proposed branch: lp:~allanlesage/overlay-scrollbar/TDD
Merge into: lp:overlay-scrollbar
Diff against target: 219 lines (+158/-4)
5 files modified
Makefile.am (+2/-0)
Makefile.am.coverage (+48/-0)
build/gcov.m4 (+86/-0)
configure.ac (+11/-0)
os/Makefile.am (+11/-4)
To merge this branch: bzr merge lp:~allanlesage/overlay-scrollbar/TDD
Reviewer Review Type Date Requested Status
PS Jenkins bot (community) continuous-integration Needs Fixing
jenkins (community) continuous-integration Approve
Charles Kerr Pending
Review via email: mp+100427@code.launchpad.net

Description of the change

Adding gcov targets to autotools build for code-coverage reporting. For more information, see this blog post: http://qualityhour.wordpress.com/2012/01/29/test-coverage-tutorial-for-cc-autotools-projects/ . To compile with coverage tooling, ./autogen.sh --enable-gcov, then make coverage-html . Note that you'll need lcov to autoconf. Also note that you'll get an error on make if you have no tests, as there are no coverage artifacts to generate the html report. For review, please pay special attention to flags added in the project's makefiles.

To post a comment you must log in.
Revision history for this message
jenkins (martin-mrazik+qa) wrote :

PASSED: Continuous integration, rev:338
http://s-jenkins:8080/job/ayatana-scrollbar-ci/2/

review: Approve (continuous-integration)
Revision history for this message
PS Jenkins bot (ps-jenkins) wrote :
review: Needs Fixing (continuous-integration)

Unmerged revisions

338. By Allan LeSage

Added gcov coverage tooling.

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'Makefile.am'
2--- Makefile.am 2011-12-07 15:26:22 +0000
3+++ Makefile.am 2012-04-02 14:33:30 +0000
4@@ -34,3 +34,5 @@
5
6 %.md5: %
7 md5sum $< > $@
8+
9+include $(top_srcdir)/Makefile.am.coverage
10
11=== added file 'Makefile.am.coverage'
12--- Makefile.am.coverage 1970-01-01 00:00:00 +0000
13+++ Makefile.am.coverage 2012-04-02 14:33:30 +0000
14@@ -0,0 +1,48 @@
15+
16+# Coverage targets
17+
18+.PHONY: clean-gcno clean-gcda \
19+ coverage-html generate-coverage-html clean-coverage-html \
20+ coverage-gcovr generate-coverage-gcovr clean-coverage-gcovr
21+
22+clean-local: clean-gcno clean-coverage-html clean-coverage-gcovr
23+
24+if HAVE_GCOV
25+
26+clean-gcno:
27+ @echo Removing old coverage instrumentation
28+ -find -name '*.gcno' -print | xargs -r rm
29+
30+clean-gcda:
31+ @echo Removing old coverage results
32+ -find -name '*.gcda' -print | xargs -r rm
33+
34+coverage-html: clean-gcda
35+ -$(MAKE) $(AM_MAKEFLAGS) -k check
36+ $(MAKE) $(AM_MAKEFLAGS) generate-coverage-html
37+
38+generate-coverage-html:
39+ @echo Collecting coverage data
40+ $(LCOV) --directory $(top_builddir) --capture --output-file coverage.info --no-checksum --compat-libtool
41+ LANG=C $(GENHTML) --prefix $(top_builddir) --output-directory coveragereport --title "Code Coverage" --legend --show-details coverage.info
42+
43+clean-coverage-html: clean-gcda
44+ -$(LCOV) --directory $(top_builddir) -z
45+ -rm -rf coverage.info coveragereport
46+
47+if HAVE_GCOVR
48+
49+coverage-gcovr: clean-gcda
50+ -$(MAKE) $(AM_MAKEFLAGS) -k check
51+ $(MAKE) $(AM_MAKEFLAGS) generate-coverage-gcovr
52+
53+generate-coverage-gcovr:
54+ @echo Generating coverage GCOVR report
55+ $(GCOVR) -x -r $(top_builddir) -o $(top_builddir)/coverage.xml
56+
57+clean-coverage-gcovr: clean-gcda
58+ -rm -rf $(top_builddir)/coverage.xml
59+
60+endif # HAVE_GCOVR
61+
62+endif # HAVE_GCOV
63
64=== added file 'build/gcov.m4'
65--- build/gcov.m4 1970-01-01 00:00:00 +0000
66+++ build/gcov.m4 2012-04-02 14:33:30 +0000
67@@ -0,0 +1,86 @@
68+# Checks for existence of coverage tools:
69+# * gcov
70+# * lcov
71+# * genhtml
72+# * gcovr
73+#
74+# Sets ac_cv_check_gcov to yes if tooling is present
75+# and reports the executables to the variables LCOV, GCOVR and GENHTML.
76+AC_DEFUN([AC_TDD_GCOV],
77+[
78+ AC_ARG_ENABLE(gcov,
79+ AS_HELP_STRING([--enable-gcov],
80+ [enable coverage testing with gcov]),
81+ [use_gcov=$enableval], [use_gcov=no])
82+
83+ if test "x$use_gcov" = "xyes"; then
84+ # we need gcc:
85+ if test "$GCC" != "yes"; then
86+ AC_MSG_ERROR([GCC is required for --enable-gcov])
87+ fi
88+
89+ # Check if ccache is being used
90+ AC_CHECK_PROG(SHTOOL, shtool, shtool)
91+ case `$SHTOOL path $CC` in
92+ *ccache*[)] gcc_ccache=yes;;
93+ *[)] gcc_ccache=no;;
94+ esac
95+
96+ if test "$gcc_ccache" = "yes" && (test -z "$CCACHE_DISABLE" || test "$CCACHE_DISABLE" != "1"); then
97+ AC_MSG_ERROR([ccache must be disabled when --enable-gcov option is used. You can disable ccache by setting environment variable CCACHE_DISABLE=1.])
98+ fi
99+
100+ lcov_version_list="1.6 1.7 1.8 1.9"
101+ AC_CHECK_PROG(LCOV, lcov, lcov)
102+ AC_CHECK_PROG(GENHTML, genhtml, genhtml)
103+
104+ if test "$LCOV"; then
105+ AC_CACHE_CHECK([for lcov version], glib_cv_lcov_version, [
106+ glib_cv_lcov_version=invalid
107+ lcov_version=`$LCOV -v 2>/dev/null | $SED -e 's/^.* //'`
108+ for lcov_check_version in $lcov_version_list; do
109+ if test "$lcov_version" = "$lcov_check_version"; then
110+ glib_cv_lcov_version="$lcov_check_version (ok)"
111+ fi
112+ done
113+ ])
114+ else
115+ lcov_msg="To enable code coverage reporting you must have one of the following lcov versions installed: $lcov_version_list"
116+ AC_MSG_ERROR([$lcov_msg])
117+ fi
118+
119+ case $glib_cv_lcov_version in
120+ ""|invalid[)]
121+ lcov_msg="You must have one of the following versions of lcov: $lcov_version_list (found: $lcov_version)."
122+ AC_MSG_ERROR([$lcov_msg])
123+ LCOV="exit 0;"
124+ ;;
125+ esac
126+
127+ if test -z "$GENHTML"; then
128+ AC_MSG_ERROR([Could not find genhtml from the lcov package])
129+ fi
130+
131+ ac_cv_check_gcov=yes
132+ ac_cv_check_lcov=yes
133+
134+ # Remove all optimization flags from CFLAGS
135+ changequote({,})
136+ CFLAGS=`echo "$CFLAGS" | $SED -e 's/-O[0-9]*//g'`
137+ changequote([,])
138+
139+ # Add the special gcc flags
140+ COVERAGE_CFLAGS="-O0 -fprofile-arcs -ftest-coverage"
141+ COVERAGE_CXXFLAGS="-O0 -fprofile-arcs -ftest-coverage"
142+ COVERAGE_LDFLAGS="-lgcov"
143+
144+ # Check availability of gcovr
145+ AC_CHECK_PROG(GCOVR, gcovr, gcovr)
146+ if test -z "$GCOVR"; then
147+ ac_cv_check_gcovr=no
148+ else
149+ ac_cv_check_gcovr=yes
150+ fi
151+
152+fi
153+]) # AC_TDD_GCOV
154
155=== modified file 'configure.ac'
156--- configure.ac 2012-03-21 13:52:39 +0000
157+++ configure.ac 2012-04-02 14:33:30 +0000
158@@ -154,6 +154,16 @@
159 OS_LDFLAGS="\$(OS_LT_LDFLAGS) -export-symbols-regex \^[_]*\(os_\|Os\|OS_\).* -no-undefined"
160 AC_SUBST(OS_LDFLAGS)
161
162+# Coverage
163+
164+m4_include([build/gcov.m4])
165+AC_TDD_GCOV
166+AM_CONDITIONAL([HAVE_GCOV], [test "x$ac_cv_check_gcov" = xyes])
167+AM_CONDITIONAL([HAVE_LCOV], [test "x$ac_cv_check_lcov" = xyes])
168+AM_CONDITIONAL([HAVE_GCOVR], [test "x$ac_cv_check_gcovr" = xyes])
169+AC_SUBST(COVERAGE_CFLAGS)
170+AC_SUBST(COVERAGE_LDFLAGS)
171+
172 # Files
173
174 AC_CONFIG_FILES([
175@@ -179,6 +189,7 @@
176 echo " Tests: ${enable_tests}"
177 echo " Debug: ${enable_debug}"
178 echo " Prefix: ${prefix}"
179+echo " gcov: ${use_gcov}"
180 echo ""
181 echo " Compiler flags: ${CPPFLAGS} ${DEBUG_CFLAGS} ${MAINTAINER_CFLAGS}"
182 echo ""
183
184=== modified file 'os/Makefile.am'
185--- os/Makefile.am 2011-10-07 00:36:53 +0000
186+++ os/Makefile.am 2012-04-02 14:33:30 +0000
187@@ -27,11 +27,15 @@
188
189 liboverlay_scrollbar_@OS_MAJORMINOR@_la_SOURCES = $(source_c)
190
191-liboverlay_scrollbar_@OS_MAJORMINOR@_la_CFLAGS = $(OS_CFLAGS)
192+liboverlay_scrollbar_@OS_MAJORMINOR@_la_CFLAGS = \
193+ $(OS_CFLAGS) \
194+ $(COVERAGE_CFLAGS)
195
196 liboverlay_scrollbar_@OS_MAJORMINOR@_la_LIBADD = $(OS_LIBADD)
197
198-liboverlay_scrollbar_@OS_MAJORMINOR@_la_LDFLAGS = $(OS_LDFLAGS)
199+liboverlay_scrollbar_@OS_MAJORMINOR@_la_LDFLAGS = \
200+ $(OS_LDFLAGS) \
201+ $(COVERAGE_CFLAGS)
202
203 liboverlay_scrollbar_@OS_MAJORMINOR@_includedir = \
204 $(includedir)/overlay-scrollbar$(VER)-@OS_MAJORMINOR@/os
205@@ -48,9 +52,12 @@
206 os3include_HEADERS = $(osinclude_HEADERS)
207 liboverlay_scrollbar3_@OS_MAJORMINOR@_la_SOURCES = $(source_c)
208 liboverlay_scrollbar3_@OS_MAJORMINOR@_la_CFLAGS = $(OS_CFLAGS) \
209- -DUSE_GTK3
210+ $(COVERAGE_CFLAGS) \
211+ -DUSE_GTK3
212 liboverlay_scrollbar3_@OS_MAJORMINOR@_la_LIBADD = $(OS_LIBADD)
213-liboverlay_scrollbar3_@OS_MAJORMINOR@_la_LDFLAGS = $(OS_LDFLAGS)
214+liboverlay_scrollbar3_@OS_MAJORMINOR@_la_LDFLAGS = \
215+ $(OS_LDFLAGS) \
216+ $(COVERAGE_CFLAGS)
217 liboverlay_scrollbar3_@OS_MAJORMINOR@_includedir = $(includedir)/overlay-scrollbar$(VER)-@OS_MAJORMINOR@/os
218 liboverlay_scrollbar3_@OS_MAJORMINOR@_include_HEADERS = \
219 $(source_h) \

Subscribers

People subscribed via source and target branches