Skip to content

Commit c71fbb5

Browse files
committed
build-sys: output full pkg-config output on failure
1 parent ddca9bb commit c71fbb5

File tree

1 file changed

+28
-10
lines changed

1 file changed

+28
-10
lines changed

setup.py

Lines changed: 28 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,37 @@
1+
import sys, os
12
from distutils.core import setup, Extension
2-
import subprocess
3+
from subprocess import Popen, PIPE
4+
5+
def call(*cmd):
6+
cmd = Popen(cmd,
7+
stdout=PIPE, stderr=PIPE,
8+
universal_newlines=True)
9+
if cmd.wait() == 0:
10+
return cmd.returncode, cmd.stdout.read()
11+
else:
12+
return cmd.returncode, cmd.stderr.read()
313

414
def pkgconfig(package, **kw):
515
flag_map = {'-I': 'include_dirs', '-L': 'library_dirs', '-l': 'libraries'}
6-
output = subprocess.check_output(['pkg-config', '--libs', '--cflags', package],
7-
universal_newlines=True)
8-
for token in output.split():
16+
status, result = call('pkg-config', '--libs', '--cflags', package)
17+
if status != 0:
18+
return status, result
19+
for token in result.split():
920
kw.setdefault(flag_map.get(token[:2]), []).append(token[2:])
10-
return kw
21+
return status, kw
1122

12-
def lib(name, fallback):
13-
try:
14-
return pkgconfig(name)
15-
except subprocess.CalledProcessError:
16-
return pkgconfig(fallback)
23+
def lib(*names):
24+
if '--version' in sys.argv:
25+
return {}
26+
results = []
27+
for name in names:
28+
status, result = pkgconfig(name)
29+
if status == 0:
30+
return result
31+
results.append(result)
32+
sys.stderr.write('Cannot find ' + ' or '.join(names) + ':\n\n'
33+
+ '\n'.join(results) + '\n')
34+
sys.exit(status)
1735

1836
version = '230'
1937
defines = [('PACKAGE_VERSION', '"{}"'.format(version))]

0 commit comments

Comments
 (0)