1*55a74a43SLisandro Dalcin#!/usr/bin/env python 2*55a74a43SLisandro Dalcin 3*55a74a43SLisandro Dalcin#$ python setup.py build_ext --inplace 4*55a74a43SLisandro Dalcin 5*55a74a43SLisandro Dalcin# a bit of monkeypatching ... 6*55a74a43SLisandro Dalcintry: 7*55a74a43SLisandro Dalcin from numpy.distutils.fcompiler import FCompiler 8*55a74a43SLisandro Dalcin from numpy.distutils.unixccompiler import UnixCCompiler 9*55a74a43SLisandro Dalcin try: # Python 2 10*55a74a43SLisandro Dalcin meth = UnixCCompiler.runtime_library_dir_option.im_func 11*55a74a43SLisandro Dalcin except AttributeError: # Python 3 12*55a74a43SLisandro Dalcin meth = UnixCCompiler.runtime_library_dir_option 13*55a74a43SLisandro Dalcin FCompiler.runtime_library_dir_option = meth 14*55a74a43SLisandro Dalcinexcept Exception: 15*55a74a43SLisandro Dalcin pass 16*55a74a43SLisandro Dalcin 17*55a74a43SLisandro Dalcin 18*55a74a43SLisandro Dalcindef configuration(parent_package='',top_path=None): 19*55a74a43SLisandro Dalcin INCLUDE_DIRS = [] 20*55a74a43SLisandro Dalcin LIBRARY_DIRS = [] 21*55a74a43SLisandro Dalcin LIBRARIES = [] 22*55a74a43SLisandro Dalcin 23*55a74a43SLisandro Dalcin # PETSc 24*55a74a43SLisandro Dalcin import os 25*55a74a43SLisandro Dalcin PETSC_DIR = os.environ['PETSC_DIR'] 26*55a74a43SLisandro Dalcin PETSC_ARCH = os.environ.get('PETSC_ARCH', '') 27*55a74a43SLisandro Dalcin from os.path import join, isdir 28*55a74a43SLisandro Dalcin if PETSC_ARCH and isdir(join(PETSC_DIR, PETSC_ARCH)): 29*55a74a43SLisandro Dalcin INCLUDE_DIRS += [join(PETSC_DIR, PETSC_ARCH, 'include'), 30*55a74a43SLisandro Dalcin join(PETSC_DIR, 'include')] 31*55a74a43SLisandro Dalcin LIBRARY_DIRS += [join(PETSC_DIR, PETSC_ARCH, 'lib')] 32*55a74a43SLisandro Dalcin else: 33*55a74a43SLisandro Dalcin if PETSC_ARCH: pass # XXX should warn ... 34*55a74a43SLisandro Dalcin INCLUDE_DIRS += [join(PETSC_DIR, 'include')] 35*55a74a43SLisandro Dalcin LIBRARY_DIRS += [join(PETSC_DIR, 'lib')] 36*55a74a43SLisandro Dalcin LIBRARIES += [#'petscts', 'petscsnes', 'petscksp', 37*55a74a43SLisandro Dalcin #'petscdm', 'petscmat', 'petscvec', 38*55a74a43SLisandro Dalcin 'petsc'] 39*55a74a43SLisandro Dalcin 40*55a74a43SLisandro Dalcin # PETSc for Python 41*55a74a43SLisandro Dalcin import petsc4py 42*55a74a43SLisandro Dalcin INCLUDE_DIRS += [petsc4py.get_include()] 43*55a74a43SLisandro Dalcin 44*55a74a43SLisandro Dalcin # Configuration 45*55a74a43SLisandro Dalcin from numpy.distutils.misc_util import Configuration 46*55a74a43SLisandro Dalcin config = Configuration('', parent_package, top_path) 47*55a74a43SLisandro Dalcin config.add_extension('_Bratu3D', 48*55a74a43SLisandro Dalcin sources = ['Bratu3D.i', 49*55a74a43SLisandro Dalcin 'Bratu3D.c'], 50*55a74a43SLisandro Dalcin depends = ['Bratu3D.h'], 51*55a74a43SLisandro Dalcin include_dirs=INCLUDE_DIRS + [os.curdir], 52*55a74a43SLisandro Dalcin libraries=LIBRARIES, 53*55a74a43SLisandro Dalcin library_dirs=LIBRARY_DIRS, 54*55a74a43SLisandro Dalcin runtime_library_dirs=LIBRARY_DIRS) 55*55a74a43SLisandro Dalcin return config 56*55a74a43SLisandro Dalcin 57*55a74a43SLisandro Dalcinif __name__ == "__main__": 58*55a74a43SLisandro Dalcin from numpy.distutils.core import setup 59*55a74a43SLisandro Dalcin setup(**configuration(top_path='').todict()) 60