README: +mockfail* mv
[massrebuild.git] / debuginfosize
1 #! /bin/bash
2 set -e
3 # build/znc-1.8.1-2.fc33.src.rpm.rpms
4 [ $# -eq 1 ]
5 which readelf >/dev/null
6 which llvm-dwarfdump >/dev/null
7 srcrpm=$1
8 test -e $srcrpm.rpms
9 test ! '(' -e $srcrpm.rpmsizes -a -e $srcrpm.dt5.rpm.dttypes ')'
10 test ! -e $srcrpm.rpms.d
11 : >$srcrpm.dt5.rpm.dttypes
12 origpwd="$PWD"
13 mkdir $srcrpm.rpms.d
14 pushd $srcrpm.rpms.d >/dev/null
15   rpmsbase=../../`basename $srcrpm`
16   dwzrpms=$rpmsbase.rpms
17   dtrpms=$rpmsbase.dt.rpm.rpms
18   mkdir empty
19   cd empty
20     if [ -z "$(find $dwzrpms $dtrpms -maxdepth 1 -type f)" ];then
21       popd >/dev/null
22       rm -rf $srcrpm.rpms.d
23       echo "0 0" >$srcrpm.rpmsizes
24       exit 0
25     fi
26   cd ..
27   function extract
28   {
29     for i in $1/*-debuginfo*.rpm;do
30       test ! -e $i.tgz
31       rpm2archive $i
32       test -e $i.tgz
33       tar xzf $i.tgz
34       rm -f $i.tgz
35     done
36   }
37   mkdir dwz;(cd dwz;extract $dwzrpms)
38   mkdir  dt;(cd  dt;extract  $dtrpms)
39   dwzcommon="$(find dwz/usr/lib/debug/.dwz/ -type f -printf "%s" 2>/dev/null || :)"
40   if [ -z "$dwzcommon" ];then
41     dwzcommon=0
42   fi
43   dwztot=0
44   dttot=0
45   pushd dwz >/dev/null
46     for i in `find -type f -name "*.debug*"`;do
47       dwz=$(find $i      -maxdepth 0 -printf "%s")
48       dt=$(find ../dt/$i -maxdepth 0 -printf "%s")
49       if readelf -WS $i 2>/dev/null|fgrep -q .gnu_debugaltlink;then
50         if [ $dwzcommon -eq 0 ];then
51           echo >&2 Excessive .gnu_debugaltlink: $i
52           exit 1
53         fi
54         dwz=$[$dwz+$dwzcommon]
55       fi
56       dwztot=$[$dwztot+$dwz]
57       dttot=$[$dttot+$dt]
58       llvm-dwarfdump -color=0 -debug-types --summarize-types ../dt/$i >>"$origpwd/$srcrpm".dt5.rpm.dttypes
59     done
60   popd >/dev/null
61 popd >/dev/null
62 rm -rf $srcrpm.rpms.d
63 echo "$dwztot $dttot" >$srcrpm.rpmsizes