OpenCores
URL https://opencores.org/ocsvn/openrisc/openrisc/trunk

Subversion Repositories openrisc

[/] [openrisc/] [trunk/] [gnu-old/] [gcc-4.2.2/] [contrib/] [dg-cmp-results.sh] - Blame information for rev 844

Go to most recent revision | Details | Compare with Previous | View Log

Line No. Rev Author Line
1 38 julius
#!/bin/bash
2
# Copyright (C) 2006 Free Software Foundation
3
#
4
# Analyze changes in GCC DejaGNU test logs for binutils, gcc, gdb, etc.
5
# Original version written in 2005 by James Lemke <jwlemke@wasabisystems.com>.
6
#
7
# See usage() below.
8
 
9
usage () {
10
    cat <<EOF >&2
11
Usage:
12
    dg-cmp-results.sh [-v] [-v] [-v] <variant-name> <old-file> <new-file>
13
    <variant-name> names the desired variant, "/" must be written as "\/".
14
    Use the empty string ("") for the first variant in each file.
15
    Output is to stdout.
16
    Non-verbose output is degradation info like PASS->FAIL.
17
    -v adds improvement info like FAIL->PASS.
18
    -v -v adds info like tests that are no longer run.
19
    -v -v -v adds info for tests that have not changed status.
20
    -v -v -v -v is used for debugging.
21
EOF
22
}
23
 
24
verbose=0
25
while test "$1" = "-v"; do
26
    verbose=`expr $verbose + 1`
27
    shift
28
done
29
 
30
if test $# -ne 3 -o ! -f "$2" -o ! -f "$3"; then
31
    usage
32
    exit 1
33
fi
34
 
35
# Command differences for various platforms.
36
case `uname -s` in
37
Darwin|NetBSD)
38
    E=-E        # sed
39
    ;;
40
*)
41
    E=-r        # sed
42
    ;;
43
esac
44
 
45
# sections are identified by separator lines beginning with '\t\t==='.
46
# section 0 identifies run date, target, and host.
47
# section 1 and subsequent contain test data for a target variant.
48
# -skip to /^Running target/ and use that line to identify the variant.
49
# -subsequent lines contain the result data.  They begin with:
50
# '(PASS|FAIL|XFAIL|XPASS|UNTESTED|UNSUPPORTED|UNRESOLVED):'
51
VARIANT="$1"
52
OFILE="$2"
53
OBASE=`basename "$2"`
54
NFILE="$3"
55
NBASE=`basename "$3"`
56
 
57
echo "dg-cmp-results.sh: Verbosity is ${verbose}, Variant is \"${VARIANT}\""
58
echo
59
 
60
header="^Running target $VARIANT"
61
 
62
temp=`grep "$header" $OFILE`
63
if test -z "$temp"; then
64
    echo "Error: variant \"$VARIANT\" not found in $OFILE."
65
    exit 1
66
fi
67
temp=`grep "$header" $NFILE`
68
if test -z "$temp"; then
69
    echo "Error: variant \"$VARIANT\" not found in $NFILE."
70
    exit 1
71
fi
72
unset temp
73
 
74
# Copy out the old file's section 0.
75
echo "Older log file: $OFILE"
76
sed $E -e '/^[[:space:]]+===/,$d' $OFILE
77
 
78
# Copy out the new file's section 0.
79
echo "Newer log file: $NFILE"
80
sed $E -e '/^[[:space:]]+===/,$d' $NFILE
81
 
82
# Create a temporary file from the old file's interesting section.
83
sed $E -e "1,/$header/d" \
84
  -e '/^[[:space:]]+===/,$d' \
85
  -e '/^[A-Z]+:/!d' \
86
  -e '/^(WARNING|ERROR):/d' \
87
  -e 's/\r$//' \
88
  -e 's/^/O:/' \
89
  $OFILE |
90
  sort -s -t : -k 3b - \
91
  >/tmp/o$$-$OBASE
92
 
93
# Create a temporary file from the new file's interesting section.
94
sed $E -e "1,/$header/d" \
95
  -e '/^[[:space:]]+===/,$d' \
96
  -e '/^[A-Z]+:/!d' \
97
  -e '/^(WARNING|ERROR):/d' \
98
  -e 's/\r$//' \
99
  -e 's/^/N:/' \
100
  $NFILE |
101
  sort -s -t : -k 3b - \
102
  >/tmp/n$$-$NBASE
103
 
104
# Merge the two files, then compare adjacent lines.
105
# Comparison is complicated by tests that may be run multiple times.
106
# If that case, we assume that the order is the same in both files.
107
cat <<EOF >compare-$$.awk
108
BEGIN {
109
    FS = ":"
110
    queue1 = 1; queueN = 0; status[queue1] = ""; name[queue1] = ""
111
    verbose = verbose + 0       # Make sure it's defined.
112
}
113
 
114
# FIFO circular queue
115
function push(st, nm) {
116
    queueN += 1; status[queueN] = st; name[queueN] = nm
117
}
118
function peek() {
119
    result = 0
120
    if (queueN >= queue1) result = queue1
121
    return result
122
}
123
function drop() {
124
    queue1 += 1
125
    if (queue1 > queueN) { queue1 = 1; queueN = 0; }
126
}
127
 
128
function compare(st, nm) {
129
    old = peek()
130
    if (old == 0) {
131
        # This new test wasn't run last time.
132
        if (verbose >= 2) printf("NA->%s:%s\n", st, nm)
133
    }
134
    else {
135
        # Compare this new test to the first queued old one.
136
        if (verbose >= 4) {
137
            printf("Comparing two lines:\n O:%s:%s\n N:%s:%s\n",
138
             status[old], name[old], st, nm)
139
        }
140
        if (name[old] != nm) {
141
            # The old test wasn't run this time and
142
            # the new test wasn't run last time.
143
            if (verbose >= 2) {
144
                printf("%s->NA:%s\n", status[old], name[old])
145
                if (nm != "") printf("NA->%s:%s\n", st, nm)
146
            }
147
            drop()
148
        }
149
        else {
150
            notable = 0
151
            if (status[old] == st) {
152
                # Status of this test has not changed.
153
                if (verbose >= 3) printf("%s:%s\n", st, nm)
154
            }
155
            else if(status[old] == "PASS" && st == "XFAIL") {
156
                if (verbose >= 1) notable = 1
157
            }
158
            else if(status[old] == "PASS" || st == "FAIL") {
159
                # Test did pass but doesn't now
160
                # or didn't fail but does now.
161
                notable = 1
162
            }
163
            else if(st == "PASS") {
164
                # Test didn't pass but does now.
165
                if (verbose >= 1) notable = 1
166
            }
167
            else if(verbose >= 2) {
168
                # Miscellaneous status change.
169
                notable = 1
170
            }
171
            if (notable > 0) printf("%s->%s:%s\n", status[old], st, nm)
172
            drop()
173
        }
174
    }
175
}
176
 
177
/^O:/ {
178
    while (old = peek()) {
179
        if (name[old] == \$3) break;
180
        # The queued test is no longer run.
181
        compare("", "");
182
    }
183
    # Save this test for later comparison.
184
    push(\$2, \$3)
185
}
186
 
187
/^N:/ {
188
    compare(\$2, \$3)
189
}
190
 
191
END {
192
    while (old = peek()) compare("", "")
193
}
194
EOF
195
sort -m -s -t : -k 3b /tmp/o$$-$OBASE /tmp/n$$-$NBASE |
196
 awk -v verbose=$verbose -f compare-$$.awk /dev/stdin
197
 
198
# Delete the temporary files.
199
rm -f compare-$$.awk /tmp/o$$-$OBASE /tmp/n$$-$NBASE
200
 
201
exit 0

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.