summaryrefslogtreecommitdiff
path: root/build/gen-file-list-pango.py
diff options
context:
space:
mode:
Diffstat (limited to 'build/gen-file-list-pango.py')
-rw-r--r--build/gen-file-list-pango.py161
1 files changed, 161 insertions, 0 deletions
diff --git a/build/gen-file-list-pango.py b/build/gen-file-list-pango.py
new file mode 100644
index 00000000..fa438c0b
--- /dev/null
+++ b/build/gen-file-list-pango.py
@@ -0,0 +1,161 @@
+#!/usr/bin/python
+# vim: encoding=utf-8
+# Generate the file lists for processing with g-ir-scanner
+import os
+import sys
+import re
+import string
+import subprocess
+import optparse
+
+def gen_pango_filelist(srcroot, subdir, dest):
+ vars = read_vars_from_AM(os.path.join(srcroot, subdir, 'Makefile.am'),
+ vars = {},
+ conds = {},
+ filters = ['pango_introspection_files'])
+
+ files = vars['pango_introspection_files'].split()
+
+ sources = [i for i in files \
+ if not (i.endswith('-private.h')) \
+ and i != 'pango-color-table.h' ]
+
+ with open(dest, 'w') as d:
+ for i in sources:
+ d.write(srcroot + '\\' + subdir + '\\' + i.replace('/', '\\') + '\n')
+
+def gen_pangoft_filelist(srcroot, subdir, dest):
+ vars = read_vars_from_AM(os.path.join(srcroot, subdir, 'Makefile.am'),
+ vars = {},
+ conds = {},
+ filters = ['pangoft2_introspection_files'])
+
+ files = vars['pangoft2_introspection_files'].split()
+
+ sources = [i for i in files \
+ if not (i.endswith('-private.h'))]
+
+ with open(dest, 'w') as d:
+ for i in sources:
+ d.write(srcroot + '\\' + subdir + '\\' + i.replace('/', '\\') + '\n')
+
+def gen_pangocairo_filelist(srcroot, subdir, dest, is_fc_used):
+ cond_pangocairo = {}
+ if is_fc_used == 1:
+ cond_pangocairo = {'HAVE_CAIRO_WIN32': True, 'PLATFORM_WIN32': True, 'HAVE_CAIRO_FREETYPE': True}
+ else:
+ cond_pangocairo = {'HAVE_CAIRO_WIN32': True, 'PLATFORM_WIN32': True}
+ vars = read_vars_from_AM(os.path.join(srcroot, subdir, 'Makefile.am'),
+ vars = {},
+ conds = cond_pangocairo,
+ filters = ['libpangocairo_1_0_la_SOURCES', 'pangocairo_headers'])
+
+ files = vars['libpangocairo_1_0_la_SOURCES'].split() + \
+ vars['pangocairo_headers'].split()
+
+ sources = [i for i in files \
+ if not (i.endswith('-private.h'))]
+
+ with open(dest, 'w') as d:
+ for i in sources:
+ d.write(srcroot + '\\' + subdir + '\\' + i.replace('/', '\\') + '\n')
+
+def read_vars_from_AM(path, vars = {}, conds = {}, filters = None):
+ '''
+ path: path to the Makefile.am
+ vars: predefined variables
+ conds: condition variables for Makefile
+ filters: if None, all variables defined are returned,
+ otherwise, it is a list contains that variables should be returned
+ '''
+ cur_vars = vars.copy()
+ RE_AM_VAR_REF = re.compile(r'\$\((\w+?)\)')
+ RE_AM_VAR = re.compile(r'^\s*(\w+)\s*=(.*)$')
+ RE_AM_INCLUDE = re.compile(r'^\s*include\s+(\w+)')
+ RE_AM_VAR_ADD = re.compile(r'^\s*(\w+)\s*\+=(.*)$')
+ RE_AM_CONTINUING = re.compile(r'\\\s*$')
+ RE_AM_IF = re.compile(r'^\s*if\s+(\w+)')
+ RE_AM_ELSE = re.compile(r'^\s*else')
+ RE_AM_ENDIF = re.compile(r'^\s*endif')
+ def am_eval(cont):
+ return RE_AM_VAR_REF.sub(lambda x: cur_vars.get(x.group(1), ''), cont)
+ with open(path, 'r') as f:
+ contents = f.readlines()
+ #combine continuing lines
+ i = 0
+ ncont = []
+ while i < len(contents):
+ line = contents[i]
+ if RE_AM_CONTINUING.search(line):
+ line = RE_AM_CONTINUING.sub('', line)
+ j = i + 1
+ while j < len(contents) and RE_AM_CONTINUING.search(contents[j]):
+ line += RE_AM_CONTINUING.sub('', contents[j])
+ j += 1
+ else:
+ if j < len(contents):
+ line += contents[j]
+ i = j
+ else:
+ i += 1
+ ncont.append(line)
+
+ #include, var define, var evaluation
+ i = -1
+ skip = False
+ oldskip = []
+ while i < len(ncont) - 1:
+ i += 1
+ line = ncont[i]
+ mo = RE_AM_IF.search(line)
+ if mo:
+ oldskip.append(skip)
+ skip = False if mo.group(1) in conds and conds[mo.group(1)] \
+ else True
+ continue
+ mo = RE_AM_ELSE.search(line)
+ if mo:
+ skip = not skip
+ continue
+ mo = RE_AM_ENDIF.search(line)
+ if mo:
+ skip = oldskip.pop()
+ continue
+ if not skip:
+ mo = RE_AM_INCLUDE.search(line)
+ if mo:
+ cur_vars.update(read_vars_from_AM(am_eval(mo.group(1)), cur_vars, conds, None))
+ continue
+ mo = RE_AM_VAR.search(line)
+ if mo:
+ cur_vars[mo.group(1)] = am_eval(mo.group(2).strip())
+ continue
+ mo = RE_AM_VAR_ADD.search(line)
+ if mo:
+ try:
+ cur_vars[mo.group(1)] += ' '
+ except KeyError:
+ cur_vars[mo.group(1)] = ''
+ cur_vars[mo.group(1)] += am_eval(mo.group(2).strip())
+ continue
+
+ #filter:
+ if filters != None:
+ ret = {}
+ for i in filters:
+ ret[i] = cur_vars.get(i, '')
+ return ret
+ else:
+ return cur_vars
+
+def main(argv):
+ srcroot = '..'
+ subdir = 'pango'
+ gen_pango_filelist(srcroot, subdir, 'pango_list')
+ gen_pangoft_filelist(srcroot, subdir, 'pangoft_list')
+ gen_pangocairo_filelist(srcroot, subdir, 'pangocairo_list', 0)
+ gen_pangocairo_filelist(srcroot, subdir, 'pangocairoft_list', 1)
+ return 0
+
+if __name__ == '__main__':
+ sys.exit(main(sys.argv))