Jack Jansen | 6655c4e | 1995-09-01 12:03:32 +0000 | [diff] [blame] | 1 | # |
| 2 | # fullbuild creates everything that needs to be created before a |
| 3 | # distribution can be made, and puts it all in the right place. |
| 4 | # |
| 5 | # It expects the projects to be in the places where Jack likes them: |
Jack Jansen | faad995 | 1997-09-01 15:37:07 +0000 | [diff] [blame] | 6 | # in directories named like 'build.mac'. That is fixable, |
Jack Jansen | 6655c4e | 1995-09-01 12:03:32 +0000 | [diff] [blame] | 7 | # however. |
| 8 | # |
| 9 | # NOTE: You should proably make a copy of python with which to execute this |
| 10 | # script, rebuilding running programs does not work... |
| 11 | |
Jack Jansen | faad995 | 1997-09-01 15:37:07 +0000 | [diff] [blame] | 12 | MACBUILDNO=":Mac:Include:macbuildno.h" |
| 13 | |
Jack Jansen | 6655c4e | 1995-09-01 12:03:32 +0000 | [diff] [blame] | 14 | import os |
| 15 | import sys |
| 16 | import macfs |
Jack Jansen | 1023dff | 1996-02-21 15:28:49 +0000 | [diff] [blame] | 17 | import MacOS |
Jack Jansen | f04fa72 | 1996-04-10 14:51:14 +0000 | [diff] [blame] | 18 | import EasyDialogs |
Jack Jansen | faad995 | 1997-09-01 15:37:07 +0000 | [diff] [blame] | 19 | import regex |
| 20 | import string |
Jack Jansen | 6655c4e | 1995-09-01 12:03:32 +0000 | [diff] [blame] | 21 | |
| 22 | import addpack |
Jack Jansen | 6655c4e | 1995-09-01 12:03:32 +0000 | [diff] [blame] | 23 | import aetools |
Jack Jansen | 1023dff | 1996-02-21 15:28:49 +0000 | [diff] [blame] | 24 | import AppleEvents |
Jack Jansen | 6655c4e | 1995-09-01 12:03:32 +0000 | [diff] [blame] | 25 | from Metrowerks_Shell_Suite import Metrowerks_Shell_Suite |
Jack Jansen | 82bfde9 | 1997-08-27 14:10:29 +0000 | [diff] [blame] | 26 | from CodeWarrior_Standard_Suite import CodeWarrior_Standard_Suite |
Jack Jansen | 0f00c5e | 1997-05-06 16:15:32 +0000 | [diff] [blame] | 27 | from Required_Suite import Required_Suite |
| 28 | |
| 29 | import Res |
| 30 | import Dlg |
Jack Jansen | 6655c4e | 1995-09-01 12:03:32 +0000 | [diff] [blame] | 31 | |
Jack Jansen | 82bfde9 | 1997-08-27 14:10:29 +0000 | [diff] [blame] | 32 | import BuildApplet |
Jack Jansen | 0f00c5e | 1997-05-06 16:15:32 +0000 | [diff] [blame] | 33 | import cfmfile |
| 34 | |
| 35 | # Dialog resource. Note that the item numbers should correspond |
| 36 | # to those in the DITL resource. Also note that the order is important: |
| 37 | # things are built in this order, so there should be no forward dependencies. |
| 38 | DIALOG_ID = 512 |
| 39 | |
| 40 | I_OK=1 |
| 41 | I_CANCEL=2 |
| 42 | |
Jack Jansen | 82bfde9 | 1997-08-27 14:10:29 +0000 | [diff] [blame] | 43 | I_CORE=3 |
Jack Jansen | 0f00c5e | 1997-05-06 16:15:32 +0000 | [diff] [blame] | 44 | I_PPC_PLUGINS=4 |
| 45 | I_PPC_EXTENSIONS=5 |
Jack Jansen | 82bfde9 | 1997-08-27 14:10:29 +0000 | [diff] [blame] | 46 | I_68K_PLUGINS=6 |
| 47 | I_68K_EXTENSIONS=7 |
| 48 | I_PPC_FULL=8 |
| 49 | I_PPC_SMALL=9 |
| 50 | I_68K_FULL=10 |
| 51 | I_68K_SMALL=11 |
| 52 | I_APPLETS=12 |
Jack Jansen | 0f00c5e | 1997-05-06 16:15:32 +0000 | [diff] [blame] | 53 | |
Jack Jansen | 82bfde9 | 1997-08-27 14:10:29 +0000 | [diff] [blame] | 54 | N_BUTTONS=13 |
Jack Jansen | 6655c4e | 1995-09-01 12:03:32 +0000 | [diff] [blame] | 55 | |
Jack Jansen | 82bfde9 | 1997-08-27 14:10:29 +0000 | [diff] [blame] | 56 | class MwShell(Metrowerks_Shell_Suite, CodeWarrior_Standard_Suite, |
| 57 | Required_Suite, aetools.TalkTo): |
Jack Jansen | 6655c4e | 1995-09-01 12:03:32 +0000 | [diff] [blame] | 58 | pass |
| 59 | |
Jack Jansen | f04fa72 | 1996-04-10 14:51:14 +0000 | [diff] [blame] | 60 | RUNNING=[] |
Jack Jansen | 6655c4e | 1995-09-01 12:03:32 +0000 | [diff] [blame] | 61 | |
| 62 | def buildmwproject(top, creator, projects): |
| 63 | """Build projects with an MW compiler""" |
Jack Jansen | b9e5e14 | 1996-09-20 15:30:52 +0000 | [diff] [blame] | 64 | mgr = MwShell(creator, start=1) |
Jack Jansen | 1023dff | 1996-02-21 15:28:49 +0000 | [diff] [blame] | 65 | mgr.send_timeout = AppleEvents.kNoTimeOut |
| 66 | |
Jack Jansen | 6655c4e | 1995-09-01 12:03:32 +0000 | [diff] [blame] | 67 | for file in projects: |
Jack Jansen | 82bfde9 | 1997-08-27 14:10:29 +0000 | [diff] [blame] | 68 | if type(file) == type(()): |
| 69 | file, target = file |
| 70 | else: |
| 71 | target = '' |
Jack Jansen | 6655c4e | 1995-09-01 12:03:32 +0000 | [diff] [blame] | 72 | file = os.path.join(top, file) |
| 73 | fss = macfs.FSSpec(file) |
Jack Jansen | 82bfde9 | 1997-08-27 14:10:29 +0000 | [diff] [blame] | 74 | print 'Building', file, target |
Jack Jansen | 6655c4e | 1995-09-01 12:03:32 +0000 | [diff] [blame] | 75 | mgr.open(fss) |
Jack Jansen | 82bfde9 | 1997-08-27 14:10:29 +0000 | [diff] [blame] | 76 | if target: |
| 77 | try: |
| 78 | mgr.Set_Current_Target(target) |
| 79 | except aetools.Error, arg: |
| 80 | print '**', file, target, 'Cannot select:', arg |
Jack Jansen | 1023dff | 1996-02-21 15:28:49 +0000 | [diff] [blame] | 81 | try: |
| 82 | mgr.Make_Project() |
Jack Jansen | b9e5e14 | 1996-09-20 15:30:52 +0000 | [diff] [blame] | 83 | except aetools.Error, arg: |
Jack Jansen | 82bfde9 | 1997-08-27 14:10:29 +0000 | [diff] [blame] | 84 | print '**', file, target, 'Failed:', arg |
Jack Jansen | 6655c4e | 1995-09-01 12:03:32 +0000 | [diff] [blame] | 85 | mgr.Close_Project() |
Jack Jansen | f04fa72 | 1996-04-10 14:51:14 +0000 | [diff] [blame] | 86 | ## mgr.quit() |
Jack Jansen | 6655c4e | 1995-09-01 12:03:32 +0000 | [diff] [blame] | 87 | |
| 88 | def buildapplet(top, dummy, list): |
Jack Jansen | 0f00c5e | 1997-05-06 16:15:32 +0000 | [diff] [blame] | 89 | """Create python applets""" |
Jack Jansen | 82bfde9 | 1997-08-27 14:10:29 +0000 | [diff] [blame] | 90 | template = BuildApplet.findtemplate() |
Jack Jansen | 6655c4e | 1995-09-01 12:03:32 +0000 | [diff] [blame] | 91 | for src in list: |
| 92 | if src[-3:] != '.py': |
| 93 | raise 'Should end in .py', src |
| 94 | base = os.path.basename(src) |
| 95 | dst = os.path.join(top, base)[:-3] |
| 96 | src = os.path.join(top, src) |
| 97 | try: |
| 98 | os.unlink(dst) |
| 99 | except os.error: |
| 100 | pass |
| 101 | print 'Building applet', dst |
Jack Jansen | 82bfde9 | 1997-08-27 14:10:29 +0000 | [diff] [blame] | 102 | BuildApplet.process(template, src, dst) |
Jack Jansen | 0f00c5e | 1997-05-06 16:15:32 +0000 | [diff] [blame] | 103 | |
| 104 | def buildfat(top, dummy, list): |
| 105 | """Build fat binaries""" |
| 106 | for dst, src1, src2 in list: |
| 107 | dst = os.path.join(top, dst) |
| 108 | src1 = os.path.join(top, src1) |
| 109 | src2 = os.path.join(top, src2) |
| 110 | print 'Building fat binary', dst |
| 111 | cfmfile.mergecfmfiles((src1, src2), dst) |
| 112 | |
| 113 | def handle_dialog(): |
| 114 | """Handle selection dialog, return list of selected items""" |
| 115 | d = Dlg.GetNewDialog(DIALOG_ID, -1) |
| 116 | d.SetDialogDefaultItem(I_OK) |
| 117 | d.SetDialogCancelItem(I_CANCEL) |
| 118 | results = [0]*N_BUTTONS |
| 119 | while 1: |
| 120 | n = Dlg.ModalDialog(None) |
| 121 | if n == I_OK: |
| 122 | break |
| 123 | if n == I_CANCEL: |
| 124 | return [] |
| 125 | if n < len(results): |
| 126 | results[n] = (not results[n]) |
| 127 | tp, h, rect = d.GetDialogItem(n) |
| 128 | h.as_Control().SetControlValue(results[n]) |
| 129 | rv = [] |
| 130 | for i in range(len(results)): |
| 131 | if results[i]: |
| 132 | rv.append(i) |
| 133 | return rv |
Jack Jansen | 6655c4e | 1995-09-01 12:03:32 +0000 | [diff] [blame] | 134 | |
| 135 | # |
| 136 | # The build instructions. Entries are (routine, arg, list-of-files) |
| 137 | # XXXX We could also include the builds for stdwin and such here... |
Jack Jansen | 0f00c5e | 1997-05-06 16:15:32 +0000 | [diff] [blame] | 138 | BUILD_DICT = { |
Jack Jansen | 82bfde9 | 1997-08-27 14:10:29 +0000 | [diff] [blame] | 139 | I_CORE : (buildmwproject, "CWIE", [ |
| 140 | (":build.mac:PythonCore.prj", "PythonCore"), |
| 141 | (":build.mac:Python.prj", "PythonFAT"), |
| 142 | (":build.mac:PythonApplet.prj", "PythonAppletFAT"), |
Jack Jansen | 0f00c5e | 1997-05-06 16:15:32 +0000 | [diff] [blame] | 143 | ]), |
| 144 | |
| 145 | I_PPC_PLUGINS : (buildmwproject, "CWIE", [ |
Jack Jansen | 82bfde9 | 1997-08-27 14:10:29 +0000 | [diff] [blame] | 146 | (":PlugIns:PlugIns.prj", "PlugIns.ppc"), |
Jack Jansen | 0f00c5e | 1997-05-06 16:15:32 +0000 | [diff] [blame] | 147 | ]), |
| 148 | |
| 149 | I_68K_PLUGINS : (buildmwproject, "CWIE", [ |
Jack Jansen | 82bfde9 | 1997-08-27 14:10:29 +0000 | [diff] [blame] | 150 | (":PlugIns:PlugIns.prj", "PlugIns.CFM68K"), |
Jack Jansen | 0f00c5e | 1997-05-06 16:15:32 +0000 | [diff] [blame] | 151 | ]), |
| 152 | |
| 153 | I_68K_FULL : (buildmwproject, "CWIE", [ |
Jack Jansen | 82bfde9 | 1997-08-27 14:10:29 +0000 | [diff] [blame] | 154 | (":build.macstand:PythonStandalone.prj", "Python68K"), |
Jack Jansen | 0f00c5e | 1997-05-06 16:15:32 +0000 | [diff] [blame] | 155 | ]), |
| 156 | |
| 157 | I_68K_SMALL : (buildmwproject, "CWIE", [ |
Jack Jansen | 82bfde9 | 1997-08-27 14:10:29 +0000 | [diff] [blame] | 158 | (":build.macstand:PythonStandSmall.prj", "PythonSmall68K"), |
Jack Jansen | 0f00c5e | 1997-05-06 16:15:32 +0000 | [diff] [blame] | 159 | ]), |
| 160 | |
| 161 | I_PPC_FULL : (buildmwproject, "CWIE", [ |
Jack Jansen | 82bfde9 | 1997-08-27 14:10:29 +0000 | [diff] [blame] | 162 | (":build.macstand:PythonStandalone.prj", "PythonStandalone"), |
Jack Jansen | 0f00c5e | 1997-05-06 16:15:32 +0000 | [diff] [blame] | 163 | ]), |
| 164 | |
| 165 | I_PPC_SMALL : (buildmwproject, "CWIE", [ |
Jack Jansen | 82bfde9 | 1997-08-27 14:10:29 +0000 | [diff] [blame] | 166 | (":build.macstand:PythonStandSmall.prj", "PythonStandSmall"), |
Jack Jansen | 0f00c5e | 1997-05-06 16:15:32 +0000 | [diff] [blame] | 167 | ]), |
| 168 | |
| 169 | I_PPC_EXTENSIONS : (buildmwproject, "CWIE", [ |
Jack Jansen | 82bfde9 | 1997-08-27 14:10:29 +0000 | [diff] [blame] | 170 | (":Extensions:Imaging:_imaging.prj", "_imaging.ppc"), |
| 171 | (":Extensions:Imaging:_tkinter.prj", "_tkinter.ppc"), |
| 172 | (":Extensions:NumPy:numpymodules.prj", "numpymodules.ppc"), |
Jack Jansen | 0f00c5e | 1997-05-06 16:15:32 +0000 | [diff] [blame] | 173 | ]), |
| 174 | |
| 175 | I_68K_EXTENSIONS : (buildmwproject, "CWIE", [ |
Jack Jansen | 82bfde9 | 1997-08-27 14:10:29 +0000 | [diff] [blame] | 176 | (":Extensions:Imaging:_imaging.prj", "_imaging.CFM68K"), |
| 177 | (":Extensions:Imaging:_tkinter.prj", "_tkinter.CFM68K"), |
| 178 | (":Extensions:NumPy:numpymodules.prj", "numpymodules.CFM68K"), |
Jack Jansen | 0f00c5e | 1997-05-06 16:15:32 +0000 | [diff] [blame] | 179 | ]), |
| 180 | |
| 181 | I_APPLETS : (buildapplet, None, [ |
Jack Jansen | 6655c4e | 1995-09-01 12:03:32 +0000 | [diff] [blame] | 182 | ":Mac:scripts:EditPythonPrefs.py", |
Jack Jansen | 82bfde9 | 1997-08-27 14:10:29 +0000 | [diff] [blame] | 183 | ":Mac:scripts:BuildApplet.py", |
| 184 | ":Mac:scripts:ConfigurePython.py" |
Jack Jansen | 0f00c5e | 1997-05-06 16:15:32 +0000 | [diff] [blame] | 185 | ]), |
Jack Jansen | 0f00c5e | 1997-05-06 16:15:32 +0000 | [diff] [blame] | 186 | } |
Jack Jansen | faad995 | 1997-09-01 15:37:07 +0000 | [diff] [blame] | 187 | |
| 188 | def incbuildno(filename): |
| 189 | fp = open(filename) |
| 190 | line = fp.readline() |
| 191 | fp.close() |
| 192 | |
| 193 | pat = regex.compile('#define BUILD \([0-9][0-9]*\)') |
| 194 | pat.match(line) |
| 195 | buildno = pat.group(1) |
| 196 | if not buildno: |
| 197 | raise 'Incorrect macbuildno.h line', line |
| 198 | new = string.atoi(buildno) + 1 |
| 199 | fp = open(filename, 'w') |
| 200 | fp.write('#define BUILD %d\n'%new) |
| 201 | fp.close() |
Jack Jansen | 6655c4e | 1995-09-01 12:03:32 +0000 | [diff] [blame] | 202 | |
| 203 | def main(): |
Jack Jansen | 0f00c5e | 1997-05-06 16:15:32 +0000 | [diff] [blame] | 204 | try: |
| 205 | h = Res.OpenResFile('fullbuild.rsrc') |
| 206 | except Res.Error: |
| 207 | pass # Assume we already have acces to our own resource |
| 208 | |
Jack Jansen | 6655c4e | 1995-09-01 12:03:32 +0000 | [diff] [blame] | 209 | dir, ok = macfs.GetDirectory('Python source folder:') |
| 210 | if not ok: |
| 211 | sys.exit(0) |
| 212 | dir = dir.as_pathname() |
Jack Jansen | 0f00c5e | 1997-05-06 16:15:32 +0000 | [diff] [blame] | 213 | |
| 214 | todo = handle_dialog() |
| 215 | |
Jack Jansen | faad995 | 1997-09-01 15:37:07 +0000 | [diff] [blame] | 216 | incbuildno(os.path.join(dir, MACBUILDNO)) |
| 217 | |
Jack Jansen | 0f00c5e | 1997-05-06 16:15:32 +0000 | [diff] [blame] | 218 | instructions = [] |
| 219 | for i in todo: |
| 220 | instructions.append(BUILD_DICT[i]) |
| 221 | |
| 222 | for routine, arg, list in instructions: |
Jack Jansen | 8b4c987 | 1997-05-07 15:52:12 +0000 | [diff] [blame] | 223 | routine(dir, arg, list) |
Jack Jansen | 0f00c5e | 1997-05-06 16:15:32 +0000 | [diff] [blame] | 224 | |
Jack Jansen | 6655c4e | 1995-09-01 12:03:32 +0000 | [diff] [blame] | 225 | print "All done!" |
| 226 | sys.exit(1) |
| 227 | |
| 228 | if __name__ == '__main__': |
| 229 | main() |
| 230 | |