annotate Config.py @ 4:3a56cd936c59

Cleanup some code. Add code for breaking loops in the dependency tree.
author Tom Fredrik Blenning Klaussen <bfg@blenning.no>
date Mon, 24 Sep 2012 01:16:43 +0200
parents f65c2d63ab66
children 09b39021c4af
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
2
10f1d7de9bc3 New module for reading configurations.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff changeset
1 #!/usr/bin/env python -O
10f1d7de9bc3 New module for reading configurations.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff changeset
2
10f1d7de9bc3 New module for reading configurations.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff changeset
3 import xml.dom.minidom, sys, re
10f1d7de9bc3 New module for reading configurations.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff changeset
4
10f1d7de9bc3 New module for reading configurations.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff changeset
5 class Config:
10f1d7de9bc3 New module for reading configurations.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff changeset
6 def __init__(self, path):
10f1d7de9bc3 New module for reading configurations.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff changeset
7 self.document = xml.dom.minidom.parse(path)
10f1d7de9bc3 New module for reading configurations.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff changeset
8
10f1d7de9bc3 New module for reading configurations.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff changeset
9 @staticmethod
10f1d7de9bc3 New module for reading configurations.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff changeset
10 def getOption(node, option, match):
10f1d7de9bc3 New module for reading configurations.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff changeset
11 for potentialMatch in node.childNodes:
10f1d7de9bc3 New module for reading configurations.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff changeset
12 if potentialMatch.nodeName == "option":
10f1d7de9bc3 New module for reading configurations.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff changeset
13 if potentialMatch.hasAttribute('match'):
10f1d7de9bc3 New module for reading configurations.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff changeset
14 matchstr = potentialMatch.getAttribute('match')
10f1d7de9bc3 New module for reading configurations.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff changeset
15 try:
10f1d7de9bc3 New module for reading configurations.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff changeset
16 prog = re.compile(matchstr)
10f1d7de9bc3 New module for reading configurations.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff changeset
17 except:
10f1d7de9bc3 New module for reading configurations.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff changeset
18 raise xml.dom.SyntaxErr(matchstr
10f1d7de9bc3 New module for reading configurations.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff changeset
19 +
10f1d7de9bc3 New module for reading configurations.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff changeset
20 " is not a valid value for attribute match")
10f1d7de9bc3 New module for reading configurations.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff changeset
21 if prog.match(match):
10f1d7de9bc3 New module for reading configurations.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff changeset
22 res = Config.getOption(potentialMatch, option, match)
10f1d7de9bc3 New module for reading configurations.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff changeset
23 if not res:
10f1d7de9bc3 New module for reading configurations.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff changeset
24 res = potentialMatch.getAttribute('cxxflags')
10f1d7de9bc3 New module for reading configurations.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff changeset
25 return res
10f1d7de9bc3 New module for reading configurations.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff changeset
26 return None
10f1d7de9bc3 New module for reading configurations.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff changeset
27
10f1d7de9bc3 New module for reading configurations.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff changeset
28 def getCxxflags(self, name):
10f1d7de9bc3 New module for reading configurations.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff changeset
29 value = self.getOption(self.document.childNodes[0], 'Cxxflags', name)
4
3a56cd936c59 Cleanup some code.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents: 3
diff changeset
30 if value == None:
2
10f1d7de9bc3 New module for reading configurations.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff changeset
31 raise xml.dom.NotFoundErr()
10f1d7de9bc3 New module for reading configurations.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff changeset
32 return value
4
3a56cd936c59 Cleanup some code.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents: 3
diff changeset
33
3a56cd936c59 Cleanup some code.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents: 3
diff changeset
34 def getFiles(self):
3a56cd936c59 Cleanup some code.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents: 3
diff changeset
35 retVal = []
3a56cd936c59 Cleanup some code.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents: 3
diff changeset
36 for elem in self.document.getElementsByTagName('file'):
3a56cd936c59 Cleanup some code.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents: 3
diff changeset
37 for t in elem.childNodes:
3a56cd936c59 Cleanup some code.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents: 3
diff changeset
38 retVal.append(t.wholeText)
3a56cd936c59 Cleanup some code.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents: 3
diff changeset
39 return retVal