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
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
|
#!/bin/sh
# $FreeBSD$
#
# Read a single errorlogfile and output a line of the format
# $filename|$portname|$affected|$logsize|$dir|$maintainer|\
# $reason|$tag|$broken|$datetime
#
# Originally factored out of: ports/Tools/portbuild/scripts/processlogs
filename=$1
indexdir=.
errordir=.
if [ "$2" != "" ]; then indexdir=$2; fi
if [ "$3" != "" ]; then errordir=$3; fi
indexdir=$(realpath $indexdir)
errordir=$(realpath $errordir)
indexfilename=$indexdir/INDEX
portname=$(basename $filename .log.bz2)
if [ "${portname}" = "${filename}" ]; then
cat=cat
else
cat=bzcat
fi
portname=$(basename $portname .log)
affected=$(($(grep -cF $portname < $indexfilename) -1))
logsize=$(/bin/ls -sk $errordir/$filename | awk '{print $1}')
dir=$(${cat} $errordir/$filename | head -6 | grep '^port directory:' | awk '{print $3}' | \
sed -e 's,^/[^/]*/[^/]*/,,')
maintainer=$(${cat} $errordir/$filename | head -6 | grep '^maintained by' | awk '{print $3}')
datetime=$(${cat} $errordir/$filename | head -6 | grep '^build started at' | \
sed -e 's/build started at ...//' | tr ' ' '_' )
# now try to classify the type of error found in the file.
# the first case handles failures to even try to build any
# port (i.e. HTML file no longer there, pointyhat being unable
# to fetch any file, pointyhat being able to build any port, etc.)
if [ -z "$dir" -o -z "$datetime" ]; then
reason="cluster"; tag="cluster"
elif bzgrep -q 'list of extra files and directories' $1; then
reason="mtree"; tag="mtree"
elif bzgrep -q "See <URL:http://gcc.gnu.org/bugs.html> for instructions." $1; then
reason="gcc_bug"; tag="gcc-bug"
elif bzgrep -q "See <URL:http://www.gnu.org/software/gcc/bugs.html> for instructions." $1; then
reason="gcc_bug"; tag="gcc-bug"
elif bzgrep -q 'Checksum mismatch' $1; then
reason="checksum"; tag="checksum"
elif bzgrep -qE '/usr/local/bin/(perl|perl5.6.1):.*(not found|No such file or directory)' $1; then
reason="perl"; tag="perl"
elif bzgrep -qE 'perl(.*): Perl is not installed, try .pkg_add -r perl.' $1; then
reason="perl"; tag="perl"
elif bzgrep -q 'cannot find -lc_r' $1; then
reason="threads"; tag="threads"
elif bzgrep -q "checking for.*lc_r\.\.\. no" $1; then
reason="threads"; tag="threads"
elif bzgrep -qE '(No checksum recorded for|(Maybe|Either) .* is out of date, or)' $1; then
reason="distinfo_update"; tag="distinfo"
elif bzgrep -q "checking whether apxs works.*apxs: not found" $1; then
reason="apxs"; tag="apxs"
# note: must run before the configure_error check
elif bzgrep -qE "Configuration .* not supported" $1; then
reason="arch"; tag="arch"
elif bzgrep -qE '(configure: error:|Script.*configure.*failed unexpectedly|script.*failed: here are the contents of)' $1; then
if bzgrep -qE "configure: error: cpu .* not supported" $1; then
reason="arch"; tag="arch"
elif bzgrep -qE "configure: error: (This program requires STL to compile|One or more.*STL headers are missing)" $1; then
reason="stl"; tag="stl"
elif bzgrep -qE "configure: error: [Pp]erl (5.* required|version too old)" $1; then
reason="perl"; tag="perl"
else
reason="configure_error"; tag="configure"
fi
elif bzgrep -q "Couldn't fetch it - please try" $1; then
reason="fetch"; tag="fetch"
elif bzgrep -q "out of .* hunks .*--saving rejects to" $1; then
reason="patch"; tag="patch"
elif bzgrep -q 'Error: category .* not in list of valid categories' $1; then
reason="CATEGORIES"; tag="categories"
elif bzgrep -qi 'read-only file system' $1; then
reason="WRKDIR"; tag="wrkdir"
elif bzgrep -q "Error: shared library \".*\" does not exist" $1; then
reason="LIB_DEPENDS"; tag="libdepends"
elif bzgrep -q ".*\.h: No such file" $1; then
if bzgrep -qE "(X11/.*|Xosdefs)\.h: No such file" $1; then
if bzgrep -q "XFree86-.*\.tgz" $1; then
reason="missing_header"; tag="header"
else
reason="USE_XLIB"; tag="usexlib"
fi
else
reason="missing_header"; tag="header"
fi
elif bzgrep -q "pnohang: killing make checksum" $1; then
reason="fetch_timeout"; tag="fetch-timeout"
elif bzgrep -qE "USER PID PPID PGID.*JOBC STAT TT TIME COMMAND" $1; then
reason="runaway_process"; tag="runaway"
elif bzgrep -q "pnohang: killing make package" $1; then
reason="runaway_process"; tag="runaway"
elif bzgrep -qE "pkg_(add|create):.*(can't find enough temporary space|projected size of .* exceeds available free space)" $1; then
reason="disk_full"; tag="df"
elif bzgrep -qE '(parse error|too (many|few) arguments to|argument.*doesn.*prototype|incompatible type for argument|conflicting types for|undeclared \(first use (in |)this function\)|incorrect number of parameters|has incomplete type and cannot be initialized|error: storage size.* isn.t known)' $1; then
reason="compiler_error"; tag="cc"
elif bzgrep -qE '(ANSI C.. forbids|is a contravariance violation|changed for new ANSI .for. scoping|[0-9]: passing .* changes signedness|discards qualifiers|lacks a cast|redeclared as different kind of symbol|invalid type .* for default argument to|wrong type argument to unary exclamation mark|duplicate explicit instantiation of|incompatible types in assignment|assuming . on overloaded member function|call of overloaded .* is ambiguous|declaration of C function .* conflicts with|initialization of non-const reference type|using typedef-name .* after|[0-9]: implicit declaration of function|[0-9]: size of array .* is too large|fixed or forbidden register .* for class|assignment of read-only variable|error: label at end of compound statement|error:.*(has no|is not a) member|error:.*is (private|protected)|error: uninitialized member|error: unrecognized command line option)' $1; then
reason="new_compiler_error"; tag="newgcc"
elif bzgrep -qE '(syntax error before|ISO C\+\+ forbids|friend declaration|no matching function for call to|.main. must return .int.|invalid conversion from|cannot be used as a macro name as it is an operator in C\+\+|is not a member of type|after previous specification in|no class template named|because worst conversion for the former|better than worst conversion|no match for.*operator|no match for call to|undeclared in namespace|is used as a type, but is not|error: array bound forbidden|error: class definition|error: expected constructor|error: there are no arguments|error:.*cast.*loses precision|ISO C\+\+ does not support)' $1; then
reason="bad_C++_code"; tag="badc++"
elif bzgrep -qE '(/usr/libexec/elf/ld: cannot find|undefined reference to|cannot open -l.*: No such file)' $1; then
reason="linker_error"; tag="ld"
elif bzgrep -qE 'chown:.*[Ii]nvalid argument' $1; then
reason="chown"; tag="chown"
#elif bzgrep -qE 'cp:.*Invalid argument' $1; then
# reason="munmap"; tag="munmap"
elif bzgrep -q 'install: .*: No such file' $1; then
if bzgrep -q 'install: /usr/local/www/cgi-bin.*No such file or directory' $1; then
reason="cgi-bin"; tag="cgi-bin"
else
reason="install_error"; tag="install"
fi
elif bzgrep -q "/usr/.*/man/.*: No such file or directory" $1; then
reason="manpage"; tag="manpage"
elif bzgrep -qE "(Can't|unable to) open display" $1; then
reason="DISPLAY"; tag="display"
elif bzgrep -q "conflicts with installed package" $1; then
reason="depend_object"; tag="dependobj"
elif bzgrep -q " is already installed - perhaps an older version" $1; then
reason="depend_object"; tag="dependobj"
elif bzgrep -q "You may wish to ..make deinstall.. and install this port again" $1; then
reason="depend_object"; tag="dependobj"
elif bzgrep -q "error in dependency .*, exiting" $1; then
reason="depend_package"; tag="dependpkg"
elif bzgrep -q "core dumped" $1; then
reason="coredump"; tag="coredump"
elif bzgrep -q "Segmentation fault" $1; then
reason="segfault"; tag="segfault"
elif bzgrep -q "initializer element is not constant" $1; then
reason="stdio"; tag="stdio"
elif bzgrep -q "structure has no member named" $1; then
reason="struct_changes"; tag="struct"
elif bzgrep -q "Error: alignment not a power of 2" $1; then
reason="alignment"; tag="alignment"
elif bzgrep -qE "bin.apxs:(.)(not found|No such file or directory)" $1; then
reason="apxs"; tag="apxs"
elif bzgrep -qE "failed to exec .*bin/apxs" $1; then
reason="apxs"; tag="apxs"
elif bzgrep -q ".s: Assembler messages:" $1; then
reason="arch"; tag="arch"
elif bzgrep -qE "Cannot (determine .* target|find the byte order) for this architecture" $1; then
reason="arch"; tag="arch"
elif bzgrep -qE "^cc1: bad value.*for -mcpu.*switch" $1; then
reason="arch"; tag="arch"
elif bzgrep -q "could not read symbols: File in wrong format" $1; then
reason="arch"; tag="arch"
elif bzgrep -qE "[Ee]rror: [Uu]nknown opcode" $1; then
reason="arch"; tag="arch"
elif bzgrep -qE "error.*Unsupported architecture" $1; then
reason="arch"; tag="arch"
elif bzgrep -q "ENDIAN must be defined 0 or 1" $1; then
reason="arch"; tag="arch"
elif bzgrep -q "failed to merge target-specific data" $1; then
reason="arch"; tag="arch"
elif bzgrep -qE "(file not recognized|failed to set dynamic section sizes): File format not recognized" $1; then
reason="arch"; tag="arch"
elif bzgrep -q "impossible register constraint" $1; then
reason="arch"; tag="arch"
elif bzgrep -qE "inconsistent operand constraints in an .asm" $1; then
reason="arch"; tag="arch"
elif bzgrep -qE "Invalid configuration.*unknown.*machine.*unknown not recognized" $1; then
reason="arch"; tag="arch"
elif bzgrep -q "invalid lvalue in asm statement" $1; then
reason="arch"; tag="arch"
elif bzgrep -qE "is only for.*, and you are running" $1; then
reason="arch"; tag="arch"
elif bzgrep -q "not a valid 64 bit base/index expression" $1; then
reason="arch"; tag="arch"
elif bzgrep -qE "relocation R_X86_64_32.*can not be used when making a shared object" $1; then
reason="arch"; tag="arch"
elif bzgrep -q "relocation truncated to fit: " $1; then
reason="arch"; tag="arch"
elif bzgrep -q "shminit failed: Function not implemented" $1; then
reason="arch"; tag="arch"
elif bzgrep -qE "The target cpu, .*, is not currently supported." $1; then
reason="arch"; tag="arch"
elif bzgrep -q "This architecture seems to be neither big endian nor little endian" $1; then
reason="arch"; tag="arch"
elif bzgrep -q "unknown register name" $1; then
reason="arch"; tag="arch"
elif bzgrep -q "Unable to correct byte order" $1; then
reason="arch"; tag="arch"
elif bzgrep -q "Unsupported platform, sorry" $1; then
reason="arch"; tag="arch"
elif bzgrep -q "won't run on this architecture" $1; then
reason="arch"; tag="arch"
elif bzgrep -qE "#error .Cannot compile:" $1; then
reason="assert"; tag="assert"
elif bzgrep -qE "autoconf(.*): not found" $1; then
reason="autoconf"; tag="autoconf"
elif bzgrep -qE "autoconf(.*): No such file or directory" $1; then
reason="autoconf"; tag="autoconf"
elif bzgrep -q "autoheader: not found" $1; then
reason="autoheader"; tag="autoheader"
elif bzgrep -qE "automake(.*): not found" $1; then
reason="automake"; tag="automake"
elif bzgrep -q "/usr/local/www/cgi-bin does not exist" $1; then
reason="cgi-bin"; tag="cgi-bin"
elif bzgrep -q "Shared object \"libc.so.6\" not found, required by" $1; then
reason="compat6x"; tag="compat6x"
elif bzgrep -q "Cannot open /dev/tty for read" $1; then
reason="DISPLAY"; tag="display"
elif bzgrep -q "RuntimeError: cannot open display" $1; then
reason="DISPLAY"; tag="display"
elif bzgrep -q "You must run this program under the X-Window System" $1; then
reason="DISPLAY"; tag="display"
elif bzgrep -qE "Member name contains .\.\." $1; then
reason="fetch"; tag="fetch"
elif bzgrep -q "fetch: transfer timed out" $1; then
reason="fetch_timeout"; tag="fetch-timeout"
elif bzgrep -q "fetch: transfer timed out" $1; then
reason="fetch_timeout"; tag="fetch-timeout"
elif bzgrep -q 'Run-time system build failed for some reason' $1; then
reason="install_error"; tag="install"
elif bzgrep -q 'tar: Error opening archive: Failed to open.*No such file or directory' $1; then
reason="install_error"; tag="install"
elif bzgrep -q "cc: .*libintl.*: No such file or directory" $1; then
reason="linker_error"; tag="ld"
elif bzgrep -qE "cc: ndbm\.so: No such file or directory" $1; then
reason="linker_error"; tag="ld"
elif bzgrep -q "error: The X11 shared library could not be loaded" $1; then
reason="linker_error"; tag="ld"
elif bzgrep -q "libtool: link: cannot find the library" $1; then
reason="linker_error"; tag="ld"
elif bzgrep -q "relocation against dynamic symbol" $1; then
reason="linker_error"; tag="ld"
elif bzgrep -q "Shared object.*not found, required by" $1; then
reason="linker_error"; tag="ld"
elif bzgrep -q "Could not create Makefile" $1; then
reason="makefile"; tag="makefile"
elif bzgrep -v "regression-test.continuing" $1 | grep -qE "make.*(cannot open [Mm]akefile|don.t know how to make|fatal errors encountered|No rule to make target|built-in)"; then
reason="makefile"; tag="makefile"
elif bzgrep -qE "(Error: mtree file ./etc/mtree/BSD.local.dist. is missing|error in pkg_delete|filesystem was touched prior to .make install|list of files present before this port was installed|list of filesystem changes from before and after)" $1; then
reason="mtree"; tag="mtree"
elif bzgrep -qE "cp:.*site_perl: No such file or directory" $1; then
reason="perl"; tag="perl"
elif bzgrep -q "Perl .* required--this is only version" $1; then
reason="perl"; tag="perl"
elif bzgrep -q 'BEGIN failed--compilation aborted at ..Makefile.PL line' $1; then
reason="perl5"; tag="perl5"
elif bzgrep -q "Abort trap" $1; then
reason="process_failed"; tag="process"
elif bzgrep -q "Bus error" $1; then
reason="process_failed"; tag="process"
elif bzgrep -q "Signal 1[01]" $1; then
reason="process_failed"; tag="process"
elif bzgrep -q "python: not found" $1; then
reason="python"; tag="python"
elif bzgrep -q ': The -pthread option is deprecated' $1; then
reason="threads"; tag="threads"
elif bzgrep -q "Error: pthreads are required to build this package" $1; then
reason="threads"; tag="threads"
elif bzgrep -q "Please install/update your POSIX threads (pthreads) library" $1; then
reason="threads"; tag="threads"
elif bzgrep -qE "requires.*thread support" $1; then
reason="threads"; tag="threads"
elif bzgrep -q "/usr/bin/ld: cannot find -lpthread" $1; then
reason="threads"; tag="threads"
elif bzgrep -q "/usr/bin/ld: cannot find -lXThrStub" $1; then
reason="threads"; tag="threads"
elif bzgrep -q "<varargs.h> is obsolete with this version of GCC" $1; then
reason="varargs"; tag="varargs"
# Although these can be fairly common, and thus in one sense ought to be
# earlier in the evaluation, in practice they are most often secondary
# types of errors, and thus need to be evaluated after all the specific
# cases.
elif bzgrep -qE '(gmake:.*Error [12]|tar: Error exit delayed from previous errors)' $1; then
reason="install_error"; tag="install"
elif bzgrep -q "Cannot stat: " $1; then
reason="configure_error"; tag="configure"
elif bzgrep -q "/usr/bin/ld: cannot find -l" $1; then
reason="linker_error"; tag="ld"
elif bzgrep -q "cd: can't cd to" $1; then
reason="NFS"; tag="nfs"
elif bzgrep -q "pkg_create: make_dist: tar command failed with code" $1; then
reason="PLIST"; tag="plist"
else
reason="???"; tag="unknown"
fi
# XXX MCL perhaps segfault, coredump should be unified into process failed?
# clean up some error cases -- the way .logs works, it expects that
# every field in it MUST be nonblank, so we insert a metatoken here.
# See below.
if [ -z "$dir" ]; then
dir="NONE"
fi
if [ -z "$maintainer" ]; then
maintainer="NONE"
fi
if [ -z "$datetime" ]; then
datetime="NONE"
fi
broken="no"
if bzgrep -q "Trying build of .* even though it is marked BROKEN" $1; then
broken="broken"
fi
echo "$filename|$portname|$affected|$logsize|$dir|$maintainer|$reason|$tag|$broken|$datetime|$errordir"
|