1from os.path import join 2 3 4def configuration(parent_package='', top_path=None): 5 from distutils.sysconfig import get_python_inc 6 from scipy._build_utils.system_info import get_info, numpy_info 7 from numpy.distutils.misc_util import Configuration, get_numpy_include_dirs 8 from scipy._build_utils import (get_g77_abi_wrappers, gfortran_legacy_flag_hook, 9 blas_ilp64_pre_build_hook, get_f2py_int64_options, 10 uses_blas64) 11 12 config = Configuration('linalg', parent_package, top_path) 13 14 lapack_opt = get_info('lapack_opt') 15 16 atlas_version = ([v[3:-3] for k, v in lapack_opt.get('define_macros', []) 17 if k == 'ATLAS_INFO']+[None])[0] 18 if atlas_version: 19 print(('ATLAS version: %s' % atlas_version)) 20 21 if uses_blas64(): 22 lapack_ilp64_opt = get_info('lapack_ilp64_opt', 2) 23 24 # fblas: 25 sources = ['fblas.pyf.src'] 26 sources += get_g77_abi_wrappers(lapack_opt) 27 depends = ['fblas_l?.pyf.src'] 28 29 config.add_extension('_fblas', 30 sources=sources, 31 depends=depends, 32 extra_info=lapack_opt 33 ) 34 35 if uses_blas64(): 36 sources = ['fblas_64.pyf.src'] + sources[1:] 37 ext = config.add_extension('_fblas_64', 38 sources=sources, 39 depends=depends, 40 f2py_options=get_f2py_int64_options(), 41 extra_info=lapack_ilp64_opt) 42 ext._pre_build_hook = blas_ilp64_pre_build_hook(lapack_ilp64_opt) 43 44 # flapack: 45 sources = ['flapack.pyf.src'] 46 sources += get_g77_abi_wrappers(lapack_opt) 47 dep_pfx = join('src', 'lapack_deprecations') 48 deprecated_lapack_routines = [join(dep_pfx, c + 'gegv.f') for c in 'cdsz'] 49 sources += deprecated_lapack_routines 50 depends = ['flapack_gen.pyf.src', 51 'flapack_gen_banded.pyf.src', 52 'flapack_gen_tri.pyf.src', 53 'flapack_pos_def.pyf.src', 54 'flapack_pos_def_tri.pyf.src', 55 'flapack_sym_herm.pyf.src', 56 'flapack_other.pyf.src', 57 'flapack_user.pyf.src'] 58 59 config.add_extension('_flapack', 60 sources=sources, 61 depends=depends, 62 extra_info=lapack_opt 63 ) 64 65 if uses_blas64(): 66 sources = ['flapack_64.pyf.src'] + sources[1:] 67 ext = config.add_extension('_flapack_64', 68 sources=sources, 69 depends=depends, 70 f2py_options=get_f2py_int64_options(), 71 extra_info=lapack_ilp64_opt) 72 ext._pre_build_hook = blas_ilp64_pre_build_hook(lapack_ilp64_opt) 73 74 if atlas_version is not None: 75 # cblas: 76 config.add_extension('_cblas', 77 sources=['cblas.pyf.src'], 78 depends=['cblas.pyf.src', 'cblas_l1.pyf.src'], 79 extra_info=lapack_opt 80 ) 81 82 # clapack: 83 config.add_extension('_clapack', 84 sources=['clapack.pyf.src'], 85 depends=['clapack.pyf.src'], 86 extra_info=lapack_opt 87 ) 88 89 # _flinalg: 90 config.add_extension('_flinalg', 91 sources=[join('src', 'det.f'), join('src', 'lu.f')], 92 extra_info=lapack_opt 93 ) 94 95 # _interpolative: 96 ext = config.add_extension('_interpolative', 97 sources=[join('src', 'id_dist', 'src', '*.f'), 98 "interpolative.pyf"], 99 extra_info=lapack_opt 100 ) 101 ext._pre_build_hook = gfortran_legacy_flag_hook 102 103 # _solve_toeplitz: 104 config.add_extension('_solve_toeplitz', 105 sources=[('_solve_toeplitz.c')], 106 include_dirs=[get_numpy_include_dirs()]) 107 108 # _matfuncs_sqrtm_triu: 109 config.add_extension('_matfuncs_sqrtm_triu', 110 sources=[('_matfuncs_sqrtm_triu.c')], 111 include_dirs=[get_numpy_include_dirs()]) 112 113 config.add_data_dir('tests') 114 115 # Cython BLAS/LAPACK 116 config.add_data_files('cython_blas.pxd') 117 config.add_data_files('cython_lapack.pxd') 118 119 sources = ['_blas_subroutine_wrappers.f', '_lapack_subroutine_wrappers.f'] 120 sources += get_g77_abi_wrappers(lapack_opt) 121 includes = numpy_info().get_include_dirs() + [get_python_inc()] 122 config.add_library('fwrappers', sources=sources, include_dirs=includes) 123 124 config.add_extension('cython_blas', 125 sources=['cython_blas.c'], 126 depends=['cython_blas.pyx', 'cython_blas.pxd', 127 'fortran_defs.h', '_blas_subroutines.h'], 128 include_dirs=['.'], 129 libraries=['fwrappers'], 130 extra_info=lapack_opt) 131 132 config.add_extension('cython_lapack', 133 sources=['cython_lapack.c'], 134 depends=['cython_lapack.pyx', 'cython_lapack.pxd', 135 'fortran_defs.h', '_lapack_subroutines.h'], 136 include_dirs=['.'], 137 libraries=['fwrappers'], 138 extra_info=lapack_opt) 139 140 config.add_extension('_decomp_update', 141 sources=['_decomp_update.c']) 142 143 # Add any license files 144 config.add_data_files('src/id_dist/doc/doc.tex') 145 config.add_data_files('src/lapack_deprecations/LICENSE') 146 147 return config 148 149 150if __name__ == '__main__': 151 from numpy.distutils.core import setup 152 153 setup(**configuration(top_path='').todict()) 154