sbsv2/raptor/bin/vartoxml.py
changeset 3 e1eecf4d390d
parent 0 044383f39525
--- a/sbsv2/raptor/bin/vartoxml.py	Wed Oct 28 14:39:48 2009 +0000
+++ b/sbsv2/raptor/bin/vartoxml.py	Mon Nov 16 09:46:46 2009 +0000
@@ -1,207 +1,207 @@
-#
-# Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
-# All rights reserved.
-# This component and the accompanying materials are made available
-# under the terms of the License "Eclipse Public License v1.0"
-# which accompanies this distribution, and is available
-# at the URL "http://www.eclipse.org/legal/epl-v10.html".
-#
-# Initial Contributors:
-# Nokia Corporation - initial contribution.
-#
-# Contributors:
-#
-# Description: 
-# Raptor Binary Variation var file to xml spec generator
-# Given a set of .var files, this script will generate an xml specification file
-#
-
-
-import sys,os,re,fnmatch
-import xml.dom.minidom 
-from optparse import OptionParser
-
-doc = xml.dom.minidom.Document()
-class VarFile:
-
-	def __init__(self,aFile):
-		self.virtual = False
-		self.varname = ""
-		self.varhrh = ""
-		self.build_include = ""
-		self.rom_include = ""
-		self.extends = ""
-		self.file = aFile
-
-	# Parse the var file
-	def ParseVarFile(self):
-		file = open(self.file)
-		vardata = file.readlines()
-		for var in vardata:
-			if re.match('VARIANT\s+(?P<VARIANTNAME>\w+)',var):
-				self.varname = re.match('VARIANT\s+(?P<VARIANTNAME>\w+)',var)
-			elif re.match('VARIANT_HRH\s+(?P<VARIANTHRH>.+)',var):
-				self.varhrh  = re.match('VARIANT_HRH\s+(?P<VARIANTHRH>.+)',var)
-			elif re.match('VIRTUAL\s+$',var):
-				self.virtual = True
-			elif re.match('BUILD_INCLUDE\s+.+',var):
-				self.build_include = re.match('BUILD_INCLUDE\s+(?P<PROPERTY>\w+)\s+(?P<LOCATION>.+)',var)
-			elif re.match('ROM_INCLUDE\s+.+',var):
-				self.rom_include = re.match('ROM_INCLUDE\s+(?P<PROPERTY>\w+)\s+(?P<LOCATION>.+)',var)
-			elif re.match('EXTENDS\s+(?P<EXTENDS>\w+)',var):
-				self.extends = re.match('EXTENDS\s+(?P<EXTENDSNODE>\w+)',var)
-		if self.varname:
-			self.varname = self.varname.group('VARIANTNAME')
-		if self.varhrh:
-			self.varhrh  = self.varhrh.group('VARIANTHRH')
-		if self.extends:
-			self.extends = self.extends.group('EXTENDSNODE')
-		file.close()
-	
-	# Write the specs for a variant object and attach it to a parent node
-	def CreateSpec(self,parentNode):
-	
-		var = doc.createElement("var")
-		parentNode.appendChild(var)
-
-		# Set the FEATUREVARIANT name
-		vname = doc.createElement("set")
-		vname.setAttribute("name","FEATUREVARIANT")
-		vname.setAttribute("value",self.varname)
-		if self.virtual:
-			vname.setAttribute("abstract","true")
-		var.appendChild(vname)
-
-		# Set the VARIANT_HRH name
-		hrhname = doc.createElement("set")
-		hrhname.setAttribute("name","VARIANT_HRH")
-		hrhname.setAttribute("value",self.varhrh)
-		var.appendChild(hrhname)
-
-		# Set the build includes
-		if self.build_include:
-			buildincs = doc.createElement(self.build_include.group('PROPERTY'))
-			buildincs.setAttribute("name","BUILD_INCLUDE")
-			buildincs.setAttribute("value",self.build_include.group('LOCATION'))
-			var.appendChild(buildincs)
-
-		# Set the rom includes
-		if self.rom_include:
-			buildincs = doc.createElement(self.rom_include.group('PROPERTY'))
-			buildincs.setAttribute("name","ROM_INCLUDE")
-			buildincs.setAttribute("value",self.rom_include.group('LOCATION'))
-			var.appendChild(buildincs)
-
-# Main function
-def main():
-
-	parser = OptionParser(prog = "vartoxml.py")
-	parser.add_option("-s","--sourcefile",action="append",dest="varfile",help="List of var files")
-	parser.add_option("-o","--output",action="store",dest="outputxml",help="Output xml file")
-	parser.add_option("-d","--folder",action="store",dest="folder",help="Folder names to search for var files")
-
-	(options, leftover_args) = parser.parse_args(sys.argv[1:])
-	
-	childlist = [] 
-	addedlist = []
-	nodesList = []
-	childnames = []
-	i = 0
-	
-	# Get the list of .var file from the specified folder(s)
-	if options.folder:
-		for folder in options.folder:
-			for fileName in os.listdir (folder):
-				if fnmatch.fnmatch (fileName,'*.var'):
-					if options.varfile:
-						options.varfile.append(fileName)
-					else:
-						options.varfile = []
-						options.varfile.append(fileName)
-	
-	# We need some source files for this script to work
-	if not options.varfile:
-		print "Error: No source files specified "
-		sys.exit()
-		
-	# Set parent node to gibberish
-	parentNode = doc.createElement("build")
-	doc.appendChild(parentNode)
-	newparentNode = ""
-	
-	# Removes duplicate elements in the arguments and iterate through them
-	# to find the top-level abstract parent node
-	for arg in list(set(options.varfile)):
-		varobj = VarFile(arg)
-		varobj.ParseVarFile()
-		if varobj.extends:
-			childlist.append(varobj)
-		else:
-			addedlist.append(varobj)
-			conf = doc.createElement("config")
-			conf.setAttribute("name",varobj.varname)
-			parentNode.appendChild(conf)
-			varobj.CreateSpec(conf)
-			nodesList.append(conf)
-	
-	# Names of all the children need to be stored separately
-	for c in childlist:
-		childnames.append(c.varname)
-
-	childlist2 = list(childlist)
-
-	# Check the list is correct, and append orphan nodes to master BUILD node
-	for ch in childlist2:
-		if addedlist:
-			if not ch.extends in addedlist[0].varname:
-				if not ch.extends in childnames:
-					conf = doc.createElement("config")
-					conf.setAttribute("name",ch.varname)
-					parentNode.appendChild(conf)
-					varobj.CreateSpec(conf)
-					nodesList.append(conf)
-					addedlist.append(ch)
-					childlist.remove(ch)
-		else:
-			if not ch.extends in childnames:
-				conf = doc.createElement("config")
-				conf.setAttribute("name",ch.varname)
-				parentNode.appendChild(conf)
-				varobj.CreateSpec(conf)
-				nodesList.append(conf)
-				addedlist.append(ch)
-				childlist.remove(ch)
-				
-	# Make a copy of the new childlist
-	childlist2 = list(childlist)
-
-	# Go through all the children, and add them to the xml spec
-	while (childlist2):
-		# Refactor the childlist to remove elements which have been added
-		for add in addedlist:
-			if add in childlist:
-				childlist.remove(add)
-		for ch in childlist:
-			if ch.extends == addedlist[i].varname:
-				addedlist.append(ch)
-				childlist2.remove(ch)
-				conf = doc.createElement("config")
-				conf.setAttribute("name",ch.varname)
-				nodesList[i].appendChild(conf)
-				nodesList.append(conf)
-				ch.CreateSpec(conf)
-			else:
-				pass
-		i = i + 1
-	
-	# If output xml file is specified, write to it otherwise print the xml to screen
-	if options.outputxml:
-		file = open(options.outputxml,"w")
-		file.writelines(doc.toprettyxml(indent="  "))
-		file.close()
-	else:
-		print doc.toprettyxml(indent="  ")
-
-
-if __name__ == "__main__":
-    main()
+#
+# Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+# Raptor Binary Variation var file to xml spec generator
+# Given a set of .var files, this script will generate an xml specification file
+#
+
+
+import sys,os,re,fnmatch
+import xml.dom.minidom 
+from optparse import OptionParser
+
+doc = xml.dom.minidom.Document()
+class VarFile:
+
+	def __init__(self,aFile):
+		self.virtual = False
+		self.varname = ""
+		self.varhrh = ""
+		self.build_include = ""
+		self.rom_include = ""
+		self.extends = ""
+		self.file = aFile
+
+	# Parse the var file
+	def ParseVarFile(self):
+		file = open(self.file)
+		vardata = file.readlines()
+		for var in vardata:
+			if re.match('VARIANT\s+(?P<VARIANTNAME>\w+)',var):
+				self.varname = re.match('VARIANT\s+(?P<VARIANTNAME>\w+)',var)
+			elif re.match('VARIANT_HRH\s+(?P<VARIANTHRH>.+)',var):
+				self.varhrh  = re.match('VARIANT_HRH\s+(?P<VARIANTHRH>.+)',var)
+			elif re.match('VIRTUAL\s+$',var):
+				self.virtual = True
+			elif re.match('BUILD_INCLUDE\s+.+',var):
+				self.build_include = re.match('BUILD_INCLUDE\s+(?P<PROPERTY>\w+)\s+(?P<LOCATION>.+)',var)
+			elif re.match('ROM_INCLUDE\s+.+',var):
+				self.rom_include = re.match('ROM_INCLUDE\s+(?P<PROPERTY>\w+)\s+(?P<LOCATION>.+)',var)
+			elif re.match('EXTENDS\s+(?P<EXTENDS>\w+)',var):
+				self.extends = re.match('EXTENDS\s+(?P<EXTENDSNODE>\w+)',var)
+		if self.varname:
+			self.varname = self.varname.group('VARIANTNAME')
+		if self.varhrh:
+			self.varhrh  = self.varhrh.group('VARIANTHRH')
+		if self.extends:
+			self.extends = self.extends.group('EXTENDSNODE')
+		file.close()
+	
+	# Write the specs for a variant object and attach it to a parent node
+	def CreateSpec(self,parentNode):
+	
+		var = doc.createElement("var")
+		parentNode.appendChild(var)
+
+		# Set the FEATUREVARIANT name
+		vname = doc.createElement("set")
+		vname.setAttribute("name","FEATUREVARIANT")
+		vname.setAttribute("value",self.varname)
+		if self.virtual:
+			vname.setAttribute("abstract","true")
+		var.appendChild(vname)
+
+		# Set the VARIANT_HRH name
+		hrhname = doc.createElement("set")
+		hrhname.setAttribute("name","VARIANT_HRH")
+		hrhname.setAttribute("value",self.varhrh)
+		var.appendChild(hrhname)
+
+		# Set the build includes
+		if self.build_include:
+			buildincs = doc.createElement(self.build_include.group('PROPERTY'))
+			buildincs.setAttribute("name","BUILD_INCLUDE")
+			buildincs.setAttribute("value",self.build_include.group('LOCATION'))
+			var.appendChild(buildincs)
+
+		# Set the rom includes
+		if self.rom_include:
+			buildincs = doc.createElement(self.rom_include.group('PROPERTY'))
+			buildincs.setAttribute("name","ROM_INCLUDE")
+			buildincs.setAttribute("value",self.rom_include.group('LOCATION'))
+			var.appendChild(buildincs)
+
+# Main function
+def main():
+
+	parser = OptionParser(prog = "vartoxml.py")
+	parser.add_option("-s","--sourcefile",action="append",dest="varfile",help="List of var files")
+	parser.add_option("-o","--output",action="store",dest="outputxml",help="Output xml file")
+	parser.add_option("-d","--folder",action="store",dest="folder",help="Folder names to search for var files")
+
+	(options, leftover_args) = parser.parse_args(sys.argv[1:])
+	
+	childlist = [] 
+	addedlist = []
+	nodesList = []
+	childnames = []
+	i = 0
+	
+	# Get the list of .var file from the specified folder(s)
+	if options.folder:
+		for folder in options.folder:
+			for fileName in os.listdir (folder):
+				if fnmatch.fnmatch (fileName,'*.var'):
+					if options.varfile:
+						options.varfile.append(fileName)
+					else:
+						options.varfile = []
+						options.varfile.append(fileName)
+	
+	# We need some source files for this script to work
+	if not options.varfile:
+		print "Error: No source files specified "
+		sys.exit()
+		
+	# Set parent node to gibberish
+	parentNode = doc.createElement("build")
+	doc.appendChild(parentNode)
+	newparentNode = ""
+	
+	# Removes duplicate elements in the arguments and iterate through them
+	# to find the top-level abstract parent node
+	for arg in list(set(options.varfile)):
+		varobj = VarFile(arg)
+		varobj.ParseVarFile()
+		if varobj.extends:
+			childlist.append(varobj)
+		else:
+			addedlist.append(varobj)
+			conf = doc.createElement("config")
+			conf.setAttribute("name",varobj.varname)
+			parentNode.appendChild(conf)
+			varobj.CreateSpec(conf)
+			nodesList.append(conf)
+	
+	# Names of all the children need to be stored separately
+	for c in childlist:
+		childnames.append(c.varname)
+
+	childlist2 = list(childlist)
+
+	# Check the list is correct, and append orphan nodes to master BUILD node
+	for ch in childlist2:
+		if addedlist:
+			if not ch.extends in addedlist[0].varname:
+				if not ch.extends in childnames:
+					conf = doc.createElement("config")
+					conf.setAttribute("name",ch.varname)
+					parentNode.appendChild(conf)
+					varobj.CreateSpec(conf)
+					nodesList.append(conf)
+					addedlist.append(ch)
+					childlist.remove(ch)
+		else:
+			if not ch.extends in childnames:
+				conf = doc.createElement("config")
+				conf.setAttribute("name",ch.varname)
+				parentNode.appendChild(conf)
+				varobj.CreateSpec(conf)
+				nodesList.append(conf)
+				addedlist.append(ch)
+				childlist.remove(ch)
+				
+	# Make a copy of the new childlist
+	childlist2 = list(childlist)
+
+	# Go through all the children, and add them to the xml spec
+	while (childlist2):
+		# Refactor the childlist to remove elements which have been added
+		for add in addedlist:
+			if add in childlist:
+				childlist.remove(add)
+		for ch in childlist:
+			if ch.extends == addedlist[i].varname:
+				addedlist.append(ch)
+				childlist2.remove(ch)
+				conf = doc.createElement("config")
+				conf.setAttribute("name",ch.varname)
+				nodesList[i].appendChild(conf)
+				nodesList.append(conf)
+				ch.CreateSpec(conf)
+			else:
+				pass
+		i = i + 1
+	
+	# If output xml file is specified, write to it otherwise print the xml to screen
+	if options.outputxml:
+		file = open(options.outputxml,"w")
+		file.writelines(doc.toprettyxml(indent="  "))
+		file.close()
+	else:
+		print doc.toprettyxml(indent="  ")
+
+
+if __name__ == "__main__":
+    main()