Patch luaconf.h instead of Makefile for compat defines

This commit is contained in:
mpeterv 2015-12-04 14:52:27 +03:00
parent fa2e34905b
commit 1c482970a6

View File

@ -73,7 +73,7 @@ def exec_command(capture, *args):
if opts.verbose and capture: if opts.verbose and capture:
sys.stdout.write(output) sys.stdout.write(output)
return capture and output.decode("utf-8") return capture and output.decode("UTF-8")
def run_command(*args): def run_command(*args):
exec_command(False, *args) exec_command(False, *args)
@ -240,7 +240,11 @@ class Lua(Program):
if self.compat != "default": if self.compat != "default":
self.version_suffix += " (compat: {})".format(self.compat) self.version_suffix += " (compat: {})".format(self.compat)
self.defines = []
self.redefines = []
self.add_compat_to_defines()
self.set_package_paths() self.set_package_paths()
self.add_package_paths_to_defines()
@staticmethod @staticmethod
def major_version_from_source(): def major_version_from_source():
@ -279,39 +283,38 @@ class Lua(Program):
os.path.join(".", "?" + so_extension)) os.path.join(".", "?" + so_extension))
self.package_cpath = ";".join(cmodule_path_parts) self.package_cpath = ";".join(cmodule_path_parts)
def patch_default_paths(self): def add_package_paths_to_defines(self):
package_path = self.package_path.replace("\\", "\\\\") package_path = self.package_path.replace("\\", "\\\\")
package_cpath = self.package_cpath.replace("\\", "\\\\") package_cpath = self.package_cpath.replace("\\", "\\\\")
self.redefines.extend([
"#undef LUA_PATH_DEFAULT",
"#undef LUA_CPATH_DEFAULT",
"#define LUA_PATH_DEFAULT \"{}\"".format(package_path),
"#define LUA_CPATH_DEFAULT \"{}\"".format(package_cpath)
])
def patch_defines(self):
defines = os.linesep.join(self.defines)
redefines = os.linesep.join(self.redefines)
linesep = os.linesep.encode("UTF-8")
luaconf_h = open(os.path.join("src", "luaconf.h"), "rb") luaconf_h = open(os.path.join("src", "luaconf.h"), "rb")
luaconf_src = luaconf_h.read() luaconf_src = luaconf_h.read()
luaconf_h.close() luaconf_h.close()
body, _, rest = luaconf_src.rpartition(b"#endif") body, _, tail = luaconf_src.rpartition(b"#endif")
defines = os.linesep.join(self.extra_defines + [ header, _, main = body.partition(b"#define")
"#undef LUA_PATH_DEFAULT", first_define, main = main.split(linesep, 1)
"#undef LUA_CPATH_DEFAULT",
"#define LUA_PATH_DEFAULT \"{}\"".format(package_path),
"#define LUA_CPATH_DEFAULT \"{}\"".format(package_cpath),
"#endif"
])
luaconf_h = open(os.path.join("src", "luaconf.h"), "wb") luaconf_h = open(os.path.join("src", "luaconf.h"), "wb")
luaconf_h.write(body) luaconf_h.write(header + b"#define" + first_define + linesep)
luaconf_h.write(defines.encode("UTF-8")) luaconf_h.write(defines.encode("UTF-8") + linesep)
luaconf_h.write(rest) luaconf_h.write(main)
luaconf_h.write(redefines.encode("UTF-8") + linesep)
luaconf_h.write(b"#endif")
luaconf_h.write(tail)
luaconf_h.close() luaconf_h.close()
@staticmethod
def patch_build_option(old, new):
makefile = open(os.path.join("src", "Makefile"), "rb")
makefile_src = makefile.read()
makefile.close()
makefile_src = makefile_src.replace(old.encode("UTF-8"), new.encode("UTF-8"), 1)
makefile = open(os.path.join("src", "Makefile"), "wb")
makefile.write(makefile_src)
makefile.close()
def build(self): def build(self):
if opts.builds and self.identifiers is not None: if opts.builds and self.identifiers is not None:
self.cached_build_path = os.path.join(opts.builds, self.cached_build_path = os.path.join(opts.builds,
@ -326,9 +329,7 @@ class Lua(Program):
self.fetch() self.fetch()
print("Building " + self.title + self.version_suffix) print("Building " + self.title + self.version_suffix)
self.extra_defines = [] self.patch_defines()
self.apply_compat()
self.patch_default_paths()
self.make() self.make()
if self.cached_build_path is not None: if self.cached_build_path is not None:
@ -369,23 +370,24 @@ class RioLua(Lua):
else: else:
self.compat = "default" if opts.compat in ["default", "5.2"] else opts.compat self.compat = "default" if opts.compat in ["default", "5.2"] else opts.compat
def apply_compat(self): def add_compat_to_defines(self):
if self.compat != "default": if self.compat != "default":
if self.major_version == "5.1": if self.major_version == "5.1":
if self.compat == "none": if self.compat == "none":
self.extra_defines.extend([ self.redefines.extend([
"#undef LUA_COMPAT_VARARG", "#undef LUA_COMPAT_MOD", "#undef LUA_COMPAT_VARARG", "#undef LUA_COMPAT_MOD",
"#undef LUA_COMPAT_LSTR", "#undef LUA_COMPAT_GFIND", "#undef LUA_COMPAT_LSTR", "#undef LUA_COMPAT_GFIND",
"#undef LUA_COMPAT_OPENLIB" "#undef LUA_COMPAT_OPENLIB"
]) ])
elif self.major_version == "5.2": elif self.major_version == "5.2":
self.patch_build_option(" -DLUA_COMPAT_ALL", "") self.defines.append("#undef LUA_COMPAT_ALL")
elif self.compat == "none": elif self.compat == "none":
self.patch_build_option(" -DLUA_COMPAT_5_2", "") self.defines.append("#undef LUA_COMPAT_5_2")
elif self.compat == "5.1": elif self.compat == "5.1":
self.patch_build_option(" -DLUA_COMPAT_5_2", " -DLUA_COMPAT_5_1") self.defines.append("#undef LUA_COMPAT_5_2")
self.defines.append("#define LUA_COMPAT_5_1")
else: else:
self.patch_build_option(" -DLUA_COMPAT_5_2", " -DLUA_COMPAT_5_1 -DLUA_COMPAT_5_2") self.defines.append("#define LUA_COMPAT_5_1")
@staticmethod @staticmethod
def make(): def make():
@ -418,10 +420,9 @@ class LuaJIT(Lua):
def set_compat(self): def set_compat(self):
self.compat = "5.2" if opts.compat in ["all", "5.2"] else "default" self.compat = "5.2" if opts.compat in ["all", "5.2"] else "default"
def apply_compat(self): def add_compat_to_defines(self):
if self.compat != "default": if self.compat != "default":
self.patch_build_option("#XCFLAGS+= -DLUAJIT_ENABLE_LUA52COMPAT", self.defines.append("#define LUAJIT_ENABLE_LUA52COMPAT")
"XCFLAGS+= -DLUAJIT_ENABLE_LUA52COMPAT")
@staticmethod @staticmethod
def make(): def make():