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