|
Packit Service |
99d393 |
"""
|
|
Packit Service |
99d393 |
Tool to run Cython files (.pyx) into .c and .cpp.
|
|
Packit Service |
99d393 |
|
|
Packit Service |
99d393 |
TODO:
|
|
Packit Service |
99d393 |
- Add support for dynamically selecting in-process Cython
|
|
Packit Service |
99d393 |
through CYTHONINPROCESS variable.
|
|
Packit Service |
99d393 |
- Have a CYTHONCPP option which turns on C++ in flags and
|
|
Packit Service |
99d393 |
changes output extension at the same time
|
|
Packit Service |
99d393 |
|
|
Packit Service |
99d393 |
VARIABLES:
|
|
Packit Service |
99d393 |
- CYTHON - The path to the "cython" command line tool.
|
|
Packit Service |
99d393 |
- CYTHONFLAGS - Flags to pass to the "cython" command line tool.
|
|
Packit Service |
99d393 |
|
|
Packit Service |
99d393 |
AUTHORS:
|
|
Packit Service |
99d393 |
- David Cournapeau
|
|
Packit Service |
99d393 |
- Dag Sverre Seljebotn
|
|
Packit Service |
99d393 |
|
|
Packit Service |
99d393 |
"""
|
|
Packit Service |
99d393 |
import SCons
|
|
Packit Service |
99d393 |
from SCons.Builder import Builder
|
|
Packit Service |
99d393 |
from SCons.Action import Action
|
|
Packit Service |
99d393 |
|
|
Packit Service |
99d393 |
#def cython_action(target, source, env):
|
|
Packit Service |
99d393 |
# print target, source, env
|
|
Packit Service |
99d393 |
# from Cython.Compiler.Main import compile as cython_compile
|
|
Packit Service |
99d393 |
# res = cython_compile(str(source[0]))
|
|
Packit Service |
99d393 |
|
|
Packit Service |
99d393 |
cythonAction = Action("$CYTHONCOM")
|
|
Packit Service |
99d393 |
|
|
Packit Service |
99d393 |
def create_builder(env):
|
|
Packit Service |
99d393 |
try:
|
|
Packit Service |
99d393 |
cython = env['BUILDERS']['Cython']
|
|
Packit Service |
99d393 |
except KeyError:
|
|
Packit Service |
99d393 |
cython = SCons.Builder.Builder(
|
|
Packit Service |
99d393 |
action = cythonAction,
|
|
Packit Service |
99d393 |
emitter = {},
|
|
Packit Service |
99d393 |
suffix = cython_suffix_emitter,
|
|
Packit Service |
99d393 |
single_source = 1)
|
|
Packit Service |
99d393 |
env['BUILDERS']['Cython'] = cython
|
|
Packit Service |
99d393 |
|
|
Packit Service |
99d393 |
return cython
|
|
Packit Service |
99d393 |
|
|
Packit Service |
99d393 |
def cython_suffix_emitter(env, source):
|
|
Packit Service |
99d393 |
return "$CYTHONCFILESUFFIX"
|
|
Packit Service |
99d393 |
|
|
Packit Service |
99d393 |
def generate(env):
|
|
Packit Service |
99d393 |
env["CYTHON"] = "cython"
|
|
Packit Service |
99d393 |
env["CYTHONCOM"] = "$CYTHON $CYTHONFLAGS -o $TARGET $SOURCE"
|
|
Packit Service |
99d393 |
env["CYTHONCFILESUFFIX"] = ".c"
|
|
Packit Service |
99d393 |
|
|
Packit Service |
99d393 |
c_file, cxx_file = SCons.Tool.createCFileBuilders(env)
|
|
Packit Service |
99d393 |
|
|
Packit Service |
99d393 |
c_file.suffix['.pyx'] = cython_suffix_emitter
|
|
Packit Service |
99d393 |
c_file.add_action('.pyx', cythonAction)
|
|
Packit Service |
99d393 |
|
|
Packit Service |
99d393 |
c_file.suffix['.py'] = cython_suffix_emitter
|
|
Packit Service |
99d393 |
c_file.add_action('.py', cythonAction)
|
|
Packit Service |
99d393 |
|
|
Packit Service |
99d393 |
create_builder(env)
|
|
Packit Service |
99d393 |
|
|
Packit Service |
99d393 |
def exists(env):
|
|
Packit Service |
99d393 |
try:
|
|
Packit Service |
99d393 |
# import Cython
|
|
Packit Service |
99d393 |
return True
|
|
Packit Service |
99d393 |
except ImportError:
|
|
Packit Service |
99d393 |
return False
|