mirror of
https://git.FreeBSD.org/ports.git
synced 2025-01-03 06:04:53 +00:00
f5c9292932
Forgotten by: pav
196 lines
12 KiB
Bash
Executable File
196 lines
12 KiB
Bash
Executable File
#!/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
|
|
|
|
HEADER_LINES=7
|
|
|
|
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 -$HEADER_LINES | grep '^port directory:' | awk '{print $3}' | \
|
|
sed -e 's,^/[^/]*/[^/]*/,,')
|
|
maintainer=$(${cat} $errordir/$filename | head -$HEADER_LINES | grep '^maintained by' | awk '{print $3}')
|
|
datetime=$(${cat} $errordir/$filename | head -$HEADER_LINES | 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 -qE "(Error: mtree file ./etc/mtree/BSD.local.dist. is missing|error in pkg_delete|filesystem was touched prior to .make install|list of extra files and directories|list of files present before this port was installed|list of filesystem changes from before and after)" $1; then
|
|
reason="mtree"; tag="mtree"
|
|
# 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: [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 "Error: shared library \".*\" does not exist" $1; then
|
|
reason="LIB_DEPENDS"; tag="libdepends"
|
|
elif bzgrep -qE "\.(c|cc|cxx|cpp|h|y)[1-9:]+ .+\.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 -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|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]: 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|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 'error: (array type has incomplete element type|conflicts with new declaration|expected.*before .class|expected primary expression|extra qualification .* on member|.*has incomplete type|invalid cast from type .* to type|invalid lvalue in (assignment|decrement|increment|unary)|invalid storage class for function|lvalue required as (increment operator|left operand)|.*should have been declared inside|static declaration of.*follows non-static declaration|two or more data types in declaration specifiers|.* was not declared in this scope)' $1; then
|
|
reason="gcc4_error"; tag="gcc4"
|
|
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 -q 'install: .*: No such file' $1; then
|
|
reason="install_error"; tag="install"
|
|
elif bzgrep -qE "(conflicts with installed package|is already installed - perhaps an older version|You may wish to ..make deinstall.. and install this port again)" $1; then
|
|
reason="depend_object"; tag="dependobj"
|
|
elif bzgrep -q "core dumped" $1; then
|
|
reason="coredump"; tag="coredump"
|
|
|
|
# below here are the less common items
|
|
|
|
elif bzgrep -qE "(.s: Assembler messages:|Cannot (determine .* target|find the byte order) for this architecture|^cc1: bad value.*for -mcpu.*switch|could not read symbols: File in wrong format|[Ee]rror: [Uu]nknown opcode|error.*Unsupported architecture|ENDIAN must be defined 0 or 1|failed to merge target-specific data|(file not recognized|failed to set dynamic section sizes): File format not recognized|impossible register constraint|inconsistent operand constraints in an .asm|Invalid configuration.*unknown.*machine.*unknown not recognized|invalid lvalue in asm statement|is only for.*, and you are running|not a valid 64 bit base/index expression|relocation R_X86_64_32.*can not be used when making a shared object|relocation truncated to fit: |shminit failed: Function not implemented|The target cpu, .*, is not currently supported.|This architecture seems to be neither big endian nor little endian|unknown register name|Unable to correct byte order|Unsupported platform, sorry|won't run on this architecture)" $1; then
|
|
reason="arch"; tag="arch"
|
|
elif bzgrep -qE "autoconf([0-9\-\.]*): (not found|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 'Checksum mismatch' $1; then
|
|
reason="checksum"; tag="checksum"
|
|
elif bzgrep -qE 'chown:.*[Ii]nvalid argument' $1; then
|
|
reason="chown"; tag="chown"
|
|
elif bzgrep -q "Shared object \"libc.so.6\" not found, required by" $1; then
|
|
reason="compat6x"; tag="compat6x"
|
|
elif bzgrep -q "error in dependency .*, exiting" $1; then
|
|
reason="depend_package"; tag="dependpkg"
|
|
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 "((Can't|unable to) open display|Cannot open /dev/tty for read|RuntimeError: cannot open display|You must run this program under the X-Window System)" $1; then
|
|
elif bzgrep -qE '(No checksum recorded for|(Maybe|Either) .* is out of date, or)' $1; then
|
|
reason="distinfo_update"; tag="distinfo"
|
|
elif bzgrep -qE "Member name contains .\.\." $1; then
|
|
reason="fetch"; tag="fetch"
|
|
elif bzgrep -qE "(pnohang: killing make checksum|fetch: transfer timed out)" $1; then
|
|
reason="fetch_timeout"; tag="fetch-timeout"
|
|
elif bzgrep -qE "(f77: not found|f77:No such file or directory|Unable to find a fortran compiler)" $1; then
|
|
reason="f77"; tag="f77"
|
|
elif bzgrep -q "See <URL:http://gcc.gnu.org/bugs.html> for instructions." $1; then
|
|
reason="gcc_bug"; tag="gcc-bug"
|
|
elif bzgrep -qE "(Run-time system build failed for some reason|tar: Error opening archive: Failed to open.*No such file or directory)" $1; then
|
|
reason="install_error"; tag="install"
|
|
elif bzgrep -qE "(cc: .*libintl.*: No such file or directory|cc: ndbm\.so: No such file or directory|error: The X11 shared library could not be loaded|libtool: link: cannot find the library|relocation against dynamic symbol|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 -q "/usr/.*/man/.*: No such file or directory" $1; then
|
|
reason="manpage"; tag="manpage"
|
|
elif bzgrep -q "out of .* hunks .*--saving rejects to" $1; then
|
|
reason="patch"; tag="patch"
|
|
elif bzgrep -qE "(/usr/local/bin/(perl|perl5.6.1):.*(not found|No such file or directory)|cp:.*site_perl: No such file or directory|perl(.*): Perl is not installed, try .pkg_add -r perl|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 -qE "(Abort trap|Bus error|Signal 1[01])" $1; then
|
|
reason="process_failed"; tag="process"
|
|
elif bzgrep -q "python: not found" $1; then
|
|
reason="python"; tag="python"
|
|
elif bzgrep -qE "(USER PID PPID PGID.*JOBC STAT TT TIME COMMAND|pnohang: killing make package)" $1; then
|
|
reason="runaway_process"; tag="runaway"
|
|
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 "shminit failed: Permission denied" $1; then
|
|
reason="sysvipc"; tag="sysvipc"
|
|
elif bzgrep -qE "(/usr/bin/ld: cannot find -l(pthread|XThrStub)|cannot find -lc_r|checking for.*lc_r\.\.\. no|Error: pthreads are required to build this package|Please install/update your POSIX threads (pthreads) library|requires.*thread support|: The -pthread option is deprecated)" $1; then
|
|
reason="threads"; tag="threads"
|
|
elif bzgrep -q "<varargs.h> is obsolete with this version of GCC" $1; then
|
|
reason="varargs"; tag="varargs"
|
|
elif bzgrep -qi 'read-only file system' $1; then
|
|
reason="WRKDIR"; tag="wrkdir"
|
|
|
|
# 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 'cc1.*warnings being treated as errors' $1; then
|
|
reason="compiler_error"; tag="cc"
|
|
elif bzgrep -q '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
|
|
|
|
# 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"
|