summaryrefslogtreecommitdiffstats
path: root/bksys/parser.py
diff options
context:
space:
mode:
Diffstat (limited to 'bksys/parser.py')
-rw-r--r--bksys/parser.py142
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
+