xref: /petsc/setup.py (revision 6f9f73c37d3d1f3dc03132912af53b4496e33470)
1#!/usr/bin/env python
2
3"""
4PETSc for Python
5================
6
7Python bindings for PETSc libraries.
8"""
9
10
11## try:
12##     import setuptools
13## except ImportError:
14##     pass
15
16
17# --------------------------------------------------------------------
18# Metadata
19# --------------------------------------------------------------------
20
21from conf.metadata import metadata
22
23def version():
24    import os, re
25    data = open(os.path.join('src', '__init__.py')).read()
26    m = re.search(r"__version__\s*=\s*'(.*)'", data)
27    return m.groups()[0]
28
29name     = 'petsc4py'
30version  = version()
31
32url      = 'http://%(name)s.googlecode.com/' % vars()
33download = url + 'files/%(name)s-%(version)s.tar.gz' % vars()
34
35descr    = __doc__.strip().split('\n'); del descr[1:3]
36devstat  = ['Development Status :: 3 - Alpha']
37keywords = ['PETSc','MPI']
38
39metadata['name'] = name
40metadata['version'] = version
41metadata['description'] = descr.pop(0)
42metadata['long_description'] = '\n'.join(descr)
43metadata['keywords'] += keywords
44metadata['classifiers'] += devstat
45metadata['url'] = url
46metadata['download_url'] = download
47
48# --------------------------------------------------------------------
49# Extension modules
50# --------------------------------------------------------------------
51
52def get_ext_modules(Extension):
53    from os   import walk, path
54    from glob import glob
55    depends = []
56    for pth, dirs, files in walk('src'):
57        depends += glob(path.join(pth, '*.h'))
58    for pth, dirs, files in walk(path.join('src', 'source')):
59        depends += glob(path.join(pth, '*.h'))
60        depends += glob(path.join(pth, '*.c'))
61    return [Extension('petsc4py.lib.PETSc',
62                      sources=['src/PETSc.c',
63                               'src/source/libpetsc4py.c',],
64                      include_dirs=['src/include',
65                                    'src/source',],
66                      depends=depends, language='c'),
67            Extension('petsc4py.lib.PETSc',
68                      sources=['src/PETSc.cpp',
69                               'src/source/libpetsc4py.cpp',],
70                      include_dirs=['src/include',
71                                    'src/source',],
72                      depends=depends, language='c++'),
73            ]
74# --------------------------------------------------------------------
75# Setup
76# --------------------------------------------------------------------
77
78from conf.petscconf import setup, Extension
79from conf.petscconf import config, build, build_src, build_ext
80
81def main():
82    setup(packages     = ['petsc4py',
83                          'petsc4py.lib',],
84          package_dir  = {'petsc4py'     : 'src',
85                          'petsc4py.lib' : 'src/lib'},
86          package_data = {'petsc4py'     : ['include/petsc4py/*.h',
87                                            'include/petsc4py/*.i',
88                                            'include/petsc4py/*.pxd',
89                                            'include/petsc4py/*.pxi',
90                                            'include/petsc4py/*.pyx',],
91                          'petsc4py.lib' : ['petsc.cfg'],},
92          ext_modules  = get_ext_modules(Extension),
93          cmdclass     = {'config'     : config,
94                          'build'      : build,
95                          'build_src'  : build_src,
96                          'build_ext'  : build_ext},
97          **metadata)
98
99if __name__ == '__main__':
100    import sys, os
101    C_SOURCE = os.path.join('src', 'petsc4py_PETSc.c')
102    def cython_help():
103        if os.path.exists(C_SOURCE): return
104        warn = lambda msg='': sys.stderr.write(msg+'\n')
105        warn("*"*70)
106        warn()
107        warn("You need to generate C source files with Cython !!!")
108        warn("Please execute in your shell:")
109        warn()
110        warn("$ python ./conf/cythonize.py")
111        warn()
112        warn("*"*70)
113        warn()
114    ## from distutils import log
115    ## log.set_verbosity(log.DEBUG)
116    cython_help()
117    main()
118
119# --------------------------------------------------------------------
120