#!/bin/sh -ef cd "${workdir:?}" rpmelfsym -ap >sym awk -F'\t' '$3~/[DT]/' sym >def sort -t$'\t' -k4 -o def def nelf=`sort -u -k2,2 def |wc -l` cut -f4 def |uniq -cd >freq awk -v n=$nelf '$1defsym sort -o defsym -u defsym join -t$'\t' -14 -21 -o '1.1 1.2 1.3 1.4' def defsym >xdef # product ::= pkg1 elf1 pkg2 elf2 symtype symname join -t$'\t' -j 4 -o '1.1 1.2 1.3 2.1 2.2 2.3 0' xdef xdef | awk -F'\t' 'function prio(f) { if (f~"^/lib/lib[^/]+[.]so[^/]*$") return 1 if (f~"^/usr/lib/lib[^/]+[.]so[^/]*$") return 2 if (f~"^/usr/X11R./lib/lib[^/]+[.]so[^/]*$") return 3 if (f~"lib/lib[^/]+[.]so[^/]*$") return 4 if (f~"/lib[^/]+[.]so[^/]*$") return 5 if (f~"[^/][.]so[^/]*$") return 6 return 9 } ($2<$5 && $3==$6) { OFS="\t" pd = prio($2)-prio($5) if (pd<0 || pd==0 && length($2)<=length($5)) print $1,$2,$4,$5,$6,$7 else print $4,$5,$1,$2,$6,$7 }' >product # suspect ::= pkg1 elf1 pkg2 elf2 symtype nsym cut -f-5 product |sort |uniq -cd |sed 's/^ *\([0-9]\+\) \+\(.\+\)$/\2\t\1/' >suspect sort -o suspect -u suspect cat suspect cd -