86 lines
2.6 KiB
Python
86 lines
2.6 KiB
Python
"""
|
|
Utilities useful during the build.
|
|
"""
|
|
# author: Andy Mueller, Gael Varoquaux
|
|
# license: BSD
|
|
|
|
from __future__ import division, print_function, absolute_import
|
|
|
|
import os
|
|
|
|
from distutils.version import LooseVersion
|
|
|
|
from numpy.distutils.system_info import get_info
|
|
|
|
DEFAULT_ROOT = 'sklearn'
|
|
# on conda, this is the latest for python 3.5
|
|
CYTHON_MIN_VERSION = '0.28.5'
|
|
|
|
|
|
def get_blas_info():
|
|
def atlas_not_found(blas_info_):
|
|
def_macros = blas_info.get('define_macros', [])
|
|
for x in def_macros:
|
|
if x[0] == "NO_ATLAS_INFO":
|
|
# if x[1] != 1 we should have lapack
|
|
# how do we do that now?
|
|
return True
|
|
if x[0] == "ATLAS_INFO":
|
|
if "None" in x[1]:
|
|
# this one turned up on FreeBSD
|
|
return True
|
|
return False
|
|
|
|
blas_info = get_info('blas_opt', 0)
|
|
if (not blas_info) or atlas_not_found(blas_info):
|
|
cblas_libs = ['cblas']
|
|
blas_info.pop('libraries', None)
|
|
else:
|
|
cblas_libs = blas_info.pop('libraries', [])
|
|
|
|
return cblas_libs, blas_info
|
|
|
|
|
|
def build_from_c_and_cpp_files(extensions):
|
|
"""Modify the extensions to build from the .c and .cpp files.
|
|
|
|
This is useful for releases, this way cython is not required to
|
|
run python setup.py install.
|
|
"""
|
|
for extension in extensions:
|
|
sources = []
|
|
for sfile in extension.sources:
|
|
path, ext = os.path.splitext(sfile)
|
|
if ext in ('.pyx', '.py'):
|
|
if extension.language == 'c++':
|
|
ext = '.cpp'
|
|
else:
|
|
ext = '.c'
|
|
sfile = path + ext
|
|
sources.append(sfile)
|
|
extension.sources = sources
|
|
|
|
|
|
def maybe_cythonize_extensions(top_path, config):
|
|
"""Tweaks for building extensions between release and development mode."""
|
|
is_release = os.path.exists(os.path.join(top_path, 'PKG-INFO'))
|
|
|
|
if is_release:
|
|
build_from_c_and_cpp_files(config.ext_modules)
|
|
else:
|
|
message = ('Please install cython with a version >= {0} in order '
|
|
'to build a scikit-learn development version.').format(
|
|
CYTHON_MIN_VERSION)
|
|
try:
|
|
import Cython
|
|
if LooseVersion(Cython.__version__) < CYTHON_MIN_VERSION:
|
|
message += ' Your version of Cython was {0}.'.format(
|
|
Cython.__version__)
|
|
raise ValueError(message)
|
|
from Cython.Build import cythonize
|
|
except ImportError as exc:
|
|
exc.args += (message,)
|
|
raise
|
|
|
|
config.ext_modules = cythonize(config.ext_modules)
|