xref: /petsc/src/binding/petsc4py/demo/legacy/wrap-swig/setup.py (revision f748bf6bfc83f133d5068e6a5445afd45844ada1)
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