1*1b37a2a7SPierre Jolivet#!/usr/bin/env python3 255a74a43SLisandro Dalcin 355a74a43SLisandro Dalcin#$ python setup.py build_ext --inplace 455a74a43SLisandro Dalcin 555a74a43SLisandro Dalcin# a bit of monkeypatching ... 655a74a43SLisandro Dalcintry: 755a74a43SLisandro Dalcin from numpy.distutils.fcompiler import FCompiler 855a74a43SLisandro Dalcin from numpy.distutils.unixccompiler import UnixCCompiler 955a74a43SLisandro Dalcin try: # Python 2 1055a74a43SLisandro Dalcin meth = UnixCCompiler.runtime_library_dir_option.im_func 1155a74a43SLisandro Dalcin except AttributeError: # Python 3 1255a74a43SLisandro Dalcin meth = UnixCCompiler.runtime_library_dir_option 1355a74a43SLisandro Dalcin FCompiler.runtime_library_dir_option = meth 1455a74a43SLisandro Dalcinexcept Exception: 1555a74a43SLisandro Dalcin pass 1655a74a43SLisandro Dalcin 1755a74a43SLisandro Dalcin 1855a74a43SLisandro Dalcindef configuration(parent_package='',top_path=None): 1955a74a43SLisandro Dalcin INCLUDE_DIRS = [] 2055a74a43SLisandro Dalcin LIBRARY_DIRS = [] 2155a74a43SLisandro Dalcin LIBRARIES = [] 2255a74a43SLisandro Dalcin 2355a74a43SLisandro Dalcin # PETSc 2455a74a43SLisandro Dalcin import os 2555a74a43SLisandro Dalcin PETSC_DIR = os.environ['PETSC_DIR'] 2655a74a43SLisandro Dalcin PETSC_ARCH = os.environ.get('PETSC_ARCH', '') 2755a74a43SLisandro Dalcin from os.path import join, isdir 2855a74a43SLisandro Dalcin if PETSC_ARCH and isdir(join(PETSC_DIR, PETSC_ARCH)): 2955a74a43SLisandro Dalcin INCLUDE_DIRS += [join(PETSC_DIR, PETSC_ARCH, 'include'), 3055a74a43SLisandro Dalcin join(PETSC_DIR, 'include')] 3155a74a43SLisandro Dalcin LIBRARY_DIRS += [join(PETSC_DIR, PETSC_ARCH, 'lib')] 3255a74a43SLisandro Dalcin else: 3355a74a43SLisandro Dalcin if PETSC_ARCH: pass # XXX should warn ... 3455a74a43SLisandro Dalcin INCLUDE_DIRS += [join(PETSC_DIR, 'include')] 3555a74a43SLisandro Dalcin LIBRARY_DIRS += [join(PETSC_DIR, 'lib')] 3655a74a43SLisandro Dalcin LIBRARIES += [#'petscts', 'petscsnes', 'petscksp', 3755a74a43SLisandro Dalcin #'petscdm', 'petscmat', 'petscvec', 3855a74a43SLisandro Dalcin 'petsc'] 3955a74a43SLisandro Dalcin 4055a74a43SLisandro Dalcin # PETSc for Python 4155a74a43SLisandro Dalcin import petsc4py 4255a74a43SLisandro Dalcin INCLUDE_DIRS += [petsc4py.get_include()] 4355a74a43SLisandro Dalcin 4455a74a43SLisandro Dalcin # Configuration 4555a74a43SLisandro Dalcin from numpy.distutils.misc_util import Configuration 4655a74a43SLisandro Dalcin config = Configuration('', parent_package, top_path) 4755a74a43SLisandro Dalcin config.add_extension('_Bratu3D', 4855a74a43SLisandro Dalcin sources = ['Bratu3D.i', 4955a74a43SLisandro Dalcin 'Bratu3D.c'], 5055a74a43SLisandro Dalcin depends = ['Bratu3D.h'], 5155a74a43SLisandro Dalcin include_dirs=INCLUDE_DIRS + [os.curdir], 5255a74a43SLisandro Dalcin libraries=LIBRARIES, 5355a74a43SLisandro Dalcin library_dirs=LIBRARY_DIRS, 5455a74a43SLisandro Dalcin runtime_library_dirs=LIBRARY_DIRS) 5555a74a43SLisandro Dalcin return config 5655a74a43SLisandro Dalcin 5755a74a43SLisandro Dalcinif __name__ == "__main__": 5855a74a43SLisandro Dalcin from numpy.distutils.core import setup 5955a74a43SLisandro Dalcin setup(**configuration(top_path='').todict()) 60