From ff2f5870b901f9d71c75607c57c9dc7b4641b253 Mon Sep 17 00:00:00 2001 From: Florian Klien <flowolf@klienux.org> Date: Thu, 26 Oct 2017 10:03:32 +0200 Subject: [PATCH] fixing Cypthon dependency force setuptools to install Cython if it's not installed --- setup.py | 67 ++++++++++++++++++++++++++++++++++++-------------------- 1 file changed, 43 insertions(+), 24 deletions(-) diff --git a/setup.py b/setup.py index 231b402..b058239 100644 --- a/setup.py +++ b/setup.py @@ -4,39 +4,59 @@ import subprocess from distutils.core import setup from distutils.extension import Extension from distutils.command.build_ext import build_ext -from Cython.Build import cythonize + +CYTHON_VERSION = 'Cython==0.27.2' class prepare_tinydtls(build_ext): def run(self): def run_command(args): print("Running:", " ".join(args)) subprocess.check_call(args, cwd=os.path.join(os.path.dirname(__file__), "DTLSSocket","tinydtls")) - commands = [ - ["autoconf"], - ["autoheader"], - ["./configure", "--without-ecc"], - ] + commands = [ + ["autoconf"], + ["autoheader"], + ["./configure", "--without-ecc"], + ] if not os.path.exists(os.path.join(os.path.dirname(__file__), 'DTLSSocket','tinydtls','dtls.c')): run_command(["git", "submodule", "update", "--init"]) for command in commands: run_command(command) build_ext.run(self) -cy_build = cythonize([ - Extension("DTLSSocket.dtls", - ["DTLSSocket/dtls.pyx", - "DTLSSocket/tinydtls/dtls.c", "DTLSSocket/tinydtls/crypto.c", - "DTLSSocket/tinydtls/ccm.c", "DTLSSocket/tinydtls/hmac.c", "DTLSSocket/tinydtls/netq.c", - "DTLSSocket/tinydtls/peer.c", "DTLSSocket/tinydtls/dtls_time.c", - "DTLSSocket/tinydtls/session.c", "DTLSSocket/tinydtls/dtls_debug.c", - "DTLSSocket/tinydtls/aes/rijndael.c", "DTLSSocket/tinydtls/sha2/sha2.c"], - include_dirs=['DTLSSocket/tinydtls'], - define_macros=[('DTLSv12', '1'), - ('WITH_SHA256', '1'), - ('DTLS_CHECK_CONTENTTYPE', '1'), - ('_GNU_SOURCE', '1')], - undef_macros = [ "NDEBUG" ], - )]) +# force setuptools to install Cython before proceeding +try: + from Cython.Build import cythonize +except: + from setuptools.dist import Distribution + Distribution(dict(setup_requires=CYTHON_VERSION)) + +def get_ext_modules(): + from Cython.Build import cythonize + return cythonize([ + Extension("DTLSSocket.dtls", + [ + "DTLSSocket/dtls.pyx", + "DTLSSocket/tinydtls/ccm.c", + "DTLSSocket/tinydtls/crypto.c", + "DTLSSocket/tinydtls/dtls.c", + "DTLSSocket/tinydtls/dtls_debug.c", + "DTLSSocket/tinydtls/dtls_time.c", + "DTLSSocket/tinydtls/hmac.c", + "DTLSSocket/tinydtls/netq.c", + "DTLSSocket/tinydtls/peer.c", + "DTLSSocket/tinydtls/session.c", + "DTLSSocket/tinydtls/aes/rijndael.c", + "DTLSSocket/tinydtls/sha2/sha2.c" + ], + include_dirs=['DTLSSocket/tinydtls'], + define_macros=[('DTLSv12', '1'), + ('WITH_SHA256', '1'), + ('DTLS_CHECK_CONTENTTYPE', '1'), + ('_GNU_SOURCE', '1')], + undef_macros = [ "NDEBUG" ], + )]) + +ext_modules = get_ext_modules() setup( name="DTLSSocket", @@ -47,7 +67,6 @@ setup( url = "https://git.fslab.de/jkonra2m/tinydtls-cython", py_modules = [ "DTLSSocket.DTLSSocket"], cmdclass = {"build_ext": prepare_tinydtls}, - ext_modules = cy_build, - setup_requires = [ "Cython==0.27.2" ], - install_requires = [ "Cython==0.27.2" ], + ext_modules = ext_modules, + setup_requires = [ CYTHON_VERSION ], ) -- GitLab