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