Blame view

3rdparty/boost_1_81_0/libs/python/fabscript 2.2 KB
73ef4ff3   Hu Chunming   提交三方库
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
  # -*- 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=features|config.use)
  test = module('test', features=features|config.use)
  doc = module('doc', features=features|config.use)
  
  default = src.default