1#!/usr/bin/env python3 2# Copyright (c) 2011-2020 Manfred Moitzi 3# License: MIT License 4import os 5import sys 6from setuptools import setup, find_packages 7from setuptools import Extension 8 9# setuptools docs: https://setuptools.readthedocs.io/en/latest/setuptools.html 10 11# Cython accelerated modules are optional: 12try: 13 from Cython.Distutils import build_ext 14 15 ext_modules = [ 16 Extension("ezdxf.acc.vector", [ 17 "src/ezdxf/acc/vector.pyx", 18 ], optional=True, language='c++'), 19 Extension("ezdxf.acc.matrix44", [ 20 "src/ezdxf/acc/matrix44.pyx", 21 ], optional=True, language='c++'), 22 Extension("ezdxf.acc.bezier4p", [ 23 "src/ezdxf/acc/bezier4p.pyx", 24 "src/ezdxf/acc/_cpp_cubic_bezier.cpp", 25 ], optional=True, language='c++'), 26 Extension("ezdxf.acc.bezier3p", [ 27 "src/ezdxf/acc/bezier3p.pyx", 28 "src/ezdxf/acc/_cpp_quad_bezier.cpp", 29 ], optional=True, language='c++'), 30 Extension("ezdxf.acc.bspline", [ 31 "src/ezdxf/acc/bspline.pyx", 32 ], optional=True, language='c++'), 33 Extension("ezdxf.acc.construct", [ 34 "src/ezdxf/acc/construct.pyx", 35 ], optional=True, language='c++'), 36 ] 37 commands = {'build_ext': build_ext} 38except ImportError: 39 ext_modules = [] 40 commands = {} 41 42PYPY = hasattr(sys, 'pypy_version_info') 43if PYPY: 44 print("C-extensions are disabled for pypy because JIT complied Python code " 45 "is much faster!") 46 ext_modules = [] 47 commands = {} 48 49 50def get_version(): 51 v = {} 52 for line in open('./src/ezdxf/version.py').readlines(): 53 if line.strip().startswith('__version__'): 54 exec(line, v) 55 return v['__version__'] 56 raise IOError('__version__ string not found') 57 58 59def read(fname, until=""): 60 def read_until(lines): 61 last_index = -1 62 for index, line in enumerate(lines): 63 if line.startswith(until): 64 last_index = index 65 break 66 return "".join(lines[:last_index]) 67 68 try: 69 with open(os.path.join(os.path.dirname(__file__), fname)) as f: 70 return read_until(f.readlines()) if until else f.read() 71 except IOError: 72 return "File '%s' not found.\n" % fname 73 74 75DRAW = ["matplotlib", "PyQt5"] 76TEST = ["pytest", "geomdl"] 77DEV = ["setuptools", "wheel", "Cython"] 78 79setup( 80 name='ezdxf', 81 version=get_version(), 82 description='A Python package to create/manipulate DXF drawings.', 83 author='Manfred Moitzi', 84 url='https://ezdxf.mozman.at', 85 download_url='https://pypi.org/project/ezdxf/', 86 author_email='me@mozman.at', 87 python_requires='>=3.7', 88 package_dir={'': 'src'}, 89 packages=find_packages('src'), 90 zip_safe=False, 91 package_data={'ezdxf': [ 92 'pp/*.html', 93 'pp/*.js', 94 'pp/*.css', 95 'tools/font_face_cache.json', 96 'tools/font_measurement_cache.json', 97 'resources/*.png', 98 ]}, 99 entry_points={ 100 'console_scripts': [ 101 'ezdxf = ezdxf.__main__:main', # ezdxf launcher 102 ] 103 }, 104 provides=['ezdxf'], 105 cmdclass=commands, 106 ext_modules=ext_modules, 107 install_requires=['pyparsing>=2.0.1'], 108 setup_requires=['wheel'], 109 tests_require=['pytest', 'geomdl'], 110 extras_require={ 111 "draw": DRAW, 112 "test": TEST, 113 "dev": DEV + TEST, 114 "all": DRAW + DEV + TEST, 115 }, 116 keywords=['DXF', 'CAD'], 117 long_description=read('README.md') + read('NEWS.md', until='Version 0.10.0'), 118 long_description_content_type="text/markdown", 119 platforms="OS Independent", 120 license="MIT License", 121 classifiers=[ 122 "Development Status :: 5 - Production/Stable", 123 "License :: OSI Approved :: MIT License", 124 "Operating System :: OS Independent", 125 "Programming Language :: Python :: 3", 126 "Programming Language :: Python :: 3.7", 127 "Programming Language :: Python :: 3.8", 128 "Programming Language :: Python :: 3.9", 129 "Programming Language :: Python :: Implementation :: CPython", 130 "Programming Language :: Python :: Implementation :: PyPy", 131 "Intended Audience :: Developers", 132 "Topic :: Software Development :: Libraries :: Python Modules", 133 ] 134) 135 136# Development Status :: 3 - Alpha 137# Development Status :: 4 - Beta 138# Development Status :: 5 - Production/Stable 139# Development Status :: 6 - Mature 140# Development Status :: 7 - Inactive 141