xref: /petsc/src/binding/petsc4py/demo/legacy/wrap-f2py/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    def runtime_library_dir_option(self, dir):
9*55a74a43SLisandro Dalcin        return self.c_compiler.runtime_library_dir_option(dir)
10*55a74a43SLisandro Dalcin    FCompiler.runtime_library_dir_option = \
11*55a74a43SLisandro Dalcin        runtime_library_dir_option
12*55a74a43SLisandro Dalcinexcept Exception:
13*55a74a43SLisandro Dalcin    pass
14*55a74a43SLisandro Dalcin
15*55a74a43SLisandro Dalcin
16*55a74a43SLisandro Dalcindef configuration(parent_package='',top_path=None):
17*55a74a43SLisandro Dalcin    INCLUDE_DIRS = []
18*55a74a43SLisandro Dalcin    LIBRARY_DIRS = []
19*55a74a43SLisandro Dalcin    LIBRARIES    = []
20*55a74a43SLisandro Dalcin
21*55a74a43SLisandro Dalcin    # PETSc
22*55a74a43SLisandro Dalcin    import os
23*55a74a43SLisandro Dalcin    PETSC_DIR  = os.environ['PETSC_DIR']
24*55a74a43SLisandro Dalcin    PETSC_ARCH = os.environ.get('PETSC_ARCH', '')
25*55a74a43SLisandro Dalcin    from os.path import join, isdir
26*55a74a43SLisandro Dalcin    if PETSC_ARCH and isdir(join(PETSC_DIR, PETSC_ARCH)):
27*55a74a43SLisandro Dalcin        INCLUDE_DIRS += [join(PETSC_DIR, PETSC_ARCH, 'include'),
28*55a74a43SLisandro Dalcin                         join(PETSC_DIR, 'include')]
29*55a74a43SLisandro Dalcin        LIBRARY_DIRS += [join(PETSC_DIR, PETSC_ARCH, 'lib')]
30*55a74a43SLisandro Dalcin    else:
31*55a74a43SLisandro Dalcin        if PETSC_ARCH: pass # XXX should warn ...
32*55a74a43SLisandro Dalcin        INCLUDE_DIRS += [join(PETSC_DIR, 'include')]
33*55a74a43SLisandro Dalcin        LIBRARY_DIRS += [join(PETSC_DIR, 'lib')]
34*55a74a43SLisandro Dalcin    LIBRARIES += [#'petscts', 'petscsnes', 'petscksp',
35*55a74a43SLisandro Dalcin                  #'petscdm', 'petscmat',  'petscvec',
36*55a74a43SLisandro Dalcin                  'petsc']
37*55a74a43SLisandro Dalcin
38*55a74a43SLisandro Dalcin    # PETSc for Python
39*55a74a43SLisandro Dalcin    import petsc4py
40*55a74a43SLisandro Dalcin    INCLUDE_DIRS += [petsc4py.get_include()]
41*55a74a43SLisandro Dalcin
42*55a74a43SLisandro Dalcin    # Configuration
43*55a74a43SLisandro Dalcin    from numpy.distutils.misc_util import Configuration
44*55a74a43SLisandro Dalcin    config = Configuration('', parent_package, top_path)
45*55a74a43SLisandro Dalcin    config.add_extension('Bratu2D',
46*55a74a43SLisandro Dalcin                         sources = ['Bratu2D.pyf',
47*55a74a43SLisandro Dalcin                                    'Bratu2D.F90'],
48*55a74a43SLisandro Dalcin                         depends = ['Bratu2Dmodule.h'],
49*55a74a43SLisandro Dalcin                         f2py_options=['--quiet'],
50*55a74a43SLisandro Dalcin                         define_macros=[('F2PY_REPORT_ON_ARRAY_COPY',1)],
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