import cwxmlgen import cwtalker import os import AppleEvents import macfs def mkproject(outputfile, modulename, settings, force=0): # # Copy the dictionary # dictcopy = {} for k, v in settings.items(): dictcopy[k] = v # # Fill in mac-specific values # dictcopy['mac_projectxmlname'] = outputfile + '.xml' dictcopy['mac_exportname'] = os.path.split(outputfile)[1] + '.exp' if not dictcopy.has_key('mac_outputdir'): dictcopy['mac_outputdir'] = ':lib:' dictcopy['mac_dllname'] = modulename + '.ppc.slb' dictcopy['mac_targetname'] = modulename + '.ppc' if os.path.isabs(dictcopy['sysprefix']): dictcopy['mac_sysprefixtype'] = 'Absolute' else: dictcopy['mac_sysprefixtype'] = 'Project' # XXX not sure this is right... # # Generate the XML for the project # xmlbuilder = cwxmlgen.ProjectBuilder(dictcopy) xmlbuilder.generate() if not force: # check whether it is the same as it was if os.path.exists(dictcopy['mac_projectxmlname']): fp = open(dictcopy['mac_projectxmlname']) data = fp.read() fp.close() if data == dictcopy["tmp_projectxmldata"]: 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 = macfs.FSSpec(xmlfile) prjfss = macfs.FSSpec(projectfile) cw.activate() cw.my_mkproject(prjfss, xmlfss) def buildproject(projectfile): cw = cwtalker.MyCodeWarrior(start=1) cw.send_timeout = AppleEvents.kNoTimeOut prjfss = macfs.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 = macfs.FSSpec(projectfile) cw.open(prjfss) cw.Remove_Binaries()