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