- ## Build a cheesy makefile to run these in parallel.
- cat >build.mk <<EOF
-### -*-makefile-*-
-DSC = $dsc
-FIRST = $first
-REST = $rest
-sbuild-wrap = \\
- t=\$@; \\
- host=\$\${t\#\#*/} full=\$\${t%/*}; \\
- suite=\$\${full%%-*} target=\$\${full\#*-}; \\
- { echo started >build-status.\$\$full; \\
- sbuild \\
- --extra-package=pkgs.\$\$target/ \\
- --dist=\$\$suite --build=\$\$host --host=\$\$target \\
- --chroot=\$\$suite-\$\$host --verbose \$1 \$(DSC); \\
- rc=\$\$?; case \$\$rc in \\
- 0) echo ok >build-status.\$\$full ;; \\
- *) echo failed rc=\$\$rc >build-status.\$\$full ;; \\
- esac; } | \\
- while IFS= read -r line; do \\
- printf "%s: %s\n" "\$\$full" "\$\$line"; \\
- done; \\
- read st _ <build-status.\$\$full && \\
- case \$\$st in ok) exit 0 ;; *) exit 1 ;; esac
-all: \$(FIRST) \$(REST)
-\$(FIRST):; \$(call sbuild-wrap,$firstopt)
-\$(REST):; \$(call sbuild-wrap,--no-arch-all)
-EOF
-
- ## Make some marker files to say things are in progress.
- for i in $first $rest; do echo "starting" >build-status.${i%/*}; done
-
- ## And we're ready to go.
- mkfifo pipeout
- cat pipeout& catpid=$!
- set +e; make -fbuild.mk $parallel $makeopts -k all >pipeout
- rc=$?; set -e
- wait $!
- rm build.mk pipeout build-status.*
- find . -maxdepth 1 -type l -exec rm {} \;
+ ## Build the builds sequentially. Tests can conflict with each other,
+ ## e.g., over port numbers.
+ rc=0 buildopt=$firstopt
+ for t in $first $rest; do
+ host=${t##*/} full=${t%/*}
+ suite=${full%%-*} target=${full#*-}
+
+ ## And we're ready to go.
+ exec 3>&1
+ thisrc=$(
+ { { { { set +e
+ run sbuild --extra-package=pkgs.$target \
+ --dist=$suite --build=$host --host=$target \
+ --chroot=$suite-$host --verbose $buildopt $dsc \
+ ${dbpargs+--debbuildopts="$dbpargs"} \
+ 3>&- 4>&- 5>&-
+ echo $? >&5
+ } |
+ decor "$full" "|" >&4; } 2>&1 |
+ decor "$full" "*" >&4; } 4>&1 |
+ cat -u >&3; } 5>&1 </dev/null)
+ exec 3>&-
+ case $thisrc in 0) ;;
+ *)
+ echo failed rc=$thisrc >$stat; rc=$thisrc
+ case $keepon in nil) break ;; esac
+ ;;
+ esac
+ buildopt=--no-arch-all
+ done