From 5c45252a2bdea99ff0d802edde84eb35339bcbd7 Mon Sep 17 00:00:00 2001 From: Emmanuel Gil Peyrot Date: Sat, 31 Mar 2018 02:01:03 +0200 Subject: [PATCH] =?UTF-8?q?Abort=20if=20Python.h=20isn=E2=80=99t=20found.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Fixes #3254. --- setup.py | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/setup.py b/setup.py index 08e26164..c47fbf8d 100755 --- a/setup.py +++ b/setup.py @@ -36,6 +36,30 @@ def find_doc(before, path): _files.append((join(before, relative_root), files_path)) return _files +def check_include(library_name, header): + command = [os.environ.get('PKG_CONFIG', 'pkg-config'), '--cflags', library_name] + try: + cflags = check_output(command).decode('utf-8').split() + except FileNotFoundError: + print('pkg-config not found.') + return False + except CalledProcessError: + # pkg-config already prints the missing libraries on stderr. + return False + command = [os.environ.get('CC', 'cc')] + cflags + ['-E', '-'] + with TemporaryFile('w+') as c_file: + c_file.write('#include <%s>' % header) + c_file.seek(0) + try: + return call(command, stdin=c_file, stdout=DEVNULL, stderr=DEVNULL) == 0 + except FileNotFoundError: + print('%s headers not found.' % library_name) + return False + +if not check_include('python3', 'Python.h'): + import sys + sys.exit(0) + module_poopt = Extension('poezio.poopt', extra_compile_args=['-Wno-declaration-after-statement'], sources=['poezio/pooptmodule.c'])