+README
[massrebuild.git] / runone
1 #! /bin/bash
2 set -ex
3 repos=$1
4 shift
5 mock="mock -v -r fedora-rawhide-x86_64 --uniqueext=mass$$ --no-bootstrap-chroot --disable-plugin=yum_cache"
6 mkdir -p build
7 cd build
8 for pkg in "$@";do
9   #dnf --disablerepo='*' --enablerepo=$repos repoquery --requires "$pkg"|egrep '^(gcc|clang)' || continue
10   srcrpm="$pkg.src.rpm"
11   if [ -e "$srcrpm" ];then
12     continue
13   fi
14   rm -rf $srcrpm*
15   exec >>$srcrpm.log 2>&1
16   dnf --disablerepo='*' --enablerepo=$repos download --source "$pkg"
17   if [ ! -e $srcrpm ];then
18     touch $srcrpm.downloadfail
19     continue
20   fi
21   #rpm -q --requires -p $srcrpm|egrep '^(gcc|clang)' || continue
22   rpm2archive $srcrpm
23   rm -rf $srcrpm.d
24   mkdir $srcrpm.d
25   cd $srcrpm.d
26    tar xzf ../$srcrpm.tgz
27    rm -f ../$srcrpm.tgz
28    name=$(echo "$pkg"|sed 's/-[^-]*-[^-]*$//')
29    if [ ! -e $name.spec ];then
30      touch ../$srcrpm.specfail
31      continue
32    fi
33    (echo '%global _find_debuginfo_dwz_opts %{nil}'
34     echo '%global optflags %(echo %{optflags}|sed "s/ -g / -g -fdebug-types-section /")'
35     sed 's/^%\(\(define\|global\) *_find_debuginfo_dwz_opts\)/\1/'
36    ) <$name.spec >$name.spec.new
37    cp -p $name.spec     ../$srcrpm.spec
38    cp -p $name.spec.new ../$srcrpm.spec.new
39    diff -u $name.spec $name.spec.new || :
40    mv -f $name.spec.new $name.spec
41    if ! $mock --resultdir=$PWD/resultdir --buildsrpm --spec $name.spec --sources $PWD;then
42      touch ../$srcrpm.bsmockfail
43      continue
44    fi
45    if [ $[$(find resultdir -name "*.src.rpm"|wc -l)] -ne 1 ];then
46      touch ../$srcrpm.bsmockefail
47      continue
48    fi
49    # if not pkg.endswith('.rpm'): log.error("%s doesn't appear to be an rpm - skipping", pkg)
50    mv -f resultdir/*.src.rpm ../$srcrpm.dt.rpm
51    cd ..
52   test -e $srcrpm.dt.rpm
53   rm -rf $srcrpm.d
54   for ext in "" ".dt.rpm";do
55     resultdir=$PWD/$srcrpm$ext.resultdir
56     test ! -e $resultdir
57     set +e
58     # --chain instead of --rebuild as otherwise -a does not work
59     $mock --resultdir=$resultdir --nocheck $(: -a https://people.redhat.com/jkratoch/dwzrepo/ ) --chain $srcrpm$ext &>$srcrpm$ext.mocklog
60     rc=$?
61     set -e
62     test -e $resultdir
63     #rm -f $srcrpm$ext
64     if [ $rc -ne 0 ];then
65       touch $srcrpm$ext.mockfail
66       break
67     fi
68     # --chain ignores --resultdir
69     resultdirsrc="$(sed -n 's/^INFO: Results out to: //p' $srcrpm$ext.mocklog)"
70     if [ ! -e $resultdirsrc/*/root.log ];then
71       touch $srcrpm$ext.mockrfail
72       break
73     fi
74     # With --chain $resultdir contains just some small *.log files.
75     rm -rf $resultdir
76     mv `dirname $resultdirsrc/*/root.log` $resultdir
77     echo >$srcrpm$ext.rpmsize $(du -sbc /dev/null $resultdir/*-debuginfo*.rpm|tail -n1|awk '{print $1}')
78     size=0
79     for i in $resultdir/*-debuginfo*.rpm;do
80       if [ -e "$i" ];then
81         sizethis="$(rpm -q --qf '%{longsize}' -p $i)"
82         [[ "$sizethis" =~ ^[0-9]+$ ]]
83         size=$[$size+$sizethis]
84       fi
85     done
86     echo >$srcrpm$ext.filesize $size
87     mkdir $srcrpm$ext.rpms
88     mv -f $resultdir/*-debuginfo*.rpm $srcrpm$ext.rpms || :
89     rm -rf $resultdir
90   done
91   touch $srcrpm.done
92 done