Ejemplo n.º 1
0
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
Ejemplo n.º 2
0
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
Ejemplo n.º 3
0
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.")