4
REMOVE_THESE = ["-I/usr/include", "-I/usr/include/", "-L/usr/lib", "-L/usr/lib/"]
7
def __init__(self, pkg_name):
12
def parse(self, pkg_config_path):
14
for pkg_path in pkg_config_path.split(':'):
15
if pkg_path[-1] != '/':
17
fname = pkg_path + self.name + '.pc'
24
#sys.stderr.write("pkgconfig.py: unable to find %s.pc in %s\n" % (self.name, pkg_config_path))
27
for line in f.readlines():
35
if pos1 > 0 and (pos1 < pos2 or pos2 < 0):
37
elif pos2 > 0 and (pos2 < pos1 or pos1 < 0):
41
name = line[:pos].lower()
43
self.vars[name] = value
46
for name in self.vars.keys():
47
value = self.vars[name]
49
pos1 = value.find("${")
52
pos2 = value.find("}")
55
value = value.replace(value[pos1:pos2+1], self.vars[value[pos1+2:pos2]])
56
self.vars[name] = value
60
if not 'requires' in self.vars:
63
req_list = self.vars['requires']
64
for req_item in req_list.split(','):
65
req_item = req_item.strip()
66
for i in range(len(req_item)):
67
if "=<>".find(req_item[i]) >= 0:
68
deps.append(req_item[:i].strip())
73
if not 'libs' in self.vars:
75
return self.vars['libs'].split(' ')
78
if not 'cflags' in self.vars:
80
return self.vars['cflags'].split(' ')
83
def calculate_pkg_priority(pkg, pkg_dict, loop_cnt):
85
sys.stderr.write("Circular dependency with pkg %s\n" % (pkg))
90
if not req in pkg_dict:
92
req_pkg = pkg_dict[req]
93
prio += calculate_pkg_priority(req_pkg, pkg_dict, loop_cnt+1)
96
if __name__ == "__main__":
102
for i in range(1,len(sys.argv)):
103
if sys.argv[i][0] == '-':
109
print "This is not very helpful, is it"
111
elif cmd=="--version":
115
pkg_names.append(sys.argv[i])
118
PKG_CONFIG_PATH = os.getenv("PKG_CONFIG_PATH", "").strip()
119
if not PKG_CONFIG_PATH:
120
PKG_CONFIG_PATH="/usr/local/lib/pkgconfig:/usr/lib/pkgconfig"
121
PKG_CONFIG_PATH = PKG_CONFIG_PATH.replace(";", ":")
124
for pkg_name in pkg_names:
126
if not pkg.parse(PKG_CONFIG_PATH):
128
pkg_dict[pkg_name] = pkg
133
# Calculate priority based on dependency
134
for pkg_name in pkg_dict.keys():
135
pkg = pkg_dict[pkg_name]
136
pkg.priority = calculate_pkg_priority(pkg, pkg_dict, 1)
138
# Sort package based on dependency
139
pkg_names = sorted(pkg_names, key=lambda pkg_name: pkg_dict[pkg_name].priority, reverse=True)
145
for pkg_name in pkg_names:
146
libs = pkg_dict[pkg_name].libs()
151
for pkg_name in pkg_names:
152
opts += pkg_dict[pkg_name].libs()
153
elif cmd=='--cflags':
154
for pkg_name in pkg_names:
155
opts += pkg_dict[pkg_name].cflags()
157
sys.stderr.write("pkgconfig.py: I don't know how to handle " + sys.argv[i] + "\n")
164
if REMOVE_THESE.count(opt) != 0:
166
if opt != '-framework' and opt != '--framework' and filtered_opts.count(opt) != 0:
167
if len(filtered_opts) and (filtered_opts[-1] == '-framework' or filtered_opts[-1] == '--framework'):
170
filtered_opts.append(opt)
172
print ' '.join(filtered_opts)