setup.py 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  1. from __future__ import division, print_function, absolute_import
  2. import os
  3. from os.path import join
  4. from scipy._build_utils import numpy_nodepr_api
  5. def configuration(parent_package='',top_path=None):
  6. from numpy.distutils.misc_util import Configuration
  7. from scipy._build_utils.system_info import get_info
  8. config = Configuration('integrate', parent_package, top_path)
  9. # Get a local copy of lapack_opt_info
  10. lapack_opt = dict(get_info('lapack_opt',notfound_action=2))
  11. # Pop off the libraries list so it can be combined with
  12. # additional required libraries
  13. lapack_libs = lapack_opt.pop('libraries', [])
  14. mach_src = [join('mach','*.f')]
  15. quadpack_src = [join('quadpack', '*.f')]
  16. lsoda_src = [join('odepack', fn) for fn in [
  17. 'blkdta000.f', 'bnorm.f', 'cfode.f',
  18. 'ewset.f', 'fnorm.f', 'intdy.f',
  19. 'lsoda.f', 'prja.f', 'solsy.f', 'srcma.f',
  20. 'stoda.f', 'vmnorm.f', 'xerrwv.f', 'xsetf.f',
  21. 'xsetun.f']]
  22. vode_src = [join('odepack', 'vode.f'), join('odepack', 'zvode.f')]
  23. dop_src = [join('dop','*.f')]
  24. quadpack_test_src = [join('tests','_test_multivariate.c')]
  25. odeint_banded_test_src = [join('tests', 'banded5x5.f')]
  26. config.add_library('mach', sources=mach_src,
  27. config_fc={'noopt':(__file__,1)})
  28. config.add_library('quadpack', sources=quadpack_src)
  29. config.add_library('lsoda', sources=lsoda_src)
  30. config.add_library('vode', sources=vode_src)
  31. config.add_library('dop', sources=dop_src)
  32. # Extensions
  33. # quadpack:
  34. include_dirs = [join(os.path.dirname(__file__), '..', '_lib', 'src')]
  35. if 'include_dirs' in lapack_opt:
  36. lapack_opt = dict(lapack_opt)
  37. include_dirs.extend(lapack_opt.pop('include_dirs'))
  38. config.add_extension('_quadpack',
  39. sources=['_quadpackmodule.c'],
  40. libraries=['quadpack', 'mach'] + lapack_libs,
  41. depends=(['__quadpack.h']
  42. + quadpack_src + mach_src),
  43. include_dirs=include_dirs,
  44. **lapack_opt)
  45. # odepack/lsoda-odeint
  46. odepack_opts = lapack_opt.copy()
  47. odepack_opts.update(numpy_nodepr_api)
  48. config.add_extension('_odepack',
  49. sources=['_odepackmodule.c'],
  50. libraries=['lsoda', 'mach'] + lapack_libs,
  51. depends=(lsoda_src + mach_src),
  52. **odepack_opts)
  53. # vode
  54. config.add_extension('vode',
  55. sources=['vode.pyf'],
  56. libraries=['vode'] + lapack_libs,
  57. depends=vode_src,
  58. **lapack_opt)
  59. # lsoda
  60. config.add_extension('lsoda',
  61. sources=['lsoda.pyf'],
  62. libraries=['lsoda', 'mach'] + lapack_libs,
  63. depends=(lsoda_src + mach_src),
  64. **lapack_opt)
  65. # dop
  66. config.add_extension('_dop',
  67. sources=['dop.pyf'],
  68. libraries=['dop'],
  69. depends=dop_src)
  70. config.add_extension('_test_multivariate',
  71. sources=quadpack_test_src)
  72. # Fortran+f2py extension module for testing odeint.
  73. config.add_extension('_test_odeint_banded',
  74. sources=odeint_banded_test_src,
  75. libraries=['lsoda', 'mach'] + lapack_libs,
  76. depends=(lsoda_src + mach_src),
  77. **lapack_opt)
  78. config.add_subpackage('_ivp')
  79. config.add_data_dir('tests')
  80. return config
  81. if __name__ == '__main__':
  82. from numpy.distutils.core import setup
  83. setup(**configuration(top_path='').todict())