def configuration(parent_package='', top_path=None): from numpy.distutils.misc_util import Configuration from scipy._lib._boost_utils import _boost_dir config = Configuration('_lib', parent_package, top_path) config.add_data_files('tests/*.py') include_dir = os.path.abspath( os.path.join(os.path.dirname(__file__), 'src')) depends = [os.path.join(include_dir, 'ccallback.h')] config.add_extension("_ccallback_c", sources=["_ccallback_c.c"], depends=depends, include_dirs=[include_dir]) config.add_extension("_test_ccallback", sources=["src/_test_ccallback.c"], depends=depends, include_dirs=[include_dir]) config.add_extension("_fpumode", sources=["_fpumode.c"]) def get_messagestream_config(ext, build_dir): # Generate a header file containing defines config_cmd = config.get_config_cmd() defines = [] if config_cmd.check_func('open_memstream', decl=True, call=True): defines.append(('HAVE_OPEN_MEMSTREAM', '1')) target = os.path.join(os.path.dirname(__file__), 'src', 'messagestream_config.h') with open(target, 'w') as f: for name, value in defines: f.write('#define {0} {1}\n'.format(name, value)) depends = [os.path.join(include_dir, 'messagestream.h')] config.add_extension("messagestream", sources=["messagestream.c"] + [get_messagestream_config], depends=depends, include_dirs=[include_dir]) config.add_extension("_test_deprecation_call", sources=["_test_deprecation_call.c"], include_dirs=[include_dir]) config.add_extension("_test_deprecation_def", sources=["_test_deprecation_def.c"], include_dirs=[include_dir]) config.add_subpackage('_uarray') # ensure Boost was checked out and builds config.add_library('test_boost_build', sources=['tests/test_boost_build.cpp'], include_dirs=_boost_dir(), language='c++', _pre_build_hook=build_clib_pre_build_hook) return config
def configuration(parent_package='', top_path=None): from scipy._lib._boost_utils import _boost_dir from scipy._build_utils import import_file from numpy.distutils.misc_util import Configuration import numpy as np config = Configuration('_boost', parent_package, top_path) DEFINES = [ # return nan instead of throwing ('BOOST_MATH_DOMAIN_ERROR_POLICY', 'ignore_error'), ('BOOST_MATH_EVALUATION_ERROR_POLICY', 'user_error'), ('BOOST_MATH_OVERFLOW_ERROR_POLICY', 'user_error'), ] if sys.maxsize > 2**32: # 32-bit machines lose too much precision with no promotion, # so only set this policy for 64-bit machines DEFINES += [('BOOST_MATH_PROMOTE_DOUBLE_POLICY', 'false')] INCLUDES = [ 'include/', 'src/', np.get_include(), _boost_dir(), ] # generate the PXD and PYX wrappers boost_dir = pathlib.Path(__file__).parent src_dir = boost_dir / 'src' _klass_mapper = import_file(boost_dir / 'include', '_info')._klass_mapper for s in _klass_mapper.values(): ext = config.add_extension( f'{s.scipy_name}_ufunc', sources=[f'{src_dir}/{s.scipy_name}_ufunc.cxx'], include_dirs=INCLUDES, define_macros=DEFINES, language='c++', depends=[ 'include/func_defs.hpp', 'include/Templated_PyUFunc.hpp', ], ) # Add c++11/14 support: ext._pre_build_hook = pre_build_hook return config
def check_boost_submodule(): from scipy._lib._boost_utils import _boost_dir if not os.path.exists(_boost_dir(ret_path=True) / 'README.md'): raise RuntimeError("Missing the `boost` submodule! Run `git submodule " "update --init` to fix this.")