summaryrefslogtreecommitdiffstats
path: root/Mac/Lib/mkcwproject/cwxmlgen.py
diff options
context:
space:
mode:
authorJack Jansen <jack.jansen@cwi.nl>2000-09-22 23:26:55 (GMT)
committerJack Jansen <jack.jansen@cwi.nl>2000-09-22 23:26:55 (GMT)
commit07642c3689edaaf04addb0853877bbd0938ecf7b (patch)
tree8fb5b6a08ae4f4ca6a7ae3912ce3829986c1071a /Mac/Lib/mkcwproject/cwxmlgen.py
parent7760cff29489fef6728ef7776d76fcc7b41c2488 (diff)
downloadcpython-07642c3689edaaf04addb0853877bbd0938ecf7b.zip
cpython-07642c3689edaaf04addb0853877bbd0938ecf7b.tar.gz
cpython-07642c3689edaaf04addb0853877bbd0938ecf7b.tar.bz2
More bits and pieces of project generation.
Diffstat (limited to 'Mac/Lib/mkcwproject/cwxmlgen.py')
-rw-r--r--Mac/Lib/mkcwproject/cwxmlgen.py87
1 files changed, 87 insertions, 0 deletions
diff --git a/Mac/Lib/mkcwproject/cwxmlgen.py b/Mac/Lib/mkcwproject/cwxmlgen.py
new file mode 100644
index 0000000..b29786f
--- /dev/null
+++ b/Mac/Lib/mkcwproject/cwxmlgen.py
@@ -0,0 +1,87 @@
+# First attempt at automatically generating CodeWarior projects
+import os
+
+Error="gencwproject.Error"
+#
+# These templates are executed in-order.
+#
+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)
+]
+
+class ProjectBuilder:
+ def __init__(self, dict, templatelist=TEMPLATELIST, templatedir=None):
+ if templatedir == None:
+ try:
+ packagedir = os.path.split(__file__)[0]
+ except NameError:
+ packagedir = os.curdir
+ templatedir = os.path.join(packagedir, 'template')
+ if not os.path.exists(templatedir):
+ raise Error, "Cannot file templatedir"
+ self.dict = dict
+ self.templatelist = templatelist
+ self.templatedir = templatedir
+
+ def generate(self):
+ for tmpl in self.templatelist:
+ self._generate_one_template(tmpl)
+
+ def _generate_one_template(self, tmpl):
+ resultname, datasource, dataname, key = tmpl
+ result = ''
+ if key:
+ # This is a multi-element rule. Run for every item in dict[key]
+ if self.dict.has_key(key):
+ keyvalues = self.dict[key]
+ try:
+ if not type(keyvalues) in (type(()), type([])):
+ raise Error, "List or tuple expected for %s"%key
+ for curkeyvalue in keyvalues:
+ self.dict[key] = curkeyvalue
+ curkeyvalueresult = self._generate_one_value(datasource, dataname)
+ result = result + curkeyvalueresult
+ finally:
+ # Restore the list
+ self.dict[key] = keyvalues
+ else:
+ # Not a multi-element rule. Simply generate
+ result = self._generate_one_value(datasource, dataname)
+ # And store the result
+ self.dict[resultname] = result
+
+ def _generate_one_value(self, datasource, dataname):
+ if datasource == 'file':
+ filepath = os.path.join(self.templatedir, dataname)
+ fp = open(filepath, "r")
+ format = fp.read()
+ elif datasource == 'string':
+ format = dataname
+ else:
+ raise Error, 'Datasource should be file or string, not %s'%datasource
+ return format % self.dict
+
+def _test():
+ dict = {
+ "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()
+ fp = open(dict["mac_projectxmlname"], "w")
+ fp.write(dict["tmp_projectxmldata"])
+
+if __name__ == '__main__':
+ _test()
+