From 3c7236fe73d5fc966a6493f560634c71480aab20 Mon Sep 17 00:00:00 2001 From: Emmanuel Gil Peyrot Date: Wed, 5 Oct 2016 20:28:11 +0100 Subject: [PATCH] setup.py: Check for libidn before trying to use Cython. --- setup.py | 32 ++++++++++++++++++++++++-------- 1 file changed, 24 insertions(+), 8 deletions(-) diff --git a/setup.py b/setup.py index ff5bcfb1..47bba942 100755 --- a/setup.py +++ b/setup.py @@ -7,20 +7,15 @@ # This software is licensed as described in the README.rst and LICENSE # file, which you should have received as part of this distribution. +import os from pathlib import Path +from subprocess import call, DEVNULL +from tempfile import TemporaryFile try: from setuptools import setup except ImportError: from distutils.core import setup -try: - from Cython.Build import cythonize -except ImportError: - print('Cython not found, falling back to the slow stringprep module.') - ext_modules = None -else: - ext_modules = cythonize('slixmpp/stringprep.pyx') - from run_tests import TestCommand from slixmpp.version import __version__ @@ -40,6 +35,27 @@ CLASSIFIERS = [ packages = [str(mod.parent) for mod in Path('slixmpp').rglob('__init__.py')] +def check_include(header): + command = [os.environ.get('CC', 'cc'), '-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: + return False + +ext_modules = None +if check_include('stringprep.h'): + try: + from Cython.Build import cythonize + except ImportError: + print('Cython not found, falling back to the slow stringprep module.') + else: + ext_modules = cythonize('slixmpp/stringprep.pyx') +else: + print('libidn-dev not found, falling back to the slow stringprep module.') + setup( name="slixmpp", version=VERSION,