#!/usr/bin/env python
"""
Currently no control when SWIG will be run.
"""
from gsl_Extension import gsl_Extension, gsl_Location
from distutils.util import spawn
from distutils.dep_util import newer_group
from distutils.file_util import copy_file
import os.path
import re
import string
remove_underscore=re.compile("_*(.*)")
gsl_include_dir = gsl_Location.get_gsl_prefix() + '/include'
swig_flags = ['-python', '-keyword', '-shadow', '-Itypemaps', '-I' + gsl_include_dir]
class SWIG_Extension(gsl_Extension):
def __init__(self, name, sources,
include_dirs=None,
define_macros=None,
undef_macros=None,
library_dirs=None,
libraries=None,
runtime_library_dirs=None,
extra_objects=None,
extra_compile_args=None,
extra_link_args=None,
export_symbols=None,
gsl_prefix=None,
gsl_min_version=None,
python_min_version=None,
swig_include_dirs=[],
swig_dependencies=[],
c_dir=None,
py_dir=None
):
# Make the target of the swig wrapper out of the name and the c_dir
target = name + "_wrap.c"
# In the old makefile the leading underscore was not taken into account.
# I will stick to that.
m = remove_underscore.match(target)
if len(m.groups()) >= 1:
target = m.groups()[0]
if c_dir:
target = c_dir + "/" + target
self._run_swig(sources, swig_dependencies, target, swig_include_dirs, py_dir, c_dir, name)
#spawn(cmd, search_path, verbose, dry_run)
# SWIG generates two files. A py proxy file and a .so. The so appends a _ to the module name.
gsl_Extension.__init__(self, '_' + name, [target,],
include_dirs,
define_macros,
undef_macros,
library_dirs,
libraries,
runtime_library_dirs,
extra_objects,
extra_compile_args,
extra_link_args,
export_symbols,
gsl_prefix,
gsl_min_version,
python_min_version)
return
def _run_swig(self, sources, swig_dependencies, target, swig_include_dirs, py_dir, c_dir, name):
if newer_group(sources + swig_dependencies, target):
includes = []
for i in swig_include_dirs:
includes.append('-I' + i)
cmd = [gsl_Location.get_swig(),] + swig_flags + includes
cmd.extend(['-o', target] + sources)
print string.join(cmd, " ")
spawn(cmd, 1, 1)
dst = name
src = name + '.py'
if c_dir:
src = c_dir + "/" + src
dst = "."
if py_dir:
dst = py_dir + "/"
copy_file(src, dst)
class SWIG_Extension_Nop(SWIG_Extension):
"""
Do not build swig
"""
def _run_swig(self, sources, swig_dependencies, target, swig_include_dirs, py_dir, c_dir, name):
pass
syntax highlighted by Code2HTML, v. 0.9.1