~ubuntu-branches/ubuntu/trusty/gdk-pixbuf/trusty

« back to all changes in this revision

Viewing changes to build/gen-file-list-gdkpixbuf.py

  • Committer: Package Import Robot
  • Author(s): Emilio Pozuelo Monfort
  • Date: 2014-03-09 14:15:14 UTC
  • mfrom: (33.2.5 sid)
  • Revision ID: package-import@ubuntu.com-20140309141514-uvya5226rz803e04
Tags: 2.30.6-1
New upstream release.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
#!/usr/bin/python
 
2
# vim: encoding=utf-8
 
3
# Generate the file lists for processing with g-ir-scanner
 
4
import os
 
5
import sys
 
6
import re
 
7
import string
 
8
import subprocess
 
9
import optparse
 
10
 
 
11
def gen_gdkpixbuf_filelist(srcroot, subdir, dest):
 
12
    vars = read_vars_from_AM(os.path.join(srcroot, subdir, 'Makefile.am'),
 
13
                             vars = {},
 
14
                             conds = {'HAVE_INTROSPECTION':True},
 
15
                             filters = ['GdkPixbuf_2_0_gir_FILES'])
 
16
 
 
17
    files = vars['GdkPixbuf_2_0_gir_FILES'].split()
 
18
 
 
19
    with open(dest, 'w') as d:
 
20
        for i in files:
 
21
            d.write(srcroot + '\\' + subdir + '\\' + i.replace('/', '\\') + '\n')
 
22
 
 
23
def read_vars_from_AM(path, vars = {}, conds = {}, filters = None):
 
24
    '''
 
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
 
30
    '''
 
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')
 
39
    def am_eval(cont):
 
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
 
44
    i = 0
 
45
    ncont = []
 
46
    while i < len(contents):
 
47
        line = contents[i]
 
48
        if RE_AM_CONTINUING.search(line):
 
49
            line = RE_AM_CONTINUING.sub('', line)
 
50
            j = i + 1
 
51
            while j < len(contents) and RE_AM_CONTINUING.search(contents[j]):
 
52
                line += RE_AM_CONTINUING.sub('', contents[j])
 
53
                j += 1
 
54
            else:
 
55
                if j < len(contents):
 
56
                    line += contents[j]
 
57
            i = j
 
58
        else:
 
59
            i += 1
 
60
        ncont.append(line)
 
61
 
 
62
    #include, var define, var evaluation
 
63
    i = -1
 
64
    skip = False
 
65
    oldskip = []
 
66
    while i < len(ncont) - 1:
 
67
        i += 1
 
68
        line = ncont[i]
 
69
        mo = RE_AM_IF.search(line)
 
70
        if mo:
 
71
            oldskip.append(skip)
 
72
            skip = False if mo.group(1) in conds and conds[mo.group(1)] \
 
73
                         else True
 
74
            continue
 
75
        mo = RE_AM_ELSE.search(line)
 
76
        if mo:
 
77
            skip = not skip
 
78
            continue
 
79
        mo = RE_AM_ENDIF.search(line)
 
80
        if mo:
 
81
            skip = oldskip.pop()
 
82
            continue
 
83
        if not skip:
 
84
            mo = RE_AM_INCLUDE.search(line)
 
85
            if mo:
 
86
                cur_vars.update(read_vars_from_AM(am_eval(mo.group(1)), cur_vars, conds, None))
 
87
                continue
 
88
            mo = RE_AM_VAR.search(line)
 
89
            if mo:
 
90
                cur_vars[mo.group(1)] = am_eval(mo.group(2).strip())
 
91
                continue
 
92
 
 
93
    #filter:
 
94
    if filters != None:
 
95
        ret = {}
 
96
        for i in filters:
 
97
            ret[i] = cur_vars.get(i, '')
 
98
        return ret
 
99
    else:
 
100
        return cur_vars
 
101
 
 
102
def main(argv):
 
103
    srcroot = '..'
 
104
    subdir = 'gdk-pixbuf'
 
105
    gen_gdkpixbuf_filelist(srcroot, subdir, 'gdkpixbuf_list')
 
106
    return 0
 
107
 
 
108
if __name__ == '__main__':
 
109
    sys.exit(main(sys.argv))