setup.py (2150B)
1 import os 2 import re 3 import sys 4 import sysconfig 5 import platform 6 import subprocess 7 8 from subprocess import CalledProcessError 9 from setuptools import setup, Extension 10 from setuptools.command.build_ext import build_ext 11 from distutils.version import LooseVersion 12 13 class CMakeExtension(Extension): 14 def __init__(self, name, sourcedir=''): 15 Extension.__init__(self, name, sources=[]) 16 self.sourcedir = os.path.abspath(sourcedir) 17 18 class CMakeBuild(build_ext): 19 def run(self): 20 try: 21 out = subprocess.check_output(['cmake', '--version']) 22 except OSError: 23 raise RuntimeError( 24 "CMake must be installed to build the following extensions: " + 25 ", ".join(e.name for e in self.extensions)) 26 27 if platform.system() == "Windows": 28 cmake_version = LooseVersion(re.search(r'version\s*([\d.]+)', 29 out.decode()).group(1)) 30 if cmake_version < '3.1.0': 31 raise RuntimeError("CMake >= 3.1.0 is required on Windows") 32 33 for ext in self.extensions: 34 if ext is None: 35 continue 36 self.build_extension(ext) 37 38 kwargs = dict( 39 name='Jacobian', 40 version='0.8', 41 author='David Freifeld', 42 author_email='freifeld.david@gmail.com', 43 description='A Python library for neural networks.', 44 long_description='', 45 ext_modules=[CMakeExtension('jacobian._jacobian')], 46 cmdclass=dict(build_ext=CMakeBuild), 47 zip_safe=False, 48 package=['jacobian'] 49 ) 50 51 # likely there are more exceptions, take a look at yarl example 52 try: 53 setup(**kwargs) 54 # name='Jacobian', 55 # version='0.8', 56 # author='David Freifeld', 57 # author_email='freifeld.david@gmail.com', 58 # description='A Python library for neural networks.', 59 # long_description='', 60 # ext_modules=[CMakeExtension('_jacobian')], 61 # cmdclass=dict(build_ext=CMakeBuild), 62 # zip_safe=True, 63 # package=['jacobian'] 64 except CalledProcessError: 65 print('Failed to build extension!') 66 del kwargs['ext_modules'] 67 setup(**kwargs)