aboutsummaryrefslogtreecommitdiffstats
path: root/build/scripts/configure_file.py
blob: 14eec7fa57d39fee27ff90cfe61b4d8ef1c001f4 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
#!/usr/bin/env python2.7 
 
import sys 
import os.path 
import re
 
cmakeDef01 = "#cmakedefine01" 
cmakeDef = "#cmakedefine" 
 
 
def replaceLine(l, varDict, define): 
    words = l.split() 
    if words: 
        if words[0] == cmakeDef: 
            sPos = l.find(cmakeDef) 
            ePos = sPos + len(cmakeDef) 
            l = l[:sPos] + define + l[ePos:] + '\n' 
        if words[0] == cmakeDef01: 
            var = words[1] 
            cmakeValue = varDict.get(var) 
            if cmakeValue == 'yes': 
                val = '1' 
            else: 
                val = '0' 
            sPos = l.find(cmakeDef01) 
            ePos = l.find(var) + len(var) 
            l = l[:sPos] + define + ' ' + var + ' ' + val + l[ePos + 1:] + '\n' 
 
    finder = re.compile(".*?(@[a-zA-Z0-9_]+@).*")
    while True: 
        re_result = finder.match(l)
        if not re_result:
            return l 
        key = re_result.group(1)[1:-1]
        l = l[:re_result.start(1)] + varDict.get(key, '') + l[re_result.end(1):]
 
 
def main(inputPath, outputPath, varDict): 
    define = '#define' if os.path.splitext(outputPath)[1] != '.asm' else '%define' 
    with open(outputPath, 'w') as output: 
        with open(inputPath, 'r') as input: 
            for l in input: 
                output.write(replaceLine(l, varDict, define)) 
 
 
def usage(): 
    print "usage: configure_file.py inputPath outputPath key1=value1 ..." 
    exit(1) 
 
 
if __name__ == "__main__": 
    if len(sys.argv) < 3: 
        usage() 
    varDict = {} 
    for x in sys.argv[3:]: 
        key, value = str(x).split('=', 1)
        varDict[key] = value 
 
    main(sys.argv[1], sys.argv[2], varDict)