diff options
Diffstat (limited to 'bksys/parser.py')
-rw-r--r-- | bksys/parser.py | 142 |
1 files changed, 142 insertions, 0 deletions
diff --git a/bksys/parser.py b/bksys/parser.py new file mode 100644 index 0000000..cdde2b0 --- /dev/null +++ b/bksys/parser.py @@ -0,0 +1,142 @@ +#!/usr/bin/python + +from xml.sax import make_parser +from xml.sax.handler import ContentHandler + +import SCons.Util + +def exists(env): + return True + +class SconsHandler(ContentHandler): + + def __init__ (self, envi, builddir): + self.envname = "" + self.env = envi + self.builddir="" #envi['_BUILDDIR_'] + + #self.dump = True + self.dump = False + self.count = 0 + self.dir = "" + self.autoinstall = False + self.appname="" + + self.obj = "" + + self.subdir ="" + self.type ="" + + self.isgloballib="" + self.target="" + + self._includes="" + self.cxxflags="" + self.globallibs="" + self.locallibs="" + self.linkflags="" + + self.srclist=[] + + def adrl(self, file): + if self.builddir: + dir=self.env.join(self.builddir,file).lstrip('/') + else: + dir=file.lstrip('/') + return dir + + def dump_commands(self, str): + if self.dump: + print str + + def startElement(self, name, attrs): + + if name == 'icondirent': + dir = attrs.get('dir', '') + sbdir = attrs.get('subdir', '') + if dir: + #if self.env.has_key("DUMPCONFIG"): + # print "env.KDEicon('"+dir+")'" + self.env.KDEicon('*', self.adrl(dir), subdir=sbdir) + elif name == 'subdirent': + dir = attrs.get('dir', None) + if dir: + #if self.env.has_key("DUMPCONFIG"): + # print "env.SConscript('"+dir+"/SConscript')" + self.env.SConscript(self.env.join(self.adrl(dir),"SConscript")) + elif name == 'docdir': + self.appname = self.adrl( attrs.get('name', None) ) + elif name == 'docdirent': + dir = attrs.get('dir', None) + lang = attrs.get('lang', None) + if dir and lang: + #if self.env.has_key("DUMPCONFIG"): + # print "env.docfolder('"+dir+"', '"+lang+"', '"+self.appname+"')" + self.env.docfolder(self.adrl(dir), lang, self.appname) + elif name == 'podir': + dir = attrs.get('dir', None) + appname = attrs.get('name', None) + if dir and appname: + if self.env.has_key('_BUILDDIR_'): dir=self.env.join(self.env['_BUILDDIR_'], dir) + self.env.KDElang(dir, appname) + elif name == 'install': + self.type = attrs.get('type', None) + self.subdir = attrs.get('subdir', None) + + elif name == 'file': + name = attrs.get('name', None) + if self.type: + #if self.env.has_key("DUMPCONFIG"): + # print "env.KDEinstall('"+self.type+"', '"+self.subdir+"', '"+name+"')" + self.env.KDEinstall(self.type, self.subdir, name) + + elif name == 'compile': + + type = attrs.get('type', None) + if not type: self.env.Exit(1) + self.obj = self.env.kobject(type) + + self.obj.target = str(attrs.get('target', '')) + self.obj.source = [] + + self.obj.includes = str(attrs.get('includes', '')) + self.obj.cflags = str(attrs.get('cflags', '')) + self.obj.cxxflags = str(attrs.get('cxxflags', '')) + + self.obj.libs = str(attrs.get('libs', '')) + self.obj.linkflags = str(attrs.get('linkflags', '')) + self.obj.libpath = str(attrs.get('libpath', '')) + + self.obj.vnum = str(attrs.get('vnum', '')) + self.obj.iskdelib = str(attrs.get('iskdelib', 0)) + self.obj.libprefix = str(attrs.get('libprefix', '')) + + self.obj.chdir = self.adrl(str(attrs.get('chdir', ''))) + self.obj.dirprefix = self.adrl(str(attrs.get('dirprefix', './'))) + if not self.obj.dirprefix: self.obj.dirprefix='./' # avoid silly errors + + elif name == 'source': + file = attrs.get('file', None) + condition = attrs.get('condition', ""); + lst=condition.split(':') + for c in lst: + if self.env.has_key(c): + self.obj.source.append( file ) + break + if file and not condition: self.obj.source.append( file ) + + def endElement(self, name): + if name == 'compile': + self.obj.execute() + +def generate(env): + + def xmlfile(env, file, builddir=''): + parser = make_parser() + curHandler = SconsHandler(env, builddir) + parser.setContentHandler(curHandler) + parser.parse(open(file)) + + from SCons.Script.SConscript import SConsEnvironment + SConsEnvironment.xmlfile = xmlfile + |