]> git.ipfire.org Git - thirdparty/tor.git/commitdiff
Make contrib/coverage smarter about check file-existence edge cases
authorAndrea Shepard <andrea@torproject.org>
Tue, 16 Jul 2013 13:40:08 +0000 (06:40 -0700)
committerAndrea Shepard <andrea@torproject.org>
Tue, 16 Jul 2013 13:40:08 +0000 (06:40 -0700)
contrib/coverage

index 8d971660c9a15878f0ef18a7bfb158b005a0c336..f4ae475828019808ec7411b428d68e2d7c99f827 100755 (executable)
@@ -12,9 +12,35 @@ for fn in src/or/*.c src/common/*.c; do
     DN=`dirname $fn`
     F=`echo $BN | sed -e 's/\.c$//;'`
     GC="${BN}.gcov"
-    gcov -o $DN/src_*$F.o $fn
-    if [ -n $dst ]
+    # Figure out the object file names
+    ONS=`echo ${DN}/src_*-${F}.o`
+    ONS_WILDCARD_LITERAL="${DN}/src_*-${F}.o"
+    # If the wildcard didn't expand, no files
+    if [ "$ONS" != "${ONS_WILDCARD_LITERAL}" ]
     then
-      mv $GC $dst/$GC
+      for on in $ONS; do
+        # We should have a gcno file
+        GCNO=`echo $on | sed -e 's/\.o$/\.gcno/;'`
+        if [ -e $GCNO ]
+        then
+          # No need to test for gcda, since gcov assumes no execution
+          # if it's absent
+          rm -f $GC
+          gcov -o $on $fn
+          if [ -e $GC ]
+          then
+            if [ -n $dst ]
+            then
+              mv $GC $dst/$GC
+            fi
+          else
+            echo "gcov -o $on $fn didn't make a .gcov file"
+          fi
+        else
+          echo "Couldn't find gcno file for $on"
+        fi
+      done
+    else
+      echo "No object file found matching source file $fn"
     fi
 done