12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182 |
- # -*- python -*-
- #
- # Copyright (c) 2016 Stefan Seefeld
- # All rights reserved.
- #
- # Distributed under the Boost Software License, Version 1.0.
- # (See accompanying file LICENSE_1_0.txt or copy at
- # http://www.boost.org/LICENSE_1_0.txt)
- from faber.feature import set
- from faber.types import cxx
- from faber.tools.compiler import cxxflags, define, include
- from faber.tools.python import python
- from faber.config import report, cxx_checks
- from faber.config.try_run import try_run
- features += include('include')
- features += define('BOOST_ALL_NO_LIB') # disable auto-linking
- boost_include = options.get_with('boost-include')
- if boost_include:
- features += include(boost_include)
- python = python.instance()
- py_suffix = '{}{}'.format(*python.version.split('.')[:2])
- features |= set(python.include, python.linkpath, python.libs)
- class has_numpy(try_run):
- src = r"""
- // If defined, enforces linking against PythonXXd.lib, which
- // is usually not included in Python environments.
- #undef _DEBUG
- #include "Python.h"
- #define NPY_NO_DEPRECATED_API NPY_1_7_API_VERSION
- #include "numpy/arrayobject.h"
- #if PY_VERSION_HEX >= 0x03000000
- void *initialize() { import_array();}
- #else
- void initialize() { import_array();}
- #endif
- int main()
- {
- int result = 0;
- Py_Initialize();
- initialize();
- if (PyErr_Occurred())
- {
- result = 1;
- }
- else
- {
- npy_intp dims = 2;
- PyObject * a = PyArray_SimpleNew(1, &dims, NPY_INT);
- if (!a) result = 1;
- Py_DECREF(a);
- }
- Py_Finalize();
- return result;
- }
- """
- def __init__(self, features=()):
- inc = ''
- try:
- inc = python.check_python('import numpy; print(numpy.get_include())')
- features |= include(inc)
- except Exception:
- # ignore errors, the check will fail during compilation...
- pass
- try_run.__init__(self, 'has_numpy', has_numpy.src, cxx, features,
- if_=(include(inc), define('HAS_NUMPY')))
- checks = [cxx_checks.has_cxx11(features, define('HAS_CXX11')),
- has_numpy(features)]
- config = report('config', checks)
- src = module('src', features=config.use)
- test = module('test', features=config.use)
- doc = module('doc', features=config.use)
- default = src.default
|