import cwxmlgen import cwtalker import os from Carbon import AppleEvents import Carbon.File def mkproject(outputfile, modulename, settings, force=0, templatename=None): # # Copy the dictionary # dictcopy = {} for k, v in settings.items(): dictcopy[k] = v # # Generate the XML for the project # dictcopy['mac_projectxmlname'] = outputfile + '.xml' dictcopy['mac_exportname'] = os.path.split(outputfile)[1] + '.exp' if not dictcopy.has_key('mac_dllname'): dictcopy['mac_dllname'] = modulename + '.ppc.slb' if not dictcopy.has_key('mac_targetname'): dictcopy['mac_targetname'] = modulename + '.ppc' xmlbuilder = cwxmlgen.ProjectBuilder(dictcopy, templatename=templatename) xmlbuilder.generate() if not force: # We do a number of checks and all must succeed before we decide to # skip the build-project step: # 1. the xml file must exist, and its content equal to what we've generated # 2. the project file must exist and be newer than the xml file # 3. the .exp file must exist if os.path.exists(dictcopy['mac_projectxmlname']): fp = open(dictcopy['mac_projectxmlname']) data = fp.read() fp.close() if data == dictcopy["tmp_projectxmldata"]: if os.path.exists(outputfile) and \ os.stat(outputfile)[os.path.ST_MTIME] > os.stat(dictcopy['mac_projectxmlname'])[os.path.ST_MTIME]: if os.path.exists(outputfile + '.exp'): return fp = open(dictcopy['mac_projectxmlname'], "w") fp.write(dictcopy["tmp_projectxmldata"]) fp.close() # # Generate the export file # fp = open(outputfile + '.exp', 'w') fp.write('init%s\n'%modulename) if dictcopy.has_key('extraexportsymbols'): for sym in dictcopy['extraexportsymbols']: fp.write('%s\n'%sym) fp.close() # # Generate the project from the xml # makeproject(dictcopy['mac_projectxmlname'], outputfile) def makeproject(xmlfile, projectfile): cw = cwtalker.MyCodeWarrior(start=1) cw.send_timeout = AppleEvents.kNoTimeOut xmlfss = Carbon.File.FSSpec(xmlfile) prjfss = Carbon.File.FSSpec(projectfile) cw.my_mkproject(prjfss, xmlfss) cw.Close_Project() def buildproject(projectfile): cw = cwtalker.MyCodeWarrior(start=1) cw.send_timeout = AppleEvents.kNoTimeOut prjfss = Carbon.File.FSSpec(projectfile) cw.open(prjfss) cw.Make_Project() # XXX Should set target cw.Close_Project() def cleanproject(projectfile): cw = cwtalker.MyCodeWarrior(start=1) cw.send_timeout = AppleEvents.kNoTimeOut prjfss = Carbon.File.FSSpec(projectfile) cw.open(prjfss) cw.Remove_Binaries()