Revive lcov reporting
authorAndrew Bartlett <abartlet@samba.org>
Fri, 17 Feb 2012 06:11:49 +0000 (17:11 +1100)
committerAndrew Bartlett <abartlet@samba.org>
Fri, 17 Feb 2012 06:11:49 +0000 (17:11 +1100)
build_test.fns
buildfarm/__init__.py
buildfarm/web/__init__.py
coverage.fns [new file with mode: 0644]
magni.fns [deleted file]
web/compilers.list

index b5ab052e180164e4d010fbccebd1bbc5af297fea..d0299c5a74551f24a049496c1ee6000780099137 100644 (file)
@@ -321,9 +321,11 @@ action_lcovreport() {
                samba_3_master*)
                        lcov --base-directory $builddir --directory $builddir/.. --capture --output-file $builddir/$tree.lcov.info
                        ;;
-               samba_4*)
-                       # rm -f heimdal/lib/*/{lex,parse,sel-lex}.{gcda,gcno}
-                       lcov --base-directory $builddir --directory $builddir/.. --capture --output-file $builddir/$tree.lcov.info
+               samba_4*|tdb|talloc|ldb|libreplace)
+                       lcov --base-directory $builddir/bin --directory $builddir/bin --capture --output-file $builddir/$tree.lcov.info
+                       ;;
+               waf)
+                       lcov --base-directory $builddir/demos --directory $builddir/demos --capture --output-file $builddir/$tree.lcov.info
                        ;;
                *)
                        lcov --base-directory $builddir --directory $builddir --capture --output-file $builddir/$tree.lcov.info
@@ -339,6 +341,25 @@ action_lcovreport() {
        fi
 }
 
+action_callcatcherreport() {
+       if [ "$CALLCATCHER_REPORT" = "yes" ]; then
+               case "$tree" in
+               samba_3_master*)
+                       callanalyse `find $builddir/bin -name \*.so*` $builddir/bin/* | grep -v -f $srcdir/callcatcher-exceptions.grep > $builddir/coverage/unused-fns.txt
+                       ;;
+               samba_4*)
+                       callanalyse `find $builddir/bin -name \*.so*` $builddir/bin/* | grep -v -f $srcdir/callcatcher-exceptions.grep > $builddir/coverage/unused-fns.txt
+                       ;;
+               esac
+               rc=$?
+               echo "return code: $rc"
+       else
+               echo "CALLCATCHER_REPORT not set and callcatcher asked"
+               echo "Most probably an error please fix !"
+               return 1
+       fi
+}
+
 
 ############################
 # configure the tree
@@ -740,6 +761,8 @@ test_tree() {
        esac
 
        if [ "$LCOV_REPORT" = "yes" ]; then
+               PRE_GCOV_CFLAGS=$CFLAGS
+               PRE_GCOV_LDFLAGS=$LDFLAGS
                GCOV_FLAGS="--coverage"
                CFLAGS="$CFLAGS $GCOV_FLAGS" 
                LDFLAGS="$LDFLAGS $GCOV_FLAGS" 
@@ -758,6 +781,11 @@ test_tree() {
                send_logs_skip "$log" "$err"
                unlock_file "$lck"
                echo "Ending build of $tree.$compiler in process $$ at `date`"
+               if [ "$LCOV_REPORT" = "yes" ]; then
+                   CFLAGS=$PRE_GCOV_CFLAGS
+                   LDFLAGS=$PRE_GCOV_LDFLAGS
+                   export CFLAGS LDFLAGS
+               fi
                return
        fi
 
@@ -769,7 +797,7 @@ test_tree() {
        actions="$*"
 
        if [ "$actions" = "" ]; then
-               actions="configure config_log config_header build install test"
+               actions="configure config_log config_header build install test $EXTRA_ACTIONS"
        fi
 
        # start the build
@@ -894,6 +922,9 @@ test_tree() {
                chmod u=rwX,g=rX,o=rX -R $builddir/coverage
                rsync -rct -q --password-file=.password -z --timeout=200 \
                        $builddir/coverage/ $host@build.samba.org::lcov_data/$host/$tree/
+               CFLAGS=$PRE_GCOV_CFLAGS
+               LDFLAGS=$PRE_GCOV_LDFLAGS
+               export CFLAGS LDFLAGS
        fi
 
        cd $test_root
index 14134219f6dddf7c5d1362c48a1f147ffe31fac5..380b47b5553ed7dfa61b1d2397bef8489844d626 100644 (file)
@@ -52,7 +52,7 @@ def lcov_extract_percentage(f):
 
 class BuildFarm(object):
 
-    LCOVHOST = "magni"
+    LCOVHOST = "coverage"
     OLDAGE = 60*60*4,
     DEADAGE = 60*60*24*4
 
@@ -110,6 +110,20 @@ class BuildFarm(object):
         finally:
             lcov_html.close()
 
+    def unused_fns(self, tree):
+        """get status of build"""
+        from buildfarm.build import NoSuchBuildError
+        file = os.path.join(self.lcovdir, self.LCOVHOST, tree, "unused-fns.txt")
+        try:
+            unused_fns_file = open(file, 'r')
+        except (OSError, IOError):
+            # File does not exist
+            raise NoSuchBuildError(tree, self.LCOVHOST, "unused_fns")
+        try:
+            return "unused-fns.txt"
+        finally:
+            unused_fns_file.close()
+
     def get_build(self, tree, host, compiler, rev=None, checksum=None):
         if rev is not None:
             return self.builds.get_build(tree, host, compiler, rev,
index f8ac04afd3ba688beb092ec78e9ecd4f7e4f01ba..eae7ab04bed736b2d55c2d7f2c245d3192fa1d56 100755 (executable)
@@ -740,6 +740,7 @@ class ViewSummaryPage(BuildFarmPage):
             else:
                     yield "<td>"
             yield "%d</td>" % panic_count[tree]
+
             try:
                 lcov_status = self.buildfarm.lcov_status(tree)
             except NoSuchBuildError:
@@ -750,6 +751,17 @@ class ViewSummaryPage(BuildFarmPage):
                         self.buildfarm.LCOVHOST, tree, lcov_status)
                 else:
                     yield "<td></td>"
+
+            try:
+                unused_fns = self.buildfarm.unused_fns(tree)
+            except NoSuchBuildError:
+                yield "<td></td>"
+            else:
+                if unused_fns is not None:
+                    yield "<td><a href=\"/lcov/data/%s/%s/%s\">Unused Functions</a></td>" % (
+                        self.buildfarm.LCOVHOST, tree, unused_fns)
+                else:
+                    yield "<td></td>"
             yield "</tr>"
 
         yield "</tbody></table>"
diff --git a/coverage.fns b/coverage.fns
new file mode 100644 (file)
index 0000000..fd84ea7
--- /dev/null
@@ -0,0 +1,17 @@
+# We need to disable ccache for the lcov love to work
+export CCACHE_DISABLE=yes
+export LCOV_REPORT=yes
+export CALLCATCHER_REPORT=yes
+export EXTRA_ACTIONS="lcovreport callcatcherreport"
+
+compiler="callcatcher-gcc"
+
+. common.fns
+
+export PIDL_TESTS_SKIP=yes
+test_tree samba_4_0_test . $compiler
+
+test_tree samba_3_current source3 $compiler
+test_tree samba_3_next source3 $compiler
+test_tree samba_3_master source3 $compiler
+
diff --git a/magni.fns b/magni.fns
deleted file mode 100644 (file)
index 2177cfe..0000000
--- a/magni.fns
+++ /dev/null
@@ -1,23 +0,0 @@
-# We need to disable ccache for the lcov love to work
-export CCACHE_DISABLE=yes
-export LCOV_REPORT=yes
-export PYTHON_VERSION=2.5
-
-compiler=gcc
-
-. common.fns
-
-#lcov like shared libraries
-#export config="--disable-shared"
-export PIDL_TESTS_SKIP=yes
-test_tree samba_4_0_test . $compiler configure config_log config_header build install test lcovreport
-
-export config=""
-test_tree samba_3_current source3 $compiler
-test_tree samba_3_next source3 $compiler
-test_tree samba_3_master source3 $compiler
-
-#lcov and libtool disagree, enable OpenLDAP and disable OpenSSL
-export config="--with-ldap=/usr --without-openssl --disable-shared"
-test_tree lorikeet-heimdal . $compiler
-
index 6ab593f0bdd41bf90038cbe01bb4a7a5f77f5357..03ed9a30de1dd6930615947cf695d7eecd4bb0a3 100644 (file)
@@ -13,3 +13,4 @@ tcc
 icc-9
 checker
 xlc_r
+callcatcher-gcc