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