#!/usr/bin/env php \n"); function parseTime($time) { if (isset($time['ts'])) return $time['ts']; return $time['h'] * 3600 + $time['m'] * 60 + $time['s']; } $failed = array(); $found = array(); array_shift($argv); $unique = false; if ($argv[0] == '-u') { array_shift($argv); $unique = true; } $brief = false; if ($argv[0] == '-b') { array_shift($argv); $brief = true; } foreach ($argv as $fname) { $fh = fopen($fname, 'r'); if ($fh === false) die("File not found: $fname\n"); echo "Reading $fname...\n"; $lineNo = 0; unset($lastLine); while (!feof($fh)) { $lineNo++; $line = fgets($fh); // open("/lib/x86_64-linux-gnu/tls/x86_64/libkdeui.so.5", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory) if (preg_match('#^(\d+\s+)?((?\d+):(?\d+):(?\d+(\.\d+)?)|(?\d+\.\d+))\s#', $line, $out) >= 1) { $time = parseTime($out); if (isset($lastLine)) { if ($time < $lastTime) $lastTime -= 86400; $delay = (int)($time - $lastTime); if ($delay > 3) { echo "\n------------- $delay s Delay detected in $fname at line $lineNo:\n$lastLine$line"; } } $lastLine = $line; $lastTime = $time; } if (preg_match('#^(\d+\s+)?(\d+:\d+:\d+\.?\d*\s+|\d+\.\d+\s+)?(?access|stat|lstat|statat|stat64|lstat64|readlink|open|openat|execve)\([^"\)]*"(?[^"]*)".*\)\s+=\s+(?\S+)(\s+(?\S+)\s+|$)#', $line, $out) < 1) continue; //echo "Match: {$out['lib']} -> {$out['ret']} ({$out['err']})\n"; $file = basename($out['lib']); $file = preg_replace('/\.so(\.\d+)*$/', '', $file); if ($out['ret'] < 0) { $str = ':-( ' . $out['lib'] . ' *** (' . (isset($out['err']) ? $out['err'] : 'Unknown Error') . ') (' . $out[ 'action'] . ')'; if (isset($found[$file])) { if (!$unique || !in_array($str, $found[$file])) $found[$file][$str] = $str; } else { if (!$unique || !isset($failed[$file]) || !in_array($str, $failed[$file])) $failed[$file][$str] = $str; } } else { if (isset($failed[$file])) { $found[$file] =& $failed[$file]; unset($failed[$file]); } $str = ':-) ' . $out['lib'] . ' (' . $out['action'] . ')'; if (!$unique || !isset($found[$file]) || !in_array($str, $found[$file])) $found[$file][$str] = $str; } } fclose($fh); } if ($brief) { foreach ($found as $key => $val) { echo "Found: $key\n"; } foreach ($failed as $key => $val) { echo "Missing: $key\n"; } } else { echo "│\n│\n│\n│ ******* Found libraries *******************************************************\n"; foreach ($found as $key => $val) { echo "│\n├──┬ $key\n"; $count = count($val); $i = 1; foreach ($val as $loc) { if ($i == $count) echo "│ ╰── $loc\n"; else echo "│ ├── $loc\n"; ++$i; } } echo "│\n│\n│\n│ ******* Missing libraries *****************************************************\n"; foreach ($failed as $key => $val) { echo "│\n├──┬ $key\n"; $count = count($val); $i = 1; foreach ($val as $loc) { if ($i == $count) echo "│ ╰── $loc\n"; else echo "│ ├── $loc\n"; ++$i; } } }