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