1#!/usr/bin/env python 2 3# Setup script for PyPI; use CMakeFile.txt to build extension modules 4 5from setuptools import setup 6from distutils.command.install_headers import install_headers 7from pybind11 import __version__ 8import os 9 10# Prevent installation of pybind11 headers by setting 11# PYBIND11_USE_CMAKE. 12if os.environ.get('PYBIND11_USE_CMAKE'): 13 headers = [] 14else: 15 headers = [ 16 'include/pybind11/detail/class.h', 17 'include/pybind11/detail/common.h', 18 'include/pybind11/detail/descr.h', 19 'include/pybind11/detail/init.h', 20 'include/pybind11/detail/internals.h', 21 'include/pybind11/detail/typeid.h', 22 'include/pybind11/attr.h', 23 'include/pybind11/buffer_info.h', 24 'include/pybind11/cast.h', 25 'include/pybind11/chrono.h', 26 'include/pybind11/common.h', 27 'include/pybind11/complex.h', 28 'include/pybind11/eigen.h', 29 'include/pybind11/embed.h', 30 'include/pybind11/eval.h', 31 'include/pybind11/functional.h', 32 'include/pybind11/iostream.h', 33 'include/pybind11/numpy.h', 34 'include/pybind11/operators.h', 35 'include/pybind11/options.h', 36 'include/pybind11/pybind11.h', 37 'include/pybind11/pytypes.h', 38 'include/pybind11/stl.h', 39 'include/pybind11/stl_bind.h', 40 ] 41 42 43class InstallHeaders(install_headers): 44 """Use custom header installer because the default one flattens subdirectories""" 45 def run(self): 46 if not self.distribution.headers: 47 return 48 49 for header in self.distribution.headers: 50 subdir = os.path.dirname(os.path.relpath(header, 'include/pybind11')) 51 install_dir = os.path.join(self.install_dir, subdir) 52 self.mkpath(install_dir) 53 54 (out, _) = self.copy_file(header, install_dir) 55 self.outfiles.append(out) 56 57 58setup( 59 name='pybind11', 60 version=__version__, 61 description='Seamless operability between C++11 and Python', 62 author='Wenzel Jakob', 63 author_email='wenzel.jakob@epfl.ch', 64 url='https://github.com/pybind/pybind11', 65 download_url='https://github.com/pybind/pybind11/tarball/v' + __version__, 66 packages=['pybind11'], 67 license='BSD', 68 headers=headers, 69 cmdclass=dict(install_headers=InstallHeaders), 70 classifiers=[ 71 'Development Status :: 5 - Production/Stable', 72 'Intended Audience :: Developers', 73 'Topic :: Software Development :: Libraries :: Python Modules', 74 'Topic :: Utilities', 75 'Programming Language :: C++', 76 'Programming Language :: Python :: 2.7', 77 'Programming Language :: Python :: 3', 78 'Programming Language :: Python :: 3.2', 79 'Programming Language :: Python :: 3.3', 80 'Programming Language :: Python :: 3.4', 81 'Programming Language :: Python :: 3.5', 82 'Programming Language :: Python :: 3.6', 83 'License :: OSI Approved :: BSD License' 84 ], 85 keywords='C++11, Python bindings', 86 long_description="""pybind11 is a lightweight header-only library that 87exposes C++ types in Python and vice versa, mainly to create Python bindings of 88existing C++ code. Its goals and syntax are similar to the excellent 89Boost.Python by David Abrahams: to minimize boilerplate code in traditional 90extension modules by inferring type information using compile-time 91introspection. 92 93The main issue with Boost.Python-and the reason for creating such a similar 94project-is Boost. Boost is an enormously large and complex suite of utility 95libraries that works with almost every C++ compiler in existence. This 96compatibility has its cost: arcane template tricks and workarounds are 97necessary to support the oldest and buggiest of compiler specimens. Now that 98C++11-compatible compilers are widely available, this heavy machinery has 99become an excessively large and unnecessary dependency. 100 101Think of this library as a tiny self-contained version of Boost.Python with 102everything stripped away that isn't relevant for binding generation. Without 103comments, the core header files only require ~4K lines of code and depend on 104Python (2.7 or 3.x, or PyPy2.7 >= 5.7) and the C++ standard library. This 105compact implementation was possible thanks to some of the new C++11 language 106features (specifically: tuples, lambda functions and variadic templates). Since 107its creation, this library has grown beyond Boost.Python in many ways, leading 108to dramatically simpler binding code in many common situations.""") 109