Пример #1
0
def setup_pyext_env(ctx, cc_type="default", use_distutils=True):
    pyenv = {}
    if use_distutils:
        if cc_type == "default":
            dist_env = get_configuration()
        else:
            dist_env = get_configuration(cc_type)
    else:
        dist_env = {
                "CC": ["clang"],
                "CPPPATH": [],
                "BASE_CFLAGS": ["-fno-strict-aliasing"],
                "OPT": [],
                "SHARED": ["-fPIC"],
                "SHLINK": ["clang", "-shared"],
                "LDFLAGS": [],
                "LIBDIR": [],
                "LIBS": [],
                "SO": ".so"}
        dist_env["CPPPATH"].append(distutils.sysconfig.get_python_inc())

    for name, value in dist_env.items():
        pyenv["PYEXT_%s" % name] = value
    pyenv["PYEXT_FMT"] = "%%s%s" % dist_env["SO"]
    pyenv["PYEXT_CFLAGS"] = pyenv["PYEXT_BASE_CFLAGS"] + \
            pyenv["PYEXT_OPT"] + \
            pyenv["PYEXT_SHARED"]
    pyenv["PYEXT_SHLINKFLAGS"] = dist_env["LDFLAGS"]
    return pyenv
Пример #2
0
def get_pyenv():
    sysenv = get_configuration()
    pyenv = {}
    for i, j in _SYS_TO_PYENV.items():
        pyenv[i] = sysenv[j]
    pyenv["PYEXT_CPPPATH"] = [distutils.sysconfig.get_python_inc()]
    pyenv["PYEXT_SHLINKFLAGS"] = []
    return pyenv
Пример #3
0
def setup_pyext_env(ctx, cc_type="default", use_distutils=True):
    pyenv = Environment()
    if use_distutils:
        if cc_type == "default":
            dist_env = get_configuration()
        else:
            dist_env = get_configuration(cc_type)
        print(dist_env)
        for name, value in list(dist_env.items()):
            pyenv["PYEXT_%s" % name] = value
        pyenv["PYEXT_CFLAGS"].extend(dist_env.get("SHARED", []))
        pyenv["PYEXT_FMT"] = "%%s%s" % dist_env["SO"]
        pyenv["PYEXT_SHLINKFLAGS"] = dist_env["LDFLAGS"]
    else:
        old_env = ctx.env
        ctx.env = Environment()
        cc_env = None
        sys.path.insert(0, os.path.dirname(yaku.tools.__file__))
        try:
            try:
                mod = __import__(cc_type)
                mod.setup(ctx)
            except ImportError:
                raise RuntimeError("No tool %s is available (import failed)" \
                                % cc_type)
            cc_env = ctx.env
        finally:
            sys.path.pop(0)
            ctx.env = old_env
        pyenv["PYEXT_CC"] = cc_env["CC"]
        pyenv["PYEXT_CFLAGS"] = cc_env["CFLAGS"]
        pyenv["PYEXT_LIBDIR"] = cc_env["LIBDIR"]
        pyenv["PYEXT_LIBS"] = cc_env["LIBS"]
        pyenv["PYEXT_FMT"] = "%s.so"
        pyenv["PYEXT_SHLINK"] = cc_env["MODLINK"]
        pyenv["PYEXT_SHLINKFLAGS"] = cc_env["MODLINKFLAGS"]
        pyenv["PYEXT_CPPPATH"] = cc_env["CPPPATH"]
        pyenv.append("PYEXT_CPPPATH",
                     distutils.sysconfig.get_python_inc(),
                     create=True)
        if sys.platform == "win32":
            pyenv.append("PYEXT_LIBDIR", os.path.join(sys.exec_prefix, "libs"))

    return pyenv
Пример #4
0
def setup_pyext_env(ctx, cc_type="default", use_distutils=True):
    pyenv = Environment()
    if use_distutils:
        if cc_type == "default":
            dist_env = get_configuration()
        else:
            dist_env = get_configuration(cc_type)
        for name, value in dist_env.items():
            pyenv["PYEXT_%s" % name] = value
        pyenv["PYEXT_FMT"] = "%%s%s" % dist_env["SO"]
        pyenv["PYEXT_CFLAGS"] = pyenv["PYEXT_BASE_CFLAGS"] + \
                pyenv["PYEXT_OPT"] + \
                pyenv["PYEXT_SHARED"]
        pyenv["PYEXT_SHLINKFLAGS"] = dist_env["LDFLAGS"]
    else:
        old_env = ctx.env
        ctx.env = Environment()
        cc_env = None
        sys.path.insert(0, os.path.dirname(yaku.tools.__file__))
        try:
            try:
                mod = __import__(cc_type)
                mod.setup(ctx)
            except ImportError:
                raise RuntimeError("No tool %s is available (import failed)" \
                                % cc_type)
            cc_env = ctx.env
        finally:
            sys.path.pop(0)
            ctx.env = old_env
        pyenv["PYEXT_CC"] = cc_env["CC"]
        pyenv["PYEXT_CFLAGS"] = cc_env["CFLAGS"]
        pyenv["PYEXT_LIBDIR"] = cc_env["LIBDIR"]
        pyenv["PYEXT_LIBS"] = cc_env["LIBS"]
        pyenv["PYEXT_FMT"] = "%s.so"
        pyenv["PYEXT_SHLINK"] = cc_env["MODLINK"]
        pyenv["PYEXT_SHLINKFLAGS"] = cc_env["MODLINKFLAGS"]
        pyenv["PYEXT_CPPPATH"] = cc_env["CPPPATH"]
        pyenv.append("PYEXT_CPPPATH", distutils.sysconfig.get_python_inc(), create=True)
        if sys.platform == "win32":
            pyenv.append("PYEXT_LIBDIR", os.path.join(sys.exec_prefix, "libs"))

    return pyenv