]>
git.saurik.com Git - wxWidgets.git/blob - wxPython/distrib/all/build-all
   2 #---------------------------------------------------------------------- 
   4 # Purpose:     Master build script for building all the installers and 
   5 #              such on all the build machines in my lab, and then  
   6 #              distributing the results as needed. 
   8 #              This will replace the build-all bash script and is 
   9 #              needed because the needs of the build have outgrown 
  10 #              what I can do with bash. 
  14 # Created:     05-Nov-2004 
  16 # Copyright:   (c) 2004 by Total Control Software 
  17 # Licence:     wxWindows license 
  18 #---------------------------------------------------------------------- 
  23 from taskrunner 
import Job
, Task
, TaskRunner
 
  25 #---------------------------------------------------------------------- 
  29     def write(self
, filename
="config", outfile
=None): 
  31             f 
= file(filename
, "w") 
  34         for k
, v 
in self
.__dict
__.items(): 
  35             f
.write('%s="%s"\n' % (k
, v
)) 
  39 # the local spot that we put everything when done, before possibly copying  
  41 config
.STAGING_DIR 
= "./BUILD" 
  44 # host name of the machine to use for windows builds 
  45 config
.WIN_HOST 
= "beast" 
  46 # Where is the build dir from the remote machine's perspective? 
  47 config
.WIN_BUILD 
= "/c/BUILD" 
  51 config
.OSX_HOST_panther 
= "bigmac" 
  52 config
.OSX_HOST_jaguar 
= "whopper" 
  53 config
.OSX_BUILD 
= "/BUILD" 
  56 # Alsmost the same...  See below for hosts and other info 
  57 config
.LINUX_BUILD 
= "/tmp/BUILD" 
  60 # Upload server locations 
  61 config
.UPLOAD_HOST 
= "starship.python.net" 
  62 config
.UPLOAD_DAILY_ROOT 
= "/home/crew/robind/public_html/wxPython/daily" 
  63 config
.UPLOAD_PREVIEW_ROOT 
= "/home/crew/robind/public_html/wxPython/rc" 
  65 # defaults for build options 
  66 config
.KIND 
= "dryrun" 
  67 config
.skipsource 
= "no" 
  68 config
.onlysource 
= "no" 
  69 config
.skipdocs 
= "no" 
  72 config
.skiplinux 
= "no" 
  73 config
.skipclean 
= "no" 
  74 config
.skipupload 
= "no" 
  75 config
.skipnewdocs 
= "no" 
  76 config
.startcohost 
= "yes" 
  78 #---------------------------------------------------------------------- 
  79 # Define all the build tasks 
  84 CFGFILE 
= "./tmp/config" 
  87 # Things that need to be done before any of the builds 
  88 initialTask 
= Task([ Job("", ["distrib/all/build-setup", CFGFILE
]), 
  89                      Job("", ["distrib/all/build-docs", CFGFILE
]), 
  90                      Job("", ["distrib/all/build-sources", CFGFILE
]), 
  93 # Build tasks.  Anything that can be done in parallel (depends greatly 
  94 # on the nature of the build machines configurations...) is a separate 
  97 jaguarTask 
=  Task( Job("whopper.23", 
  98                         ["distrib/all/build-osx", CFGFILE
, config
.OSX_HOST_jaguar
, "jaguar", "2.3"]) ) 
 100 pantherTask 
=  Task([ Job("bigmac.23",  
 101                           ["distrib/all/build-osx", CFGFILE
, config
.OSX_HOST_panther
, "panther", "2.3"]), 
 103                           ["distrib/all/build-osx", CFGFILE
, config
.OSX_HOST_panther
, "panther", "2.4"]) 
 106 beastTask1 
= Task([ Job("beast.23",     ["distrib/all/build-windows", CFGFILE
, "2.3"]), 
 107                     Job("beast.24",     ["distrib/all/build-windows", CFGFILE
, "2.4"]), 
 108                     Job("co-mdk102.24", ["distrib/all/build-rpm", CFGFILE
, "beast", "co-mdk102","mdk102","2.4"]), 
 111 beastTask2 
= Task([ Job("co-fc2.23",    ["distrib/all/build-rpm", CFGFILE
, "beast", "co-fc2",   "fc2",   "2.3"]), 
 112                     Job("co-mdk101.23", ["distrib/all/build-rpm", CFGFILE
, "beast", "co-mdk101","mdk101","2.3"]), 
 113                     Job("co-fc2.24",    ["distrib/all/build-rpm", CFGFILE
, "beast", "co-fc2",   "fc2",   "2.4"]), 
 114                     #Job("co-mdk101.24", ["distrib/all/build-rpm", CFGFILE, "beast", "co-mdk101","mdk101","2.4"]), 
 117 cyclopsTask 
= Task([ Job("co-mdk92.23",  ["distrib/all/build-rpm", CFGFILE
, "cyclops", "co-mdk92", "mdk92", "2.3"]), 
 118                      Job("co-rh9.23",    ["distrib/all/build-rpm", CFGFILE
, "cyclops", "co-rh9",   "rh9",   "2.3"]), 
 119                      Job("co-mdk92.24",  ["distrib/all/build-rpm", CFGFILE
, "cyclops", "co-mdk92", "mdk92", "2.4"]), 
 120                      Job("co-rh9.24",    ["distrib/all/build-rpm", CFGFILE
, "cyclops", "co-rh9",   "rh9",   "2.4"]), 
 123 buildTasks 
= [ jaguarTask
, 
 130 # Finalization.  This is for things that must wait until all the 
 131 # builds are done, such as copying the installers someplace, sending 
 133 finalizationTask 
= Task( Job("", ["distrib/all/build-finalize", CFGFILE
]) ) 
 136 #---------------------------------------------------------------------- 
 140     print "Usage: build-all [command flags...]" 
 143     print "   dryrun       Do the build, but don't copy anywhere (default)" 
 144     print "   daily        Do a daily build, copy to starship" 
 145     print "   release      Do a normal release (cantidate) build, copy to starship" 
 147     print "optional command flags:" 
 148     print "   skipsource   Don't build the source archives, use the ones" 
 149     print "                already in the staging dir." 
 150     print "   onlysource   Exit after building the source and docs archives" 
 151     print "   skipdocs     Don't rebuild the docs" 
 152     print "   skipwin      Don't do the remote Windows build" 
 153     print "   skiposx      Don't do the remote OSX build" 
 154     print "   skiplinux    Don't do the remote Linux build" 
 155     print "   skipclean    Don't do the cleanup step on the remote builds" 
 156     print "   skipupload   Don't upload the builds to starship" 
 158     print "   nocohost     Don't start the coLinux sessions if they are" 
 159     print "                not already online" 
 163 #---------------------------------------------------------------------- 
 166     # Make sure we are running in the right directory.  TODO: make 
 167     # this test more robust.  Currenly we just test for the presence 
 168     # of 'wxPython' and 'wx' subdirs. 
 169     if not os
.path
.isdir("wxPython") or not os
.path
.isdir("wx"): 
 170         print "Please run this script from the root wxPython directory." 
 173     # Check command line flags 
 175         if flag 
in ["dryrun", "daily", "release"]: 
 178         elif flag 
== "skipsource": 
 179             config
.skipsource 
= "yes" 
 181         elif flag 
== "onlysource": 
 182             config
.onlysource 
= "yes" 
 184         elif flag 
== "skipdocs": 
 185             config
.skipdocs 
= "yes" 
 187         elif flag 
== "skipnewdocs": 
 188             config
.skipnewdocs 
= "yes" 
 190         elif flag 
== "skipwin": 
 191             config
.skipwin 
= "yes" 
 193         elif flag 
== "skiposx": 
 194             config
.skiposx 
= "yes" 
 196         elif flag 
== "skiplinux": 
 197             config
.skiplinux 
= "yes" 
 199         elif flag 
== "skipclean": 
 200             config
.skipclean 
= "yes" 
 202         elif flag 
== "skipupload": 
 203             config
.skipupload 
= "yes" 
 205         elif flag 
== "nocohost": 
 206             config
.startcohost 
= "no" 
 209             print 'Unknown flag: "%s"' % flag
 
 214     # ensure the staging area exists 
 215     if not os
.path
.exists(config
.STAGING_DIR
): 
 216         os
.makedirs(config
.STAGING_DIR
) 
 218     # Figure out the wxPython version number, possibly adjusted for being a daily build 
 219     if config
.KIND 
== "daily": 
 221         config
.DAILY 
= time
.strftime("%Y%m%d")   # should it include the hour too?  2-digit year? 
 222         file("DAILY_BUILD", "w").write(config
.DAILY
) 
 225     config
.VERSION 
= setup
.VERSION
 
 227     # write the config file where the build scripts can find it 
 228     config
.write(CFGFILE
) 
 229     print "Build getting started at: ", time
.ctime() 
 232     # Run the first task, which will create the docs and sources tarballs 
 233     tr 
= TaskRunner(initialTask
) 
 236     # cleanup the DAILY_BUILD file 
 237     if config
.KIND 
== "daily": 
 238         os
.unlink("DAILY_BUILD") 
 241     if rc 
!= 0 or config
.onlysource 
== "yes": 
 245     # Run the main build tasks 
 246     tr 
= TaskRunner(buildTasks
) 
 252     # when all the builds are done, run the finalization task 
 253     tr 
= TaskRunner(finalizationTask
) 
 259     print "Build finished at: ", time
.ctime() 
 265 if __name__ 
== "__main__":