Unit test code coverage using lcov.
authorDavid Robillard <d@drobilla.net>
Fri, 23 Oct 2009 17:30:11 +0000 (17:30 +0000)
committerDavid Robillard <d@drobilla.net>
Fri, 23 Oct 2009 17:30:11 +0000 (17:30 +0000)
git-svn-id: svn://localhost/ardour2/branches/3.0@5892 d708f5d6-7413-0410-9779-e7cbd77b26cf

libs/evoral/run-tests.sh
libs/evoral/wscript

index de2e4005f96bd603f9f0fea07b5c5145bc1b59fe..64c36a8fec88cc70c613b0fa527f4414657ce111 100755 (executable)
@@ -1,8 +1,29 @@
 #!/bin/sh
 export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:../../build/default/libs/evoral
-if test -f ./test/testdata/TakeFive.mid
-then
-    ../../build/default/libs/evoral/run-tests
-else
-    echo "This script must be run from within the libs/evoral directory"
+if [ ! -f './test/testdata/TakeFive.mid' ]; then
+    echo "This script must be run from within the libs/evoral directory";
+       exit 1;
 fi
+
+srcdir=`pwd`
+
+# Make symlink to TakeFive.mid in build directory
+cd ../../build/default/libs/evoral
+mkdir -p ./test/testdata
+ln -fs $srcdir/test/testdata/TakeFive.mid \
+       ./test/testdata/TakeFive.mid
+
+lcov -d ./src -z
+./run-tests
+lcov -d ./src -d ./test -b ../../.. -c > coverage.lcov
+lcov -r coverage.lcov *boost* *c++* *usr/include* -o coverage.lcov
+mkdir -p ./coverage
+genhtml -o coverage coverage.lcov
+#rm -r coverage/boost
+#rm -r coverage/usr
+#rm -r coverage/c++
+#rm -r coverage/cppunit
+#rm -r coverage/glibmm-2.4
+#rm -r coverage/sigc++-2.0
+echo "Report written to:"
+echo "../../build/default/libs/evoral/coverage/index.html"
index 41b93a084d3d0299ad96cbaa2b621bf450dfd89a..b03e182d518b6d66d9b99195d9ea7dd7ce9ecd6b 100644 (file)
@@ -70,9 +70,7 @@ def build(bld):
        libsmf.uselib       = 'GLIB'
        libsmf.install_path = os.path.join(bld.env['LIBDIR'], 'ardour3')
 
-       # Library
-       obj = bld.new_task_gen('cxx', 'shlib')
-       obj.source = '''
+       lib_source = '''
                src/Control.cpp
                src/ControlList.cpp
                src/ControlSet.cpp
@@ -84,17 +82,36 @@ def build(bld):
                src/SMF.cpp
                src/Sequence.cpp
        '''
+
+       # Library
+       obj = bld.new_task_gen('cxx', 'shlib')
+       obj.source         = lib_source
        obj.export_incdirs = ['.']
-       obj.includes     = ['.', './src']
-       obj.name         = 'libevoral'
-       obj.target       = 'evoral'
-       obj.uselib       = 'GLIBMM GTHREAD SMF'
-       obj.uselib_local = 'libsmf'
-       obj.vnum         = EVORAL_LIB_VERSION
-       obj.install_path = os.path.join(bld.env['LIBDIR'], 'ardour3')
-
-       # Unit tests
+       obj.includes       = ['.', './src']
+       obj.name           = 'libevoral'
+       obj.target         = 'evoral'
+       obj.uselib         = 'GLIBMM GTHREAD SMF'
+       obj.uselib_local   = 'libsmf'
+       obj.vnum           = EVORAL_LIB_VERSION
+       obj.install_path   = os.path.join(bld.env['LIBDIR'], 'ardour3')
+
        if bld.env['BUILD_TESTS'] and bld.env['HAVE_CPPUNIT']:
+               # Static library (for unit test code coverage)
+               obj = bld.new_task_gen('cxx', 'staticlib')
+               obj.source       = lib_source
+               obj.source         = lib_source
+               obj.export_incdirs = ['.']
+               obj.includes       = ['.', './src']
+               obj.name           = 'libevoral_static'
+               obj.target         = 'evoral_static'
+               obj.uselib         = 'GLIBMM GTHREAD SMF'
+               obj.uselib_local   = 'libsmf'
+               obj.vnum           = EVORAL_LIB_VERSION
+               obj.install_path   = ''
+               obj.ccflags        = [ '-fprofile-arcs',  '-ftest-coverage' ]
+               obj.cxxflags       = [ '-fprofile-arcs',  '-ftest-coverage' ]
+
+               # Unit tests
                obj              = bld.new_task_gen('cxx', 'program')
                obj.source       = '''
                        test/SequenceTest.cpp
@@ -102,10 +119,13 @@ def build(bld):
                        test/testrunner.cpp
                '''
                obj.includes     = ['.', './src']
-               obj.uselib_local = 'libevoral'
+               obj.uselib_local = 'libevoral_static'
                obj.uselib       = 'CPPUNIT'
+               obj.libs         = 'gcov'
                obj.target       = 'run-tests'
                obj.install_path = ''
+               obj.ccflags      = [ '-fprofile-arcs',  '-ftest-coverage' ]
+               obj.cxxflags     = [ '-fprofile-arcs',  '-ftest-coverage' ]
 
 def shutdown():
        autowaf.shutdown()