aboutsummaryrefslogtreecommitdiff
path: root/scripts/test/coverage
blob: f61c83bc72eaf87626f57053ea8066a3ba33b5ed (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
#!/bin/sh
# Copyright 2013  The Tor Project, Inc.
# See LICENSE for licensing information.

# coverage -- run gcov on the appropriate set of object files to extract
# coverage information.

dst=$1

for fn in src/core/*/*.c src/feature/*/*.c src/app/*/*.c src/lib/*/*.c; do
    BN=$(basename "$fn")
    DN=$(dirname "$fn")
    F=$(echo "$BN" | sed -e 's/\.c$//;')
    GC="${BN}.gcov"
    # Figure out the object file names
    ONS=$(echo "${DN}"/*testing_a-"${F}".o)
    ONS_WILDCARD_LITERAL="${DN}/*testing_a-${F}.o"
    # If the wildcard didn't expand, no files
    if [ "$ONS" != "${ONS_WILDCARD_LITERAL}" ]
    then
      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 [ -d "$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