summaryrefslogtreecommitdiffstats
path: root/Mac/Lib
diff options
context:
space:
mode:
Diffstat (limited to 'Mac/Lib')
-rw-r--r--Mac/Lib/mkcwproject/__init__.py59
-rw-r--r--Mac/Lib/mkcwproject/cwtalker.py26
-rw-r--r--Mac/Lib/mkcwproject/cwxmlgen.py (renamed from Mac/Lib/mkcwproject/mkcwproject.py)15
-rw-r--r--Mac/Lib/mkcwproject/template/template-searchdirs.xml9
-rw-r--r--Mac/Lib/mkcwproject/template/template.prj.xml20
5 files changed, 119 insertions, 10 deletions
diff --git a/Mac/Lib/mkcwproject/__init__.py b/Mac/Lib/mkcwproject/__init__.py
new file mode 100644
index 0000000..9664542
--- /dev/null
+++ b/Mac/Lib/mkcwproject/__init__.py
@@ -0,0 +1,59 @@
+import cwxmlgen
+import cwtalker
+
+def mkproject(outputfile, modulename, settings):
+ #
+ # 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'
+ dictcopy['mac_outputdir'] = ':lib:' # XXX Is this correct??
+ dictcopy['mac_dllname'] = modulename + '.ppc.slb'
+ dictcopy['mac_targetname'] = modulename + '.ppc'
+ of 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()
+ fp = open(dictcopy['mac_projectxmlname'], "w")
+ fp.write(dict["tmp_projectxmldata"])
+ fp.close()
+ #
+ # Generate the export file
+ #
+ fp = open(outputfile + '.exp', 'w')
+ fp.write('init%s\n'%modulename)
+ fp.close()
+ #
+ # Generate the project from the xml
+ #
+ cw = cwtalker.MyCodeWarrior(start=1)
+ cw.send_timeout = AppleEvents.kNoTimeOut
+ xmlfss = macfs.FSSpec(dictcopy['mac_projectxmlname'])
+ prjfss = macfs.FSSpec(outputfile)
+ 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
+
+def cleanproject(projectfile):
+ cw = cwtalker.MyCodeWarrior(start=1)
+ cw.send_timeout = AppleEvents.kNoTimeOut
+ prjfss = macfs.FSSpec(projectfile)
+ cw.open(prjfss)
+ cw.Remove_Binaries()
+
diff --git a/Mac/Lib/mkcwproject/cwtalker.py b/Mac/Lib/mkcwproject/cwtalker.py
new file mode 100644
index 0000000..fbce620
--- /dev/null
+++ b/Mac/Lib/mkcwproject/cwtalker.py
@@ -0,0 +1,26 @@
+import CodeWarrior
+
+class MyCodeWarrior(CodeWarrior.CodeWarrior):
+ # Bug in the CW OSA dictionary
+ def export(self, object, _attributes={}, **_arguments):
+ """export: Export the project file as an XML file
+ Keyword argument _in: the XML file in which to export the project
+ Keyword argument _attributes: AppleEvent attribute dictionary
+ """
+ _code = 'CWIE'
+ _subcode = 'EXPT'
+
+ aetools.keysubst(_arguments, self._argmap_export)
+ _arguments['----'] = _object
+
+
+ _reply, _arguments, _attributes = self.send(_code, _subcode,
+ _arguments, _attributes)
+ if _arguments.has_key('errn'):
+ raise aetools.Error, aetools.decodeerror(_arguments)
+ # XXXX Optionally decode result
+ if _arguments.has_key('----'):
+ return _arguments['----']
+
+ def my_mkproject(self, prjfile, xmlfile):
+ self.make(new=CodeWarrior.project_document, with_data=xmlfile, at=prjfile)
diff --git a/Mac/Lib/mkcwproject/mkcwproject.py b/Mac/Lib/mkcwproject/cwxmlgen.py
index 7889b76..b29786f 100644
--- a/Mac/Lib/mkcwproject/mkcwproject.py
+++ b/Mac/Lib/mkcwproject/cwxmlgen.py
@@ -9,6 +9,7 @@ TEMPLATELIST= [
("tmp_allsources", "file", "template-allsources.xml", "sources"),
("tmp_linkorder", "file", "template-linkorder.xml", "sources"),
("tmp_grouplist", "file", "template-grouplist.xml", "sources"),
+ ("tmp_extrasearchdirs", "file", "template-searchdirs.xml", "extrasearchdirs"),
("tmp_projectxmldata", "file", "template.prj.xml", None)
]
@@ -66,11 +67,15 @@ class ProjectBuilder:
def _test():
dict = {
- "mac_projectxmlname" : "xxnew.prj.xml",
- "mac_targetname" : "xxnew.ppc",
- "mac_dllname" : "xxnew.ppc.slb",
- "sources" : ["xxnewmodule.c"],
- "mac_exportname" : "xxnew.prj.exp",
+ "mac_projectxmlname" : "controlstrip.prj.xml", # The XML filename (full path)
+ "mac_exportname" : "controlstrip.prj.exp", # Export file (relative to project)
+ "mac_outputdir" : ":", # The directory where the DLL is put (relative to project)
+ "mac_dllname" : "controlstrip.ppc.slb", # The DLL filename (within outputdir)
+ "mac_targetname" : "controlstrip.ppc", # The targetname within the project
+ "sysprefix" : sys.prefix, # Where the Python sources live
+ "mac_sysprefixtype" : "Absolute", # Type of previous pathname
+ "sources" : ["controlstripmodule.c"],
+ "extrasearchdirs": [], # -I and -L, in unix terms
}
pb = ProjectBuilder(dict)
pb.generate()
diff --git a/Mac/Lib/mkcwproject/template/template-searchdirs.xml b/Mac/Lib/mkcwproject/template/template-searchdirs.xml
new file mode 100644
index 0000000..3cb59a9
--- /dev/null
+++ b/Mac/Lib/mkcwproject/template/template-searchdirs.xml
@@ -0,0 +1,9 @@
+ <SETTING>
+ <SETTING><NAME>SearchPath</NAME>
+ <SETTING><NAME>Path</NAME><VALUE>%(extrasearchdirs)s</VALUE></SETTING>
+ <SETTING><NAME>PathFormat</NAME><VALUE>MacOS</VALUE></SETTING>
+ <SETTING><NAME>PathRoot</NAME><VALUE>Absolute</VALUE></SETTING>
+ </SETTING>
+ <SETTING><NAME>Recursive</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>HostFlags</NAME><VALUE>All</VALUE></SETTING>
+ </SETTING>
diff --git a/Mac/Lib/mkcwproject/template/template.prj.xml b/Mac/Lib/mkcwproject/template/template.prj.xml
index c6e01e8..ac38544 100644
--- a/Mac/Lib/mkcwproject/template/template.prj.xml
+++ b/Mac/Lib/mkcwproject/template/template.prj.xml
@@ -92,20 +92,30 @@
</SETTING>
<SETTING>
<SETTING><NAME>SearchPath</NAME>
- <SETTING><NAME>Path</NAME><VALUE>:::</VALUE></SETTING>
+ <SETTING><NAME>Path</NAME><VALUE>%(sysprefix)s:Mac:</VALUE></SETTING>
<SETTING><NAME>PathFormat</NAME><VALUE>MacOS</VALUE></SETTING>
- <SETTING><NAME>PathRoot</NAME><VALUE>Project</VALUE></SETTING>
+ <SETTING><NAME>PathRoot</NAME><VALUE>%(mac_sysprefixtype)s</VALUE></SETTING>
+ </SETTING>
+ <SETTING><NAME>Recursive</NAME><VALUE>true</VALUE></SETTING>
+ <SETTING><NAME>HostFlags</NAME><VALUE>All</VALUE></SETTING>
+ </SETTING>
+ <SETTING>
+ <SETTING><NAME>SearchPath</NAME>
+ <SETTING><NAME>Path</NAME><VALUE>%(sysprefix)s</VALUE></SETTING>
+ <SETTING><NAME>PathFormat</NAME><VALUE>MacOS</VALUE></SETTING>
+ <SETTING><NAME>PathRoot</NAME><VALUE>%(mac_sysprefixtype)s</VALUE></SETTING>
</SETTING>
<SETTING><NAME>Recursive</NAME><VALUE>true</VALUE></SETTING>
<SETTING><NAME>HostFlags</NAME><VALUE>All</VALUE></SETTING>
</SETTING>
</SETTING>
<SETTING><NAME>SystemSearchPaths</NAME>
+ %(tmp_extrasearchdirs)s
<SETTING>
<SETTING><NAME>SearchPath</NAME>
- <SETTING><NAME>Path</NAME><VALUE>::::GUSI2:include:</VALUE></SETTING>
+ <SETTING><NAME>Path</NAME><VALUE>%(sysprefix)s::GUSI2:include:</VALUE></SETTING>
<SETTING><NAME>PathFormat</NAME><VALUE>MacOS</VALUE></SETTING>
- <SETTING><NAME>PathRoot</NAME><VALUE>Project</VALUE></SETTING>
+ <SETTING><NAME>PathRoot</NAME><VALUE>%(mac_sysprefixtype)s</VALUE></SETTING>
</SETTING>
<SETTING><NAME>Recursive</NAME><VALUE>false</VALUE></SETTING>
<SETTING><NAME>HostFlags</NAME><VALUE>All</VALUE></SETTING>
@@ -136,7 +146,7 @@
<SETTING><NAME>PostLinker</NAME><VALUE></VALUE></SETTING>
<SETTING><NAME>Targetname</NAME><VALUE>%(mac_targetname)s</VALUE></SETTING>
<SETTING><NAME>OutputDirectory</NAME>
- <SETTING><NAME>Path</NAME><VALUE>::PlugIns:</VALUE></SETTING>
+ <SETTING><NAME>Path</NAME><VALUE>%(mac_outputdir)s</VALUE></SETTING>
<SETTING><NAME>PathFormat</NAME><VALUE>MacOS</VALUE></SETTING>
<SETTING><NAME>PathRoot</NAME><VALUE>Project</VALUE></SETTING>
</SETTING>