| 
									
										
										
										
											2000-09-15 22:44:08 +00:00
										 |  |  | # First attempt at automatically generating CodeWarior projects | 
					
						
							|  |  |  | import os | 
					
						
							| 
									
										
										
										
											2001-01-23 22:34:50 +00:00
										 |  |  | import MacOS | 
					
						
							| 
									
										
										
										
											2000-09-15 22:44:08 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | 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"), | 
					
						
							| 
									
										
										
										
											2000-11-26 23:02:38 +00:00
										 |  |  | 	("tmp_alllibraries", "file", "template-alllibraries.xml", "libraries"), | 
					
						
							|  |  |  | 	("tmp_linkorderlib", "file", "template-linkorderlib.xml", "libraries"), | 
					
						
							|  |  |  | 	("tmp_grouplistlib", "file", "template-grouplistlib.xml", "libraries"), | 
					
						
							| 
									
										
										
										
											2000-09-22 23:26:55 +00:00
										 |  |  | 	("tmp_extrasearchdirs", "file", "template-searchdirs.xml", "extrasearchdirs"), | 
					
						
							| 
									
										
										
										
											2000-09-15 22:44:08 +00:00
										 |  |  | 	("tmp_projectxmldata", "file", "template.prj.xml", None) | 
					
						
							|  |  |  | ] | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class ProjectBuilder: | 
					
						
							| 
									
										
										
										
											2001-01-23 22:34:50 +00:00
										 |  |  | 	def __init__(self, dict, templatelist=TEMPLATELIST, templatename=None): | 
					
						
							|  |  |  | 		if templatename == None: | 
					
						
							|  |  |  | 			if hasattr(MacOS, 'runtimemodel'): | 
					
						
							|  |  |  | 				templatename = 'template-%s'%MacOS.runtimemodel | 
					
						
							|  |  |  | 			else: | 
					
						
							|  |  |  | 				templatename = 'template' | 
					
						
							|  |  |  | 		if os.sep in templatename: | 
					
						
							|  |  |  | 			templatedir = templatename | 
					
						
							|  |  |  | 		else: | 
					
						
							| 
									
										
										
										
											2000-09-15 22:44:08 +00:00
										 |  |  | 			try: | 
					
						
							|  |  |  | 				packagedir = os.path.split(__file__)[0] | 
					
						
							|  |  |  | 			except NameError: | 
					
						
							|  |  |  | 				packagedir = os.curdir | 
					
						
							| 
									
										
										
										
											2001-01-23 22:34:50 +00:00
										 |  |  | 			templatedir = os.path.join(packagedir, templatename) | 
					
						
							| 
									
										
										
										
											2000-09-15 22:44:08 +00:00
										 |  |  | 		if not os.path.exists(templatedir): | 
					
						
							| 
									
										
										
										
											2001-01-23 22:34:50 +00:00
										 |  |  | 			raise Error, "Cannot find templatedir %s"%templatedir | 
					
						
							| 
									
										
										
										
											2000-09-15 22:44:08 +00:00
										 |  |  | 		self.dict = dict | 
					
						
							| 
									
										
										
										
											2000-11-26 23:02:38 +00:00
										 |  |  | 		if not dict.has_key('prefixname'): | 
					
						
							|  |  |  | 			dict['prefixname'] = 'mwerks_plugin_config.h' | 
					
						
							| 
									
										
										
										
											2000-09-15 22:44:08 +00:00
										 |  |  | 		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: | 
					
						
							| 
									
										
										
										
											2000-11-26 23:02:38 +00:00
										 |  |  | 						if os.path.isabs(curkeyvalue): | 
					
						
							|  |  |  | 							self.dict['pathtype'] = 'Absolute' | 
					
						
							|  |  |  | 						else: | 
					
						
							|  |  |  | 							self.dict['pathtype'] = 'Project' | 
					
						
							| 
									
										
										
										
											2000-12-03 22:38:34 +00:00
										 |  |  | 						if curkeyvalue[-2:] == ':*': | 
					
						
							|  |  |  | 							curkeyvalue = curkeyvalue[:-2] | 
					
						
							|  |  |  | 							self.dict['recursive'] = 'true' | 
					
						
							|  |  |  | 						else: | 
					
						
							|  |  |  | 							self.dict['recursive'] = 'false' | 
					
						
							|  |  |  | 						self.dict[key] = curkeyvalue | 
					
						
							| 
									
										
										
										
											2000-09-15 22:44:08 +00:00
										 |  |  | 						curkeyvalueresult = self._generate_one_value(datasource, dataname) | 
					
						
							|  |  |  | 						result = result + curkeyvalueresult | 
					
						
							|  |  |  | 				finally: | 
					
						
							|  |  |  | 					# Restore the list | 
					
						
							|  |  |  | 					self.dict[key] = keyvalues | 
					
						
							| 
									
										
										
										
											2000-11-26 23:02:38 +00:00
										 |  |  | 					self.dict['pathtype'] = None | 
					
						
							|  |  |  | 					del self.dict['pathtype'] | 
					
						
							| 
									
										
										
										
											2000-12-03 22:38:34 +00:00
										 |  |  | 					self.dict['recursive'] = None | 
					
						
							|  |  |  | 					del self.dict['recursive'] | 
					
						
							| 
									
										
										
										
											2000-09-15 22:44:08 +00:00
										 |  |  | 		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 = { | 
					
						
							| 
									
										
										
										
											2000-09-22 23:26:55 +00:00
										 |  |  | 		"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 | 
					
						
							| 
									
										
										
										
											2000-09-15 22:44:08 +00:00
										 |  |  | 	} | 
					
						
							|  |  |  | 	pb = ProjectBuilder(dict) | 
					
						
							|  |  |  | 	pb.generate() | 
					
						
							|  |  |  | 	fp = open(dict["mac_projectxmlname"], "w") | 
					
						
							|  |  |  | 	fp.write(dict["tmp_projectxmldata"]) | 
					
						
							|  |  |  | 	 | 
					
						
							|  |  |  | if __name__ == '__main__': | 
					
						
							|  |  |  | 	_test() | 
					
						
							|  |  |  | 		 |