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/
---
.gitignore | 4 ++++
configure | 4 ++++
doc/developer.texi | 22 ++++++++++++++++++++++
tests/Makefile | 7 ++++++-
4 files changed, 36 insertions(+), 1 deletion(-)
diff --git a/.gitignore b/.gitignore
index 3ed55b3..42b0a07 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
diff --git a/configure b/configure
index 111f9fd..4417d66 100755
--- a/configure
+++ b/configure
@@ -2165,6 +2165,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 cde87f1..df09587 100644
--- a/doc/developer.texi
+++ b/doc/developer.texi
@@ -550,6 +550,28 @@ why the expected result changed.
Please refer to @url{fate.html}.
+@subsection Visualizing Test Coverage
+
+The Libav build system provides means for visualizing the test coverage
+leveraging the coverage tools @code{gcov}/@code{lcov} in an easy manner.
+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.
+@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{lcov --directory . --zerocounters} 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 4e4eb89..ec42fcb 100644
--- a/tests/Makefile
+++ b/tests/Makefile
@@ -123,6 +123,11 @@ $(FATE): $(FATE_UTILS:%=tests/%$(HOSTEXESUF))
fate-list:
@printf '%s\n' $(sort $(FATE))
+lcov:
+ lcov --directory $(CURDIR) -b $(SRC_PATH) --capture --output-file
$(CURDIR)/coverage.info
+ mkdir -p $(SRC_PATH)/lcov
+ genhtml -o $(SRC_PATH)/lcov $(CURDIR)/coverage.info
+
clean:: testclean
testclean:
@@ -132,4 +137,4 @@ testclean:
-include $(wildcard tests/*.d)
-.PHONY: fate*
+.PHONY: fate* lcov
--
1.7.9.5
_______________________________________________
libav-devel mailing list
[email protected]
https://lists.libav.org/mailman/listinfo/libav-devel