Blame Tools/site_scons/site_tools/cython.py

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