#!/usr/bin/env python
#
# BusyB, an automated build utility.
#
# Copyright (C) 1997-2005
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
#
# Main program for busyb
#
from xml.dom import minidom
from string import upper
from time import sleep
import imp
import locale
import os
import sys
import SymbolManager
def printError(str):
sys.stderr.write( str )
sys.stderr.write( '\n' )
def getClass(packageName, moduleName, className):
cmd = 'from ' + packageName + '.' + moduleName + ' import ' + className
exec cmd
cls = eval(className)
return cls
def createConfig(element, packageName):
clsName=fixCase(element.nodeName)
cls=getClass(packageName, clsName, clsName)
if ( cls == None ):
printError( "Unable to create an object of type: " + element.nodeName )
return None
ret = cls()
for attr in element.attributes.items():
name=attr[0]
text=attr[1]
clsName=fixCase(name)
cls=getClass(packageName, clsName, clsName)
newKid=cls()
newKid.setText(text)
newKid.setParent(ret)
for kid in element.childNodes:
if ( kid.nodeType == kid.TEXT_NODE):
try:
ret.setText(kid.nodeValue)
except:
printError( "Unable to add text to object: " + element.nodeName )
raise
elif ( kid.nodeType == kid.ELEMENT_NODE):
try:
attr=createConfig(kid, packageName)
attr.setParent(ret)
except:
printError(
"Unable to add attribute " + kid.nodeName + " to " + element.nodeName)
raise
return ret
def fixCase(name):
return upper(name[0]) + name[1:]
def done(project):
exit(0)
def bbMain( debug, configFile ):
f = open(configFile, 'r')
configText = f.read()
f.close()
SymbolManager.getInstance().setSymbol("Configuration", configText)
f = open(configFile, 'r')
d=minidom.parse(f)
f.close()
de=d.documentElement
config=createConfig( de, 'busybee.plugins' )
if ( debug ):
config.setDebug()
config.process()
#
# Break a string of the form name=value
# into [name, value]
#
def parseAssignment(str):
iEquals=str.find('=')
if ( iEquals < 0 ):
return None
name=str[:iEquals]
value=str[iEquals+1:]
return [ name, value]
def main():
debug = 0
configFile = "busyb.xml"
l = len(sys.argv)
if os.environ.has_key("LANG"):
locale.setlocale(locale.LC_ALL, os.environ["LANG"])
for arg in sys.argv[1:]:
if arg == '-d':
debug = 1
elif arg.startswith('-s'):
assignment = parseAssignment(arg[2:])
print 'assign: ', assignment
if assignment:
SymbolManager.getInstance().setSymbol(assignment[0], assignment[1])
elif arg.startswith('-e'):
assignment = parseAssignment(arg[2:])
print 'assign: ', assignment
if assignment:
os.environ[assignment[0]] = assignment[1]
else:
configFile = arg
break
print 'configFile: ', configFile
bbMain(debug, configFile)
|