xref: /petsc/src/binding/petsc4py/demo/legacy/wrap-cython/setup.py (revision f748bf6bfc83f133d5068e6a5445afd45844ada1)
1*1b37a2a7SPierre Jolivet#!/usr/bin/env python3
255a74a43SLisandro Dalcin
355a74a43SLisandro Dalcin#$ python setup.py build_ext --inplace
455a74a43SLisandro Dalcin
555a74a43SLisandro Dalcinfrom distutils.core import setup
655a74a43SLisandro Dalcinfrom distutils.extension import Extension
755a74a43SLisandro Dalcinfrom Cython.Build import cythonize
855a74a43SLisandro Dalcin
955a74a43SLisandro Dalcinimport numpy
1055a74a43SLisandro Dalcinimport petsc4py
1155a74a43SLisandro Dalcin
1255a74a43SLisandro Dalcindef configure():
1355a74a43SLisandro Dalcin    INCLUDE_DIRS = []
1455a74a43SLisandro Dalcin    LIBRARY_DIRS = []
1555a74a43SLisandro Dalcin    LIBRARIES    = []
1655a74a43SLisandro Dalcin
1755a74a43SLisandro Dalcin    # PETSc
1855a74a43SLisandro Dalcin    import os
1955a74a43SLisandro Dalcin    PETSC_DIR  = os.environ['PETSC_DIR']
2055a74a43SLisandro Dalcin    PETSC_ARCH = os.environ.get('PETSC_ARCH', '')
2155a74a43SLisandro Dalcin    from os.path import join, isdir
2255a74a43SLisandro Dalcin    if PETSC_ARCH and isdir(join(PETSC_DIR, PETSC_ARCH)):
2355a74a43SLisandro Dalcin        INCLUDE_DIRS += [join(PETSC_DIR, PETSC_ARCH, 'include'),
2455a74a43SLisandro Dalcin                         join(PETSC_DIR, 'include')]
2555a74a43SLisandro Dalcin        LIBRARY_DIRS += [join(PETSC_DIR, PETSC_ARCH, 'lib')]
2655a74a43SLisandro Dalcin    else:
2755a74a43SLisandro Dalcin        if PETSC_ARCH: pass # XXX should warn ...
2855a74a43SLisandro Dalcin        INCLUDE_DIRS += [join(PETSC_DIR, 'include')]
2955a74a43SLisandro Dalcin        LIBRARY_DIRS += [join(PETSC_DIR, 'lib')]
3055a74a43SLisandro Dalcin    LIBRARIES += ['petsc']
3155a74a43SLisandro Dalcin
3255a74a43SLisandro Dalcin    # PETSc for Python
3355a74a43SLisandro Dalcin    INCLUDE_DIRS += [petsc4py.get_include()]
3455a74a43SLisandro Dalcin
3555a74a43SLisandro Dalcin    # NumPy
3655a74a43SLisandro Dalcin    INCLUDE_DIRS += [numpy.get_include()]
3755a74a43SLisandro Dalcin
3855a74a43SLisandro Dalcin    return dict(
3955a74a43SLisandro Dalcin        include_dirs=INCLUDE_DIRS + [os.curdir],
4055a74a43SLisandro Dalcin        libraries=LIBRARIES,
4155a74a43SLisandro Dalcin        library_dirs=LIBRARY_DIRS,
4255a74a43SLisandro Dalcin        runtime_library_dirs=LIBRARY_DIRS,
4355a74a43SLisandro Dalcin    )
4455a74a43SLisandro Dalcin
4555a74a43SLisandro Dalcinextensions = [
4655a74a43SLisandro Dalcin    Extension('Bratu3D',
4755a74a43SLisandro Dalcin              sources = ['Bratu3D.pyx',
4855a74a43SLisandro Dalcin                         'Bratu3Dimpl.c'],
4955a74a43SLisandro Dalcin              depends = ['Bratu3Dimpl.h'],
5055a74a43SLisandro Dalcin              **configure()),
5155a74a43SLisandro Dalcin]
5255a74a43SLisandro Dalcin
5355a74a43SLisandro Dalcinsetup(name = "Bratu3D",
5455a74a43SLisandro Dalcin      ext_modules = cythonize(
5555a74a43SLisandro Dalcin          extensions, include_path=[petsc4py.get_include()]),
5655a74a43SLisandro Dalcin)
57