xref: /petsc/src/binding/petsc4py/demo/legacy/wrap-cython/setup.py (revision f748bf6bfc83f133d5068e6a5445afd45844ada1)
1#!/usr/bin/env python3
2
3#$ python setup.py build_ext --inplace
4
5from distutils.core import setup
6from distutils.extension import Extension
7from Cython.Build import cythonize
8
9import numpy
10import petsc4py
11
12def configure():
13    INCLUDE_DIRS = []
14    LIBRARY_DIRS = []
15    LIBRARIES    = []
16
17    # PETSc
18    import os
19    PETSC_DIR  = os.environ['PETSC_DIR']
20    PETSC_ARCH = os.environ.get('PETSC_ARCH', '')
21    from os.path import join, isdir
22    if PETSC_ARCH and isdir(join(PETSC_DIR, PETSC_ARCH)):
23        INCLUDE_DIRS += [join(PETSC_DIR, PETSC_ARCH, 'include'),
24                         join(PETSC_DIR, 'include')]
25        LIBRARY_DIRS += [join(PETSC_DIR, PETSC_ARCH, 'lib')]
26    else:
27        if PETSC_ARCH: pass # XXX should warn ...
28        INCLUDE_DIRS += [join(PETSC_DIR, 'include')]
29        LIBRARY_DIRS += [join(PETSC_DIR, 'lib')]
30    LIBRARIES += ['petsc']
31
32    # PETSc for Python
33    INCLUDE_DIRS += [petsc4py.get_include()]
34
35    # NumPy
36    INCLUDE_DIRS += [numpy.get_include()]
37
38    return dict(
39        include_dirs=INCLUDE_DIRS + [os.curdir],
40        libraries=LIBRARIES,
41        library_dirs=LIBRARY_DIRS,
42        runtime_library_dirs=LIBRARY_DIRS,
43    )
44
45extensions = [
46    Extension('Bratu3D',
47              sources = ['Bratu3D.pyx',
48                         'Bratu3Dimpl.c'],
49              depends = ['Bratu3Dimpl.h'],
50              **configure()),
51]
52
53setup(name = "Bratu3D",
54      ext_modules = cythonize(
55          extensions, include_path=[petsc4py.get_include()]),
56)
57