A Python package wrapping stormpci.h via PyBind11 for interfacing with StormPCI and reading binary files
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

75 lines
2.0 KiB

from setuptools import setup, Extension
from setuptools.command.build_ext import build_ext
import os, sys
ext_modules = [
Extension(
'pbtest',
['py/main.cpp'],
include_dirs=['include'],
language='c++',
),
]
def has_flag(compiler, flagname):
"""Return a boolean indicating whether a flag name is supported on
the specified compiler.
"""
import tempfile
fd, fname = tempfile.mkstemp('.cpp', 'main', text=True)
f = os.fdopen(fd, 'w')
try:
f.write('int main (int argc, char **argv) { return 0; }')
finally:
f.close()
try:
compiler.compile([fname], extra_postargs=[flagname])
except setuptools.distutils.errors.CompileError:
return False
return True
def cpp_flag(compiler):
"""Return the -std=c++[11/14] compiler flag.
The c++14 is prefered over c++11 (when it is available).
"""
if has_flag(compiler, '-std=c++14'):
return '-std=c++14'
elif has_flag(compiler, '-std=c++11'):
return '-std=c++11'
else:
raise RuntimeError('Unsupported compiler -- at least C++11 support is needed!')
class BuildExt(build_ext):
"""A custom build extension for adding compiler-specific options."""
c_opts = {
'msvc': ['/EHsc'],
'unix': [],
}
if sys.platform == 'darwin':
c_opts['unix'] += ['-stdlib=libc++', '-mmacosx-version-min=10.7']
def build_extensions(self):
ct = self.compiler.compiler_type
opts = self.c_opts.get(ct, [])
if ct == 'unix':
opts.append(cpp_flag(self.compiler))
for ext in self.extensions:
ext.extra_compile_args = opts
build_ext.build_extensions(self)
setup(
name='pbtest',
version='0.0.1',
author='Sylvain Corlay',
author_email='sylvain.corlay@gmail.com',
url='https://github.com/pybind/pbtest',
description='A test project using pybind11',
long_description='',
ext_modules=ext_modules,
install_requires=['pybind11'],
cmdclass={'build_ext': BuildExt},
zip_safe=False,
)