diff options
author | Reinhard Tartler <siretart@tauware.de> | 2013-03-23 08:17:24 +0100 |
---|---|---|
committer | Reinhard Tartler <siretart@tauware.de> | 2013-04-05 18:55:11 +0200 |
commit | a862c7d3368241e72a465ab944afa38ea62a6640 (patch) | |
tree | 8e1ef0f68082a2f27b56858e57e7bc4a9c3ce91b | |
parent | 52cd84d4d4e335daf26eb8c8b60c2578b3341b91 (diff) | |
download | ffmpeg-a862c7d3368241e72a465ab944afa38ea62a6640.tar.gz |
Integrate lcov/gcov into Libav
The gcov/lcov are a common toolchain for visualizing code coverage with
the GNU/Toolchain. The documentation and implementation of this
integration was heavily inspired from the blog entry by Mike Melanson:
http://multimedia.cx/eggs/using-lcov-with-ffmpeg/
-rw-r--r-- | .gitignore | 4 | ||||
-rw-r--r-- | Makefile | 1 | ||||
-rw-r--r-- | common.mak | 2 | ||||
-rwxr-xr-x | configure | 4 | ||||
-rw-r--r-- | doc/developer.texi | 24 | ||||
-rw-r--r-- | tests/Makefile | 16 |
6 files changed, 49 insertions, 2 deletions
diff --git a/.gitignore b/.gitignore index 3ed55b3487..000f149c4e 100644 --- a/.gitignore +++ b/.gitignore @@ -5,6 +5,8 @@ *.dll *.exe *.exp +*.gcda +*.gcno *.h.c *.ilk *.lib @@ -22,6 +24,7 @@ /avprobe /avserver /config.* +/coverage.info /version.h /doc/*.1 /doc/*.html @@ -30,6 +33,7 @@ /doc/avoptions_format.texi /doc/doxy/html/ /doc/print_options +/lcov/ /libavcodec/*_tablegen /libavcodec/*_tables.c /libavcodec/*_tables.h @@ -188,6 +188,7 @@ clean:: $(RM) $(ALLPROGS) $(RM) $(CLEANSUFFIXES) $(RM) $(CLEANSUFFIXES:%=tools/%) + $(RM) -rf coverage.info lcov distclean:: $(RM) $(DISTCLEANSUFFIXES) diff --git a/common.mak b/common.mak index d3c6b9f694..a1d9d1e502 100644 --- a/common.mak +++ b/common.mak @@ -51,7 +51,7 @@ $(TOOLOBJS): | tools OBJDIRS := $(OBJDIRS) $(dir $(OBJS) $(HOBJS) $(HOSTOBJS) $(TESTOBJS)) -CLEANSUFFIXES = *.d *.o *~ *.h.c *.map *.ver +CLEANSUFFIXES = *.d *.o *~ *.h.c *.map *.ver *.gcno *.gcda DISTCLEANSUFFIXES = *.pc LIBSUFFIXES = *.a *.lib *.so *.so.* *.dylib *.dll *.def *.dll.a @@ -2173,6 +2173,10 @@ case "$toolchain" in ar_default="lib" target_os_default="win32" ;; + gcov) + add_cflags -fprofile-arcs -ftest-coverage + add_ldflags -fprofile-arcs -ftest-coverage + ;; ?*) die "Unknown toolchain $toolchain" ;; diff --git a/doc/developer.texi b/doc/developer.texi index cde87f1e5d..3d574e4428 100644 --- a/doc/developer.texi +++ b/doc/developer.texi @@ -550,6 +550,30 @@ why the expected result changed. Please refer to @url{fate.html}. +@subsection Visualizing Test Coverage + +The Libav build system allows visualizing the test coverage in an easy +manner with the coverage tools @code{gcov}/@code{lcov}. This involves +the following steps: + +@enumerate +@item + Configure to compile with instrumentation enabled: + @code{configure --toolchain=gcov}. +@item + Run your test case, either manually or via FATE. This can be either + the full FATE regression suite, or any arbitrary invocation of any + front-end tool provided by Libav, in any combination. +@item + Run @code{make lcov} to generate coverage data in HTML format. +@item + View @code{lcov/index.html} in your preferred HTML viewer. +@end enumerate + +You can use the command @code{make lcov-reset} to reset the coverage +measurements. You will need to rerun @code{make lcov} after running a +new test. + @anchor{Release process} @section Release process diff --git a/tests/Makefile b/tests/Makefile index 67ce45e862..d60ee5a26e 100644 --- a/tests/Makefile +++ b/tests/Makefile @@ -123,6 +123,19 @@ $(FATE): $(FATE_UTILS:%=tests/%$(HOSTEXESUF)) fate-list: @printf '%s\n' $(sort $(FATE)) +coverage.info: TAG = LCOV +coverage.info: + $(M)lcov -d $(CURDIR) -b $(SRC_PATH) --capture -o $@ + +lcov: TAG = GENHTML +lcov: coverage.info + $(M)genhtml -o $(CURDIR)/lcov $< + +lcov-reset: TAG = LCOV +lcov-reset: + $(M)lcov -d $(CURDIR) --zerocounters + $(Q)$(RM) -f coverage.info + clean:: testclean testclean: @@ -132,4 +145,5 @@ testclean: -include $(wildcard tests/*.d) -.PHONY: fate* +.PHONY: fate* lcov lcov-reset +.INTERMEDIATE: coverage.info |