Beispiel #1
0
def find_boost(env):
    prefixes = [env["prefix"], "C:\\Boost"]
    crosscompile = env["host"]
    include = find_include(prefixes,
                           "boost/config.hpp",
                           default_prefixes=not crosscompile)
    if include:
        prefix, includefile = include[0]
        env["boostdir"] = join(prefix, "include")
        env["boostlibdir"] = join(prefix, "lib")
        if not env.get("boost_suffix"):
            for libdir in ["lib", "lib64"]:
                if glob(join(prefix, libdir, "libboost_*-mt.*")):
                    env["boost_suffix"] = "-mt"
                    env["boostlibdir"] = join(prefix, libdir)
                    break
            else:
                env["boost_suffix"] = ""
        return

    includes = find_include(prefixes,
                            "boost/config.hpp",
                            include_subdir="include/boost-*")
    if includes:
        versions = []
        for prefix, includefile in includes:
            try:
                versions.append(
                    map(
                        int,
                        re.findall(r"^boost-(\d*)_(\d*)$",
                                   basename(dirname(
                                       dirname(includefile))))[0]))
            except IndexError:
                versions.append((0, 0))
        version_nums = map(lambda (major, minor): 100000 * major + 100 * minor,
                           versions)
        include_index = version_nums.index(max(version_nums))
        prefix, includefile = includes[include_index]
        version = versions[include_index]
        env["boostdir"] = join(
            prefix, "include",
            "boost-" + str(version[0]) + "_" + str(version[1]))
        env["boostlibdir"] = join(prefix, "lib")
        if not env.get("boost_suffix"):
            libs = glob(join(prefix, "lib", "libboost_*"))
            for lib in libs:
                try:
                    env["boost_suffix"] = re.findall(
                        r"libboost_\w*(-.*%d_%d)" % tuple(version), lib)[0]
                    break
                except:
                    pass
Beispiel #2
0
def CheckLua(context, require_version):
    env = context.env
    backup = env.Clone().Dictionary()

    context.Message("Checking for Lua development files version " + require_version + "... ")

    version = ".".join(require_version.split(".")[0:2])

    if env.get("luadir"):
        env.Append(LIBPATH = ["$luadir"], CPPPATH = ["$luadir/include"], LIBS = "lua" + version)
        found = True
    else:
        found = run_pkg_config(context, "lua >= " + require_version) or run_pkg_config(context, "lua" + version + " >= " + require_version) or run_pkg_config(context, "lua-" + version + " >= " + require_version)
        if not found:
            try:
                prefix, include = find_include([env["prefix"]], "lualib.h", default_prefixes=not env["host"])[0]
                found = True
                context.Log("Found Lua header " + include + ".\n")
                env.Append(LIBPATH = [join(prefix, "lib")], CPPPATH = [join(prefix, "include")], LIBS = ["lua"])
            except IndexError:
                pass

    result = found and context.TryLink("""
    #include <lualib.h>
    #include <lauxlib.h>
    int main() { luaL_newstate(); }
    """, ".c")
    if result:
        context.Result("yes")
        return True
    else:
        context.Result("no")
        env.Replace(**backup)
        return False
Beispiel #3
0
def CheckGettextLibintl(context):
    env = context.env
    backup = env.Clone().Dictionary()
    context.Message("Checking for Gettext's libintl... ")

    test_program = """
        #include <libintl.h>

        int main()
        {
            textdomain("test");
            char* text = gettext("foo");
        }
        \n"""

    if not env.get("gettextdir") and context.TryLink(test_program, ".c"):
        context.Result("libc built-in")
        return True

    prefixes = [env["prefix"]]
    if env.get("gettextdir"):
        prefixes = [env["gettextdir"]] + prefixes
    includes = find_include(prefixes, "libintl.h", "", not env["host"])
    if includes:
        env.AppendUnique(CPPPATH=[join(includes[0][0], "include")],
                         LIBPATH=[join(includes[0][0], "lib")])
    env.AppendUnique(LIBS=["intl"])
    if context.TryLink("/* external libintl*/\n" + test_program, ".c"):
        context.Result("external")
        return True

    context.Result("no")
    env.Replace(**backup)
    return False
Beispiel #4
0
def find_boost(env):
    prefixes = [env["prefix"], "C:\\Boost"]
    crosscompile = env["host"]
    include = find_include(prefixes, "boost/config.hpp", default_prefixes=not crosscompile)
    if include:
        prefix, includefile = include[0]
        env["boostdir"] = join(prefix, "include")
        env["boostlibdir"] = join(prefix, "lib")
        if not env.get("boost_suffix"):
            for libdir in ["lib", "lib64"]:
                if glob(join(prefix, libdir, "libboost_*-mt.*")):
                    env["boost_suffix"] = "-mt"
                    env["boostlibdir"] = join(prefix, libdir)
                    break
            else:
                env["boost_suffix"] = ""
        return

    includes = find_include(prefixes, "boost/config.hpp", include_subdir="include/boost-*")
    if includes:
        versions = []
        for prefix, includefile in includes:
            try:
                testname = basename(dirname(dirname(includefile)))
                major, minor = re.findall(r"^boost-(\d*)_(\d*)$", testname)[0]
                versions.append((int(major), int(minor)))
            except IndexError:
                versions.append((0,0))
        version_nums = [100000 * major_minor[0] + 100 * major_minor[1] for major_minor in versions]
        include_index = version_nums.index(max(version_nums))
        prefix, includefile = includes[include_index]
        version = versions[include_index]
        env["boostdir"] = join(prefix, "include", "boost-" + str(version[0]) + "_" + str(version[1]))
        env["boostlibdir"] = join(prefix, "lib")
        if not env.get("boost_suffix"):
            libs = glob(join(prefix, "lib", "libboost_*"))
            for lib in libs:
                try:
                    env["boost_suffix"] = re.findall(r"libboost_\w*(-.*%d_%d)" % tuple(version), lib)[0]
                    break
                except:
                    pass
Beispiel #5
0
def CheckGettextLibintl(context):
    env = context.env
    backup = env.Clone().Dictionary()
    context.Message("Checking for Gettext's libintl... ")

    test_program = """
        #include <libintl.h>

        int main()
        {
            textdomain("test");
            char* text = gettext("foo");
        }
        \n"""

    if not env.get("gettextdir") and context.TryLink(test_program, ".c"):
        context.Result("libc built-in")
        return True

    prefixes = [env["prefix"]]
    if env.get("gettextdir"):
        prefixes = [env["gettextdir"]] + prefixes
    includes = find_include(prefixes, "libintl.h", "", not env["host"])
    if includes:
        env.AppendUnique(
            CPPPATH = [join(includes[0][0], "include")],
            LIBPATH = [join(includes[0][0], "lib")]
        )
    env.AppendUnique(LIBS = ["intl"])
    if context.TryLink("/* exteral libintl*/\n" + test_program, ".c"):
        context.Result("external")
        return True

    context.Result("no")
    env.Replace(**backup)
    return False