From: Robin Dunn Date: Fri, 5 Nov 2004 00:48:54 +0000 (+0000) Subject: Some support for parallelizing builds X-Git-Url: https://git.saurik.com/wxWidgets.git/commitdiff_plain/ad65aea843a4602dfae169c492fd33273382d3ee?hp=606ce80cc8348f7121cb126386887d2ba9c3e80e Some support for parallelizing builds git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@30280 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- diff --git a/wxPython/distrib/all/build-all b/wxPython/distrib/all/build-all index 6ba3540144..736459acee 100755 --- a/wxPython/distrib/all/build-all +++ b/wxPython/distrib/all/build-all @@ -64,9 +64,15 @@ function usage { echo " skiplinux Don't do the remote Linux build" echo " skipclean Don't do the cleanup step on the remote builds" echo " skipupload Don't upload the builds to starship" + echo " parallel parallelize the builds where possible" echo "" +} + +function PrefixLines { + label=$1 + tee tmp/$label.log | awk "{ print \"** $label: \" \$0; fflush(); }" } # --------------------------------------------------------------------------- @@ -92,6 +98,7 @@ skiposx=no skiplinux=no skipclean=no skipupload=no +parallel=no for flag in $*; do case $flag in @@ -111,6 +118,8 @@ for flag in $*; do skiplinux) skiplinux=yes ;; skipclean) skipclean=yes ;; skipupload) skipupload=yes ;; + parallel) parallel=yes ;; + noparallel) parallel=no ;; help) usage; exit 1 ;; *) echo "Unknown flag \"$flag\"" @@ -193,7 +202,20 @@ fi # --------------------------------------------------------------------------- # Windows build -if [ $skipwin != yes ]; then +function DoWindowsBuild { + set -o errexit + + # test if the target machine is online + if ping -q -c1 -w1 $WIN_HOST > /dev/null; then + echo "-----------------------------------------------------------------" + echo " The $WIN_HOST machine is online, Windows build continuing..." + echo "-----------------------------------------------------------------" + else + echo "-----------------------------------------------------------------" + echo "The $WIN_HOST machine is offline, skipping the Windows build." + echo "-----------------------------------------------------------------" + return 0 + fi echo "-=-=- Starting Windows build..." echo "Copying source file and build script..." @@ -209,6 +231,15 @@ if [ $skipwin != yes ]; then echo "Fetching the results..." scp "$WIN_HOST:$WIN_BUILD/wxPython*-win32*" $STAGING_DIR ssh $WIN_HOST "rm $WIN_BUILD/wxPython*-win32*" +} + +if [ $skipwin != yes ]; then + if [ $parallel = no ]; then + DoWindowsBuild + else + DoWindowsBuild 2>&1 | PrefixLines $WIN_HOST & + winPID=$! + fi fi @@ -219,6 +250,8 @@ function DoOSXBuild { local host=$1 local flavor=$2 + set -o errexit + # test if the target machine is online if ping -q -c1 -w1 $host > /dev/null; then echo "-----------------------------------------------------------------" @@ -255,13 +288,17 @@ function DoOSXBuild { if [ $skiposx != yes ]; then - - DoOSXBuild $OSX_HOST_jaguar jaguar - DoOSXBuild $OSX_HOST_panther panther - + if [ $parallel = no ]; then + DoOSXBuild $OSX_HOST_jaguar jaguar + DoOSXBuild $OSX_HOST_panther panther + else + DoOSXBuild $OSX_HOST_jaguar jaguar 2>&1 | PrefixLines $OSX_HOST_jaguar & + DoOSXBuild $OSX_HOST_panther panther 2>&1 | PrefixLines $OSX_HOST_panther & + fi fi + # --------------------------------------------------------------------------- # Linux build @@ -270,12 +307,16 @@ fi # binary RPMs is a very simple followup step. But then add to that # the fact that we need to build on more than one distro... + + function DoLinuxBuild { local host=$1 local reltag=$2 shift;shift local pyver=$@ + set -o errexit + # test if the target machine is online if ping -q -c1 -w1 $host > /dev/null; then echo "-----------------------------------------------------------------" @@ -304,14 +345,49 @@ function DoLinuxBuild { } + + + if [ $skiplinux != yes ]; then - DoLinuxBuild co-rh9 rh9 $PYVER - DoLinuxBuild co-fc2 fc2 2.3 + if [ $parallel = no ]; then + DoLinuxBuild co-rh9 rh9 $PYVER + DoLinuxBuild co-fc2 fc2 2.3 + DoLinuxBuild co-mdk92 mdk92 2.3 + DoLinuxBuild co-mdk101 mdk101 2.3 + else + + # Since the linux builds are currently done in coLinux + # 'machines' running on the WIN_HOST let's wait for the + # windows build to be done before launching them + #if [ -n $winPID ]; then + # wait $winPID + #fi + + (DoLinuxBuild co-rh9 rh9 $PYVER 2>&1 | PrefixLines co-rh9 &; \ + DoLinuxBuild co-fc2 fc2 2.3 2>&1 | PrefixLines co-fc2 ) & + + wait $! # wait for the previous two to complete before starting the next two + + (DoLinuxBuild co-mdk92 mdk92 2.3 2>&1 | PrefixLines co-mdk92 &; \ + DoLinuxBuild co-mdk101 mdk101 2.3 2>&1 | PrefixLines co-mdk101 ) & + fi fi +# --------------------------------------------------------------------------- + +if [ $parallel = yes ]; then + + # TODO: Figure out how to test if all the builds were successful + + echo "***********************************" + echo " Waiting for builds to complete... " + echo "***********************************" + wait +fi + # --------------------------------------------------------------------------- # Final disposition of build results... diff --git a/wxPython/distrib/all/dryrun b/wxPython/distrib/all/dryrun new file mode 100755 index 0000000000..a46f597e81 --- /dev/null +++ b/wxPython/distrib/all/dryrun @@ -0,0 +1,4 @@ +#!/bin/bash + +distrib/all/build-all dryrun $* 2>&1 | tee tmp/dryrun.log +