2 # --------------------------------------------------------------------------- 
   3 # Master build script for building all the installers and such on all the  
   4 # build machines in my lab, and then distributing the results as needed. 
   5 # --------------------------------------------------------------------------- 
  10 # --------------------------------------------------------------------------- 
  11 # Some control variables... 
  13 # the local spot that we put everything when done, before possibly copying  
  18 # host name of the machine to use for windows builds 
  20 # Where is the build dir from the remote machine's perspective? 
  25 OSX_HOST_panther
=bigmac
 
  26 OSX_HOST_jaguar
=whopper
 
  30 # Alsmost the same...  See below for hosts and other info 
  31 LINUX_BUILD
=/tmp
/BUILD
 
  34 # Upload server locations 
  35 UPLOAD_HOST
=starship.python.net
 
  36 UPLOAD_DAILY_ROOT
=/home
/crew
/robind
/public_html
/wxPython
/daily
 
  37 UPLOAD_PREVIEW_ROOT
=/home
/crew
/robind
/public_html
/wxPython
/preview
 
  41 # --------------------------------------------------------------------------- 
  46     echo "Usage: $0 [command flags...]" 
  49     echo "   dryrun       Do the build, but don't copy anywhere (default)" 
  50     echo "   daily        Do a daily build, copy to starship" 
  51     echo "   release      Do a normal release build, copy to starship" 
  53     echo "optional command flags:" 
  54     echo "   2.2          Build for Python 2.2 (default=off)" 
  55     echo "   2.3          Build for Python 2.3 (default=on)" 
  56     echo "   all          Build for all supported Python versions" 
  58     echo "   skipsource   Don't build the source archives, use the ones" 
  59     echo "                already in the staging dir." 
  60     echo "   onlysource   Exit after building the source archives" 
  61     echo "   skipwin      Don't do the remote Windows build" 
  62     echo "   skiposx      Don't do the remote OSX build" 
  63     echo "   skiplinux    Don't do the remote Linux build" 
  64     echo "   skipclean    Don't do the cleanup step on the remote builds" 
  70 # --------------------------------------------------------------------------- 
  72 # Make sure we are running in the right directory.  TODO: make this 
  73 # test more robust.  Currenly we just test for the presence of 
  74 # 'wxPython' and 'wx' subdirs. 
  75 if [ ! -d wxPython 
-o ! -d wx 
]; then   
  76     echo "Please run this script from the root wxPython directory." 
  82 # Set defaults and check the command line options 
  94         dryrun
)   KIND
=dryrun                    
;; 
  96         release
)  KIND
=release                   
;; 
 100         all
)      PYVER
="2.2 2.3"                ;; 
 102         skipsource
)  skipsource
=yes              ;; 
 103         onlysource
)  onlysource
=yes              ;; 
 104         skipwin
)     skipwin
=yes                 ;; 
 105         skiposx
)     skiposx
=yes                 ;; 
 106         skiplinux
)   skiplinux
=yes               ;; 
 107         skipclean
)   skipclean
=yes               ;; 
 109         help) usage
; exit 1                      ;; 
 110         *)    echo "Unknown flag \"$flag\"" 
 117 # ensure the staging area exists 
 118 if [ ! -d $STAGING_DIR ]; then  
 119     mkdir -p $STAGING_DIR 
 122 # Figure out the wxPython version number, possibly adjusted for being a daily build 
 123 if [ $KIND = daily 
]; then 
 124     DAILY
=`date +%Y%m%d`   # should it include the hour too?  2-digit year? 
 125     echo $DAILY > DAILY_BUILD
 
 127 VERSION
=`python -c "import setup;print setup.VERSION"` 
 130 #echo VERSION=$VERSION 
 133 echo "Getting started at " `date` 
 135 # --------------------------------------------------------------------------- 
 136 # Make the sources and other basic stuff. 
 138 if [ $skipsource != yes -o $onlysource = yes ]; then 
 140     # clean out the local dist dir 
 143     # Regenerate the reST docs 
 144     echo "Regenerating the reST docs..." 
 147         docutils
-html $x `basename $x .txt`.html
 
 151     # build the doc and demo tarballs 
 155     # build the new docs too 
 158     # make the source tarball 
 159     distrib
/makerpm 
2.3 skipclean skiprpm gtk2
 
 161     # make the source RPMs 
 162     for ver 
in $PYVER; do  
 163         distrib
/makerpm 
$ver skipclean skipcopy skiptar srpm
 
 164         distrib
/makerpm 
$ver skipclean skipcopy skiptar srpm gtk2
 
 167     # Copy everything to the staging dir 
 168     echo "Moving stuff to $STAGING_DIR..." 
 170     mv dist
/* $STAGING_DIR 
 171     for doc 
in CHANGES BUILD INSTALL MigrationGuide default
; do 
 172         cp docs
/$doc.
* $STAGING_DIR 
 176     echo "Cleaning up..." 
 181 if [ $KIND = daily 
]; then 
 185 if [ $onlysource = yes ]; then 
 189 # --------------------------------------------------------------------------- 
 192 if [ $skipwin != yes ]; then 
 193     echo "-=-=- Starting Windows build..." 
 195     echo "Copying source file and build script..." 
 196     scp 
$STAGING_DIR/wxPythonSrc
-$VERSION.
tar.gz \
 
 197         distrib
/all
/build
-windows \
 
 200      echo "Running build script on $WIN_HOST..." 
 201      wxdir
=$WIN_BUILD/wxPythonSrc
-$VERSION 
 203      ssh $WIN_HOST "cd $WIN_BUILD && $cmd $wxdir $WIN_BUILD $skipclean $VERSION $PYVER && rm $cmd" 
 205      echo "Fetching the results..." 
 206      scp 
$WIN_HOST:$WIN_BUILD/wxPythonWIN32
*  $STAGING_DIR 
 207      ssh $WIN_HOST "rm $WIN_BUILD/wxPythonWIN32*" 
 211 # --------------------------------------------------------------------------- 
 214 function DoOSXBuild 
{ 
 218     # test if the target machine is online 
 219     if ping -q -c1 -w1 $host > /dev
/null
; then 
 220         echo "-----------------------------------------------------------------" 
 221         echo " The $host machine is online, OSX-$flavor build continuing..." 
 222         echo "-----------------------------------------------------------------" 
 224         echo "-----------------------------------------------------------------" 
 225         echo "The $host machine is offline, skipping the OSX-$flavor build." 
 226         echo "-----------------------------------------------------------------" 
 230     echo "-=-=- Starting OSX-$flavor build on $host..." 
 232     echo "Copying source files and build script..." 
 233     ssh root@
$host "mkdir -p $OSX_BUILD && rm -rf $OSX_BUILD/* || true" 
 234     scp 
$STAGING_DIR/wxPythonSrc
-$VERSION.
tar.gz \
 
 235         $STAGING_DIR/wxPythonDocs
-$VERSION.
tar.gz \
 
 236         $STAGING_DIR/wxPythonDemo
-$VERSION.
tar.gz \
 
 237         distrib
/all
/build
-osx \
 
 238         root@
$host:$OSX_BUILD 
 240      echo "Running build script on $host..." 
 241      wxdir
=$OSX_BUILD/wxPythonSrc
-$VERSION 
 243      ssh root@
$host "cd $OSX_BUILD && $cmd $wxdir $OSX_BUILD $skipclean $VERSION $flavor $PYVER && rm $cmd" 
 245      echo "Fetching the results..." 
 246      scp 
"root@$host:$OSX_BUILD/wxPythonOSX*"  $STAGING_DIR 
 247      ssh root@
$host "rm $OSX_BUILD/wxPythonOSX*" 
 252 if [ $skiposx != yes ]; then 
 254     DoOSXBuild 
$OSX_HOST_panther panther
 
 255     DoOSXBuild 
$OSX_HOST_jaguar jaguar
 
 260 # --------------------------------------------------------------------------- 
 263 # The remote Linux builds are different than those above.  The source 
 264 # RPMs were already built in the source step, and so building the 
 265 # binary RPMs is a very simple followup step.  But then add to that 
 266 # the fact that we need to build on more than one distro... 
 268 function DoLinuxBuild 
{ 
 274     # test if the target machine is online 
 275     if ping -q -c1 -w1 $host > /dev
/null
; then 
 276         echo "-----------------------------------------------------------------" 
 277         echo " The $host machine is online, build continuing..." 
 278         echo "-----------------------------------------------------------------" 
 280         echo "-----------------------------------------------------------------" 
 281         echo "The $host machine is offline, skipping the binary RPM build." 
 282         echo "-----------------------------------------------------------------" 
 286     echo "Copying source files and build script..." 
 287     ssh root@
$host "mkdir -p $LINUX_BUILD && rm -rf $LINUX_BUILD/*" 
 288     scp 
$STAGING_DIR/wxPython
*.src.rpm \
 
 289         distrib
/all
/build
-linux \
 
 290         root@
$host:$LINUX_BUILD 
 292     echo "Running build script on $host..." 
 294     ssh root@
$host "cd $LINUX_BUILD && ./build-linux $reltag $skipclean $VERSION $pyver" 
 296     echo "Fetching the results..." 
 297     scp 
"root@$host:$LINUX_BUILD/wxPythonGTK*.i[0-9]86.rpm"  $STAGING_DIR 
 298     ssh root@
$host "rm $LINUX_BUILD/wxPythonGTK*.i[0-9]86.rpm" 
 302 if [ $skiplinux != yes ]; then 
 304     DoLinuxBuild co
-rh9 RH9 
$PYVER 
 305     DoLinuxBuild co
-fc2 FC2 
2.3 
 310 # --------------------------------------------------------------------------- 
 311 # Final disposition of build results... 
 313 chmod a
+r 
$STAGING_DIR/* 
 315 if [ $KIND = dryrun 
]; then 
 317     echo "Finished at " `date` 
 322 if [ $KIND = daily 
]; then  
 324     destdir
=$UPLOAD_DAILY_ROOT/$DAILY 
 325     echo "Copying to the starship at $destdir..." 
 326     ssh $UPLOAD_HOST "mkdir -p $destdir" 
 327     scp 
$STAGING_DIR/* $UPLOAD_HOST:/$destdir 
 328     ssh $UPLOAD_HOST "cd $destdir && ls -al" 
 331     echo "Cleaning up staging dir..." 
 335     # TODO: something to remove old builds from starship, keeping  
 338     # Send email to wxPython-dev 
 340     TO
=wxPython
-dev@lists.wxwidgets.org
 
 342     cat <<EOF  | /usr/sbin/sendmail  $TO 
 343 From: R'bot <rbot@wxpython.org> 
 345 Subject: $DAILY test build uploaded 
 350 A new test build of wxPython has been uploaded to starship.   
 353    URL:     http://starship.python.net/crew/robind/wxPython/daily/$DAILY 
 354    Changes: http://starship.python.net/crew/robind/wxPython/daily/$DAILY/CHANGES.html 
 361     echo "Finished at " `date` 
 366 if [ $KIND = release 
]; then  
 368     echo "Copying to the local file server..." 
 369     destdir
=/stuff
/Development
/wxPython
/dist
/$VERSION 
 371     cp $STAGING_DIR/* $destdir 
 373     echo "Copying to the starship..." 
 374     destdir
=$UPLOAD_PREVIEW_ROOT/$VERSION 
 375     ssh $UPLOAD_HOST "mkdir -p $destdir" 
 376     scp 
$STAGING_DIR/* $UPLOAD_HOST:/$destdir 
 378     echo "Cleaning up staging dir..." 
 382     # Send email to wxPython-dev 
 384     TO
=wxPython
-dev@lists.wxwidgets.org
 
 386     cat <<EOF  | /usr/sbin/sendmail  $TO 
 387 From: R'bot <rbot@wxpython.org> 
 389 Subject: $VERSION release candidate build uploaded 
 394 A new RC build of wxPython has been uploaded to starship.   
 397    URL:     http://starship.python.net/crew/robind/wxPython/preview/$VERSION 
 398    Changes: http://starship.python.net/crew/robind/wxPython/preview/$VERSION/CHANGES.html 
 405     echo "Finished at " `date` 
 410 # ---------------------------------------------------------------------------