3
# Generate the file lists for processing with g-ir-scanner
11
def gen_gdkpixbuf_filelist(srcroot, subdir, dest):
12
vars = read_vars_from_AM(os.path.join(srcroot, subdir, 'Makefile.am'),
14
conds = {'HAVE_INTROSPECTION':True},
15
filters = ['GdkPixbuf_2_0_gir_FILES'])
17
files = vars['GdkPixbuf_2_0_gir_FILES'].split()
19
with open(dest, 'w') as d:
21
d.write(srcroot + '\\' + subdir + '\\' + i.replace('/', '\\') + '\n')
23
def read_vars_from_AM(path, vars = {}, conds = {}, filters = None):
25
path: path to the Makefile.am
26
vars: predefined variables
27
conds: condition variables for Makefile
28
filters: if None, all variables defined are returned,
29
otherwise, it is a list contains that variables should be returned
31
cur_vars = vars.copy()
32
RE_AM_VAR_REF = re.compile(r'\$\((\w+?)\)')
33
RE_AM_VAR = re.compile(r'^\s*(\w+)\s*=(.*)$')
34
RE_AM_INCLUDE = re.compile(r'^\s*include\s+(\w+)')
35
RE_AM_CONTINUING = re.compile(r'\\\s*$')
36
RE_AM_IF = re.compile(r'^\s*if\s+(\w+)')
37
RE_AM_ELSE = re.compile(r'^\s*else')
38
RE_AM_ENDIF = re.compile(r'^\s*endif')
40
return RE_AM_VAR_REF.sub(lambda x: cur_vars.get(x.group(1), ''), cont)
41
with open(path, 'r') as f:
42
contents = f.readlines()
43
#combine continuing lines
46
while i < len(contents):
48
if RE_AM_CONTINUING.search(line):
49
line = RE_AM_CONTINUING.sub('', line)
51
while j < len(contents) and RE_AM_CONTINUING.search(contents[j]):
52
line += RE_AM_CONTINUING.sub('', contents[j])
62
#include, var define, var evaluation
66
while i < len(ncont) - 1:
69
mo = RE_AM_IF.search(line)
72
skip = False if mo.group(1) in conds and conds[mo.group(1)] \
75
mo = RE_AM_ELSE.search(line)
79
mo = RE_AM_ENDIF.search(line)
84
mo = RE_AM_INCLUDE.search(line)
86
cur_vars.update(read_vars_from_AM(am_eval(mo.group(1)), cur_vars, conds, None))
88
mo = RE_AM_VAR.search(line)
90
cur_vars[mo.group(1)] = am_eval(mo.group(2).strip())
97
ret[i] = cur_vars.get(i, '')
104
subdir = 'gdk-pixbuf'
105
gen_gdkpixbuf_filelist(srcroot, subdir, 'gdkpixbuf_list')
108
if __name__ == '__main__':
109
sys.exit(main(sys.argv))