wesnoth/scons/lua.py
2024-03-28 17:06:00 +01:00

70 lines
2.9 KiB
Python

# vi: syntax=python:et:ts=4
from config_check_utils import *
from os import environ
from os.path import join
import SCons.Conftest
# Based on SCons.SConf.CheckLibWithHeader()
def CheckLibsWithSystemHeader(context, libs, header, language):
res = SCons.Conftest.CheckLib(context, libs,
header = "#include <%s>" % header, language = language)
context.did_show_result = 1
return not res
def CheckLua(context, require_version):
backup = backup_env(context.env, ["CPPPATH", "LIBPATH", "LIBS"])
version = require_version.split(".")
major_version = version[0]
minor_version = version[1]
include_subdirs_raw = [
"",
"lua" + major_version + minor_version,
"lua" + major_version + "." + minor_version,
"lua-" + major_version + "." + minor_version,
]
include_subdirs = []
for include_subdir_raw in include_subdirs_raw:
include_subdirs[len(include_subdirs):] = [include_subdir_raw,
join("include", include_subdir_raw)]
# Add new names here when found in distributions.
# Debian since lua5.2 5.2.3-2 uses luaX.Y-c++:
# https://salsa.debian.org/lua-team/lua5.2/-/commit/fa2dc77c
# Arch since lua 5.4.4-4 uses lua++-X.Y:
# https://gitlab.archlinux.org/archlinux/packaging/packages/lua/-/commit/4e97e19d
libs = [
"lua" + major_version + minor_version + "-c++",
"lua" + major_version + "." + minor_version + "-c++",
"lua-" + major_version + "." + minor_version + "-c++",
"lua." + major_version + "." + minor_version + "-c++",
"lua++" + major_version + minor_version,
"lua++" + major_version + "." + minor_version,
"lua++-" + major_version + "." + minor_version,
"lua++." + major_version + "." + minor_version,
]
luadir = context.env.get("luadir", environ.get("LUA_DIR"))
if luadir:
for include_subdir in include_subdirs:
includes = find_include([luadir], "lua.h",
include_subdir=include_subdir, default_prefixes=False)
for prefix, include in includes:
context.env.Append(CPPPATH = [join(prefix, include_subdir)])
if CheckLibsWithSystemHeader(context, libs, "lua.h", "CXX"):
return True
restore_env(context.env, backup)
return False
for include_subdir in include_subdirs:
includes = find_include([context.env["prefix"]], "lua.h",
include_subdir=include_subdir, default_prefixes=True)
for prefix, include in includes:
context.env.Append(CPPPATH = [join(prefix, include_subdir)])
if CheckLibsWithSystemHeader(context, libs, "lua.h", "CXX"):
return True
restore_env(context.env, backup)
return False
config_checks = { "CheckLua" : CheckLua }