]> git.ipfire.org Git - ipfire-3.x.git/commitdiff
lua: Update to 5.4.4
authorMichael Tremer <michael.tremer@ipfire.org>
Sun, 8 Jan 2023 15:15:34 +0000 (15:15 +0000)
committerMichael Tremer <michael.tremer@ipfire.org>
Sun, 8 Jan 2023 15:15:34 +0000 (15:15 +0000)
Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
lua/lua.nm
lua/lua.pc [deleted file]
lua/patches/liblua.so.patch [deleted file]
lua/patches/lua-5.4.4-autotoolize.patch [new file with mode: 0644]
lua/patches/lua-5.4.4-configure-compat-module.patch [new file with mode: 0644]
lua/patches/lua-5.4.4-configure-linux.patch [new file with mode: 0644]

index daa2f41e40fe74097901bb8fbb7262798732d2e0..cc1e51a23a33f8158bd30bb1f775d269bf54bea7 100644 (file)
@@ -4,74 +4,59 @@
 ###############################################################################
 
 name       = lua
-major_version = 5.3
-version    = %{major_version}.5
+ver_maj    = 5.4
+version    = %{ver_maj}.4
 release    = 1
 
 groups     = Development/Languages
-url        = http://www.lua.org/
+url        = https://www.lua.org/
 license    = MIT
-summary    = Powerful light-weight programming language.
+summary    = Powerful light-weight programming language
 
 description
-       Lua is a powerful light-weight programming language designed for \
-       extending applications. Lua is also frequently used as a \
-       general-purpose, stand-alone language. Lua is free software. \
-       Lua combines simple procedural syntax with powerful data description \
-       constructs based on associative arrays and extensible semantics. Lua \
-       is dynamically typed, interpreted from bytecodes, and has automatic \
-       memory management with garbage collection, making it ideal for \
+       Lua is a powerful light-weight programming language designed for
+       extending applications. Lua is also frequently used as a
+       general-purpose, stand-alone language. Lua is free software.
+       Lua combines simple procedural syntax with powerful data description
+       constructs based on associative arrays and extensible semantics. Lua
+       is dynamically typed, interpreted from bytecodes, and has automatic
+       memory management with garbage collection, making it ideal for
        configuration, scripting, and rapid prototyping.
 end
 
-source_dl  = http://www.lua.org/ftp/
+source_dl  = https://www.lua.org/ftp/
 
 build
        requires
+               autoconf
+               automake
                readline-devel
        end
 
        prepare_cmds
-               # Lua 5.3.4 has wrong release version in its Makefile
-               sed "s/^R= \$V.4/R= \$V.5/" -i Makefile
+               autoreconf -vfi
        end
 
-       make_build_targets += \
-               MYCFLAGS="%{CFLAGS} -DLUA_COMPAT_5_2 -DLUA_COMPAT_5_1" \
-               MYLDFLAGS="%{LDFLAGS}" \
-               linux
-
-       test
-               make test
-       end
-
-       make_install_targets += \
-               TO_LIB="liblua.so.%{version}" \
-               INSTALL_TOP="%{BUILDROOT}%{prefix}" \
-               INSTALL_LIB="%{BUILDROOT}%{libdir}" \
-               INSTALL_MAN="%{BUILDROOT}%{mandir}/man1"
-
-       install_cmds
-               # Install library links
-               ln -svf liblua.so.%{version} %{BUILDROOT}%{libdir}/liblua.so.%{major_version}
-               ln -svf liblua.so.%{major_version} %{BUILDROOT}%{libdir}/liblua.so
-
-               # Install pkgconfig file
-               mkdir -pv %{BUILDROOT}%{libdir}/pkgconfig
-               sed "s/%VER%/%{major_version}/g;s/%REL%/%{version}/g" \
-                       < %{DIR_SOURCE}/lua.pc > %{BUILDROOT}%{libdir}/pkgconfig/lua.pc
-       end
+       configure_options += \
+               --with-compat-module \
+               --with-readline
 end
 
 packages
        package %{name}
 
+       package %{name}-libs
+               template LIBS
+
+               files += %{libdir}/liblua-%{ver_maj}.so
+       end
+
        package %{name}-devel
                template DEVEL
-       end
 
-       package %{name}-libs
-               template LIBS
+               requires = lua-libs = %{thisver}
+
+               files += !%{libdir}/liblua-%{ver_maj}.so
        end
 
        package %{name}-debuginfo
diff --git a/lua/lua.pc b/lua/lua.pc
deleted file mode 100644 (file)
index bf7977b..0000000
+++ /dev/null
@@ -1,20 +0,0 @@
-V=%VER%
-R=%REL%
-
-prefix=/usr
-INSTALL_BIN=${prefix}/bin
-INSTALL_INC=${prefix}/include
-INSTALL_LIB=${prefix}/lib
-INSTALL_MAN=${prefix}/man/man1
-INSTALL_LMOD=${prefix}/share/lua/${V}
-INSTALL_CMOD=${prefix}/lib/lua/${V}
-exec_prefix=${prefix}
-libdir=${exec_prefix}/lib
-includedir=${prefix}/include
-
-Name: Lua
-Description: An Extensible Extension Language
-Version: ${R}
-Requires: 
-Libs: -L${libdir} -llua -lm
-Cflags: -I${includedir}
diff --git a/lua/patches/liblua.so.patch b/lua/patches/liblua.so.patch
deleted file mode 100644 (file)
index f9e24f3..0000000
+++ /dev/null
@@ -1,60 +0,0 @@
-diff --git a/Makefile b/Makefile
-index 7fa91c8..dccf485 100644
---- a/Makefile
-+++ b/Makefile
-@@ -52,7 +52,7 @@ R= $V.0
- all:  $(PLAT)
- $(PLATS) clean:
--      cd src && $(MAKE) $@
-+      cd src && $(MAKE) $@ V=$(V) R=$(R)
- test: dummy
-       src/lua -v
-diff --git a/src/Makefile b/src/Makefile
-index 2e7a412..fa5769f 100644
---- a/src/Makefile
-+++ b/src/Makefile
-@@ -29,6 +29,7 @@ MYOBJS=
- PLATS= aix bsd c89 freebsd generic linux macosx mingw posix solaris
- LUA_A=        liblua.a
-+LUA_SO= liblua.so
- CORE_O=       lapi.o lcode.o lctype.o ldebug.o ldo.o ldump.o lfunc.o lgc.o llex.o \
-       lmem.o lobject.o lopcodes.o lparser.o lstate.o lstring.o ltable.o \
-       ltm.o lundump.o lvm.o lzio.o
-@@ -43,7 +44,7 @@ LUAC_T=      luac
- LUAC_O=       luac.o
- ALL_O= $(BASE_O) $(LUA_O) $(LUAC_O)
--ALL_T= $(LUA_A) $(LUA_T) $(LUAC_T)
-+ALL_T= $(LUA_A) $(LUA_T) $(LUAC_T) $(LUA_SO)
- ALL_A= $(LUA_A)
- # Targets start here.
-@@ -59,6 +60,12 @@ $(LUA_A): $(BASE_O)
-       $(AR) $@ $(BASE_O)
-       $(RANLIB) $@
-+$(LUA_SO): $(CORE_O) $(LIB_O)
-+      $(CC) -shared -ldl -Wl,-soname,$(LUA_SO).$(V) -o $@.$(R) $? -lm $(MYLDFLAGS)
-+      ln -sf $(LUA_SO).$(R) $(LUA_SO).$(V)
-+      ln -sf $(LUA_SO).$(R) $(LUA_SO)
-+
-+
- $(LUA_T): $(LUA_O) $(LUA_A)
-       $(CC) -o $@ $(LDFLAGS) $(LUA_O) $(LUA_A) $(LIBS)
-diff --git a/src/luaconf.h b/src/luaconf.h
-index fd28d21..e2662cc 100644
---- a/src/luaconf.h
-+++ b/src/luaconf.h
-@@ -175,7 +175,7 @@
- #else                 /* }{ */
--#define LUA_ROOT      "/usr/local/"
-+#define LUA_ROOT      "/usr/"
- #define LUA_LDIR      LUA_ROOT "share/lua/" LUA_VDIR "/"
- #define LUA_CDIR      LUA_ROOT "lib/lua/" LUA_VDIR "/"
- #define LUA_PATH_DEFAULT  \
diff --git a/lua/patches/lua-5.4.4-autotoolize.patch b/lua/patches/lua-5.4.4-autotoolize.patch
new file mode 100644 (file)
index 0000000..77d750b
--- /dev/null
@@ -0,0 +1,2539 @@
+diff -Nur lua-5.4.4-old/configure.ac lua-5.4.4/configure.ac
+--- lua-5.4.4-old/configure.ac 1970-01-01 00:00:00.000000000 +0000
++++ lua-5.4.4/configure.ac     2023-01-08 14:49:48.714984535 +0000
+@@ -0,0 +1,69 @@
++AC_PREREQ(2.59)
++AC_INIT([lua], [5.4.0], [https://bugzilla.redhat.com/], [lua-at], [http://www.lua.org])
++AC_SUBST([MAJOR_VERSION], [5.4])
++
++AC_CONFIG_HEADERS([config.h])
++AC_CONFIG_SRCDIR([src/lapi.c])
++
++AM_INIT_AUTOMAKE([1.9 foreign])
++
++AC_PROG_CC
++AC_PROG_LIBTOOL
++
++AC_ARG_WITH(
++  [readline],
++  [AC_HELP_STRING([--with-readline], [Use readline for interpreter input [default=yes]])],
++  [use_readline=$withval],
++  [use_readline=yes]
++)
++
++LUA_LIBS="-lm"
++
++# Check for readline
++READLINE_DEFS="#undef LUA_USE_READLINE"
++if test "x$use_readline" == "xyes"; then
++  AC_CHECK_LIB([readline], [readline], [:], [use_readline=no], [-lncurses])
++  AC_CHECK_HEADERS([readline/readline.h readline/history.h], [], [use_readline=no])
++  if test "x$use_readline" == "xno"; then
++    AC_MSG_WARN([readline headers could not be found, disabling readline support])
++  else
++    READLINE_DEFS="#define LUA_USE_READLINE"
++    READLINE_LIBS="-lreadline -lncurses"
++  fi
++fi
++AC_SUBST(READLINE_DEFS)
++AC_SUBST(READLINE_LIBS)
++
++case "$host" in
++  *-mingw*)  use_os=win32  ;;
++  *-darwin*) use_os=macosx ;;
++  *)         use_os=posix  ;;
++esac
++
++POSIX_DEFS="#undef LUA_USE_POSIX"
++LUA_DL_DEFS="#undef LUA_USE_DLOPEN"
++LUA_BUILD_AS_DLL_DEFS="#undef LUA_BUILD_AS_DLL"
++
++if test "x$use_os" == "xwin32"; then
++  LUA_BUILD_AS_DLL_DEFS="#define LUA_BUILD_AS_DLL"
++elif test "x$use_os" == "xmacosx"; then
++  POSIX_DEFS="#define LUA_USE_POSIX"
++  LUA_DL_DEFS="#define LUA_DL_DYLD"
++elif test "x$use_os" == "xposix"; then
++  POSIX_DEFS="#define LUA_USE_POSIX"
++  LUA_DL_DEFS="#define LUA_DL_DLOPEN"
++  LUA_LIBS="$LUA_LIBS -ldl"
++fi
++AC_SUBST(POSIX_DEFS)
++AC_SUBST(LUA_DL_DEFS)
++AC_SUBST(LUA_BUILD_AS_DLL_DEFS)
++
++AC_SUBST(LUA_LIBS)
++
++AC_CONFIG_FILES([Makefile
++                 src/Makefile
++                 src/lua.pc
++                 src/luaconf.h.template
++                 doc/Makefile
++])
++AC_OUTPUT
+diff -Nur lua-5.4.4-old/doc/Makefile.am lua-5.4.4/doc/Makefile.am
+--- lua-5.4.4-old/doc/Makefile.am      1970-01-01 00:00:00.000000000 +0000
++++ lua-5.4.4/doc/Makefile.am  2023-01-08 14:49:48.714984535 +0000
+@@ -0,0 +1,4 @@
++man1_MANS = lua.1 luac.1
++
++EXTRA_DIST = \
++      contents.html logo.gif lua.1 luac.1 lua.css manual.css manual.html osi-certified-72x60.png readme.html
+diff -Nur lua-5.4.4-old/Makefile.am lua-5.4.4/Makefile.am
+--- lua-5.4.4-old/Makefile.am  1970-01-01 00:00:00.000000000 +0000
++++ lua-5.4.4/Makefile.am      2023-01-08 14:49:48.714984535 +0000
+@@ -0,0 +1,3 @@
++SUBDIRS = src doc
++
++EXTRA_DIST = README
+diff -Nur lua-5.4.4-old/src/.gitignore lua-5.4.4/src/.gitignore
+--- lua-5.4.4-old/src/.gitignore       1970-01-01 00:00:00.000000000 +0000
++++ lua-5.4.4/src/.gitignore   2023-01-08 14:49:48.714984535 +0000
+@@ -0,0 +1,5 @@
++lua
++lua.pc
++luac
++luaconf.h
++luaconf.h.template
+diff -Nur lua-5.4.4-old/src/luaconf.h lua-5.4.4/src/luaconf.h
+--- lua-5.4.4-old/src/luaconf.h        2022-01-13 11:24:43.000000000 +0000
++++ lua-5.4.4/src/luaconf.h    1970-01-01 00:00:00.000000000 +0000
+@@ -1,786 +0,0 @@
+-/*
+-** $Id: luaconf.h $
+-** Configuration file for Lua
+-** See Copyright Notice in lua.h
+-*/
+-
+-
+-#ifndef luaconf_h
+-#define luaconf_h
+-
+-#include <limits.h>
+-#include <stddef.h>
+-
+-
+-/*
+-** ===================================================================
+-** General Configuration File for Lua
+-**
+-** Some definitions here can be changed externally, through the compiler
+-** (e.g., with '-D' options): They are commented out or protected
+-** by '#if !defined' guards. However, several other definitions
+-** should be changed directly here, either because they affect the
+-** Lua ABI (by making the changes here, you ensure that all software
+-** connected to Lua, such as C libraries, will be compiled with the same
+-** configuration); or because they are seldom changed.
+-**
+-** Search for "@@" to find all configurable definitions.
+-** ===================================================================
+-*/
+-
+-
+-/*
+-** {====================================================================
+-** System Configuration: macros to adapt (if needed) Lua to some
+-** particular platform, for instance restricting it to C89.
+-** =====================================================================
+-*/
+-
+-/*
+-@@ LUA_USE_C89 controls the use of non-ISO-C89 features.
+-** Define it if you want Lua to avoid the use of a few C99 features
+-** or Windows-specific features on Windows.
+-*/
+-/* #define LUA_USE_C89 */
+-
+-
+-/*
+-** By default, Lua on Windows use (some) specific Windows features
+-*/
+-#if !defined(LUA_USE_C89) && defined(_WIN32) && !defined(_WIN32_WCE)
+-#define LUA_USE_WINDOWS  /* enable goodies for regular Windows */
+-#endif
+-
+-
+-#if defined(LUA_USE_WINDOWS)
+-#define LUA_DL_DLL    /* enable support for DLL */
+-#define LUA_USE_C89   /* broadly, Windows is C89 */
+-#endif
+-
+-
+-#if defined(LUA_USE_LINUX)
+-#define LUA_USE_POSIX
+-#define LUA_USE_DLOPEN                /* needs an extra library: -ldl */
+-#endif
+-
+-
+-#if defined(LUA_USE_MACOSX)
+-#define LUA_USE_POSIX
+-#define LUA_USE_DLOPEN                /* MacOS does not need -ldl */
+-#endif
+-
+-
+-/*
+-@@ LUAI_IS32INT is true iff 'int' has (at least) 32 bits.
+-*/
+-#define LUAI_IS32INT  ((UINT_MAX >> 30) >= 3)
+-
+-/* }================================================================== */
+-
+-
+-
+-/*
+-** {==================================================================
+-** Configuration for Number types. These options should not be
+-** set externally, because any other code connected to Lua must
+-** use the same configuration.
+-** ===================================================================
+-*/
+-
+-/*
+-@@ LUA_INT_TYPE defines the type for Lua integers.
+-@@ LUA_FLOAT_TYPE defines the type for Lua floats.
+-** Lua should work fine with any mix of these options supported
+-** by your C compiler. The usual configurations are 64-bit integers
+-** and 'double' (the default), 32-bit integers and 'float' (for
+-** restricted platforms), and 'long'/'double' (for C compilers not
+-** compliant with C99, which may not have support for 'long long').
+-*/
+-
+-/* predefined options for LUA_INT_TYPE */
+-#define LUA_INT_INT           1
+-#define LUA_INT_LONG          2
+-#define LUA_INT_LONGLONG      3
+-
+-/* predefined options for LUA_FLOAT_TYPE */
+-#define LUA_FLOAT_FLOAT               1
+-#define LUA_FLOAT_DOUBLE      2
+-#define LUA_FLOAT_LONGDOUBLE  3
+-
+-
+-/* Default configuration ('long long' and 'double', for 64-bit Lua) */
+-#define LUA_INT_DEFAULT               LUA_INT_LONGLONG
+-#define LUA_FLOAT_DEFAULT     LUA_FLOAT_DOUBLE
+-
+-
+-/*
+-@@ LUA_32BITS enables Lua with 32-bit integers and 32-bit floats.
+-*/
+-#define LUA_32BITS    0
+-
+-
+-/*
+-@@ LUA_C89_NUMBERS ensures that Lua uses the largest types available for
+-** C89 ('long' and 'double'); Windows always has '__int64', so it does
+-** not need to use this case.
+-*/
+-#if defined(LUA_USE_C89) && !defined(LUA_USE_WINDOWS)
+-#define LUA_C89_NUMBERS               1
+-#else
+-#define LUA_C89_NUMBERS               0
+-#endif
+-
+-
+-#if LUA_32BITS                /* { */
+-/*
+-** 32-bit integers and 'float'
+-*/
+-#if LUAI_IS32INT  /* use 'int' if big enough */
+-#define LUA_INT_TYPE  LUA_INT_INT
+-#else  /* otherwise use 'long' */
+-#define LUA_INT_TYPE  LUA_INT_LONG
+-#endif
+-#define LUA_FLOAT_TYPE        LUA_FLOAT_FLOAT
+-
+-#elif LUA_C89_NUMBERS /* }{ */
+-/*
+-** largest types available for C89 ('long' and 'double')
+-*/
+-#define LUA_INT_TYPE  LUA_INT_LONG
+-#define LUA_FLOAT_TYPE        LUA_FLOAT_DOUBLE
+-
+-#else         /* }{ */
+-/* use defaults */
+-
+-#define LUA_INT_TYPE  LUA_INT_DEFAULT
+-#define LUA_FLOAT_TYPE        LUA_FLOAT_DEFAULT
+-
+-#endif                                /* } */
+-
+-
+-/* }================================================================== */
+-
+-
+-
+-/*
+-** {==================================================================
+-** Configuration for Paths.
+-** ===================================================================
+-*/
+-
+-/*
+-** LUA_PATH_SEP is the character that separates templates in a path.
+-** LUA_PATH_MARK is the string that marks the substitution points in a
+-** template.
+-** LUA_EXEC_DIR in a Windows path is replaced by the executable's
+-** directory.
+-*/
+-#define LUA_PATH_SEP            ";"
+-#define LUA_PATH_MARK           "?"
+-#define LUA_EXEC_DIR            "!"
+-
+-
+-/*
+-@@ LUA_PATH_DEFAULT is the default path that Lua uses to look for
+-** Lua libraries.
+-@@ LUA_CPATH_DEFAULT is the default path that Lua uses to look for
+-** C libraries.
+-** CHANGE them if your machine has a non-conventional directory
+-** hierarchy or if you want to install your libraries in
+-** non-conventional directories.
+-*/
+-
+-#define LUA_VDIR      LUA_VERSION_MAJOR "." LUA_VERSION_MINOR
+-#if defined(_WIN32)   /* { */
+-/*
+-** In Windows, any exclamation mark ('!') in the path is replaced by the
+-** path of the directory of the executable file of the current process.
+-*/
+-#define LUA_LDIR      "!\\lua\\"
+-#define LUA_CDIR      "!\\"
+-#define LUA_SHRDIR    "!\\..\\share\\lua\\" LUA_VDIR "\\"
+-
+-#if !defined(LUA_PATH_DEFAULT)
+-#define LUA_PATH_DEFAULT  \
+-              LUA_LDIR"?.lua;"  LUA_LDIR"?\\init.lua;" \
+-              LUA_CDIR"?.lua;"  LUA_CDIR"?\\init.lua;" \
+-              LUA_SHRDIR"?.lua;" LUA_SHRDIR"?\\init.lua;" \
+-              ".\\?.lua;" ".\\?\\init.lua"
+-#endif
+-
+-#if !defined(LUA_CPATH_DEFAULT)
+-#define LUA_CPATH_DEFAULT \
+-              LUA_CDIR"?.dll;" \
+-              LUA_CDIR"..\\lib\\lua\\" LUA_VDIR "\\?.dll;" \
+-              LUA_CDIR"loadall.dll;" ".\\?.dll"
+-#endif
+-
+-#else                 /* }{ */
+-
+-#define LUA_ROOT      "/usr/local/"
+-#define LUA_LDIR      LUA_ROOT "share/lua/" LUA_VDIR "/"
+-#define LUA_CDIR      LUA_ROOT "lib/lua/" LUA_VDIR "/"
+-
+-#if !defined(LUA_PATH_DEFAULT)
+-#define LUA_PATH_DEFAULT  \
+-              LUA_LDIR"?.lua;"  LUA_LDIR"?/init.lua;" \
+-              LUA_CDIR"?.lua;"  LUA_CDIR"?/init.lua;" \
+-              "./?.lua;" "./?/init.lua"
+-#endif
+-
+-#if !defined(LUA_CPATH_DEFAULT)
+-#define LUA_CPATH_DEFAULT \
+-              LUA_CDIR"?.so;" LUA_CDIR"loadall.so;" "./?.so"
+-#endif
+-
+-#endif                        /* } */
+-
+-
+-/*
+-@@ LUA_DIRSEP is the directory separator (for submodules).
+-** CHANGE it if your machine does not use "/" as the directory separator
+-** and is not Windows. (On Windows Lua automatically uses "\".)
+-*/
+-#if !defined(LUA_DIRSEP)
+-
+-#if defined(_WIN32)
+-#define LUA_DIRSEP    "\\"
+-#else
+-#define LUA_DIRSEP    "/"
+-#endif
+-
+-#endif
+-
+-/* }================================================================== */
+-
+-
+-/*
+-** {==================================================================
+-** Marks for exported symbols in the C code
+-** ===================================================================
+-*/
+-
+-/*
+-@@ LUA_API is a mark for all core API functions.
+-@@ LUALIB_API is a mark for all auxiliary library functions.
+-@@ LUAMOD_API is a mark for all standard library opening functions.
+-** CHANGE them if you need to define those functions in some special way.
+-** For instance, if you want to create one Windows DLL with the core and
+-** the libraries, you may want to use the following definition (define
+-** LUA_BUILD_AS_DLL to get it).
+-*/
+-#if defined(LUA_BUILD_AS_DLL) /* { */
+-
+-#if defined(LUA_CORE) || defined(LUA_LIB)     /* { */
+-#define LUA_API __declspec(dllexport)
+-#else                                         /* }{ */
+-#define LUA_API __declspec(dllimport)
+-#endif                                                /* } */
+-
+-#else                         /* }{ */
+-
+-#define LUA_API               extern
+-
+-#endif                                /* } */
+-
+-
+-/*
+-** More often than not the libs go together with the core.
+-*/
+-#define LUALIB_API    LUA_API
+-#define LUAMOD_API    LUA_API
+-
+-
+-/*
+-@@ LUAI_FUNC is a mark for all extern functions that are not to be
+-** exported to outside modules.
+-@@ LUAI_DDEF and LUAI_DDEC are marks for all extern (const) variables,
+-** none of which to be exported to outside modules (LUAI_DDEF for
+-** definitions and LUAI_DDEC for declarations).
+-** CHANGE them if you need to mark them in some special way. Elf/gcc
+-** (versions 3.2 and later) mark them as "hidden" to optimize access
+-** when Lua is compiled as a shared library. Not all elf targets support
+-** this attribute. Unfortunately, gcc does not offer a way to check
+-** whether the target offers that support, and those without support
+-** give a warning about it. To avoid these warnings, change to the
+-** default definition.
+-*/
+-#if defined(__GNUC__) && ((__GNUC__*100 + __GNUC_MINOR__) >= 302) && \
+-    defined(__ELF__)          /* { */
+-#define LUAI_FUNC     __attribute__((visibility("internal"))) extern
+-#else                         /* }{ */
+-#define LUAI_FUNC     extern
+-#endif                                /* } */
+-
+-#define LUAI_DDEC(dec)        LUAI_FUNC dec
+-#define LUAI_DDEF     /* empty */
+-
+-/* }================================================================== */
+-
+-
+-/*
+-** {==================================================================
+-** Compatibility with previous versions
+-** ===================================================================
+-*/
+-
+-/*
+-@@ LUA_COMPAT_5_3 controls other macros for compatibility with Lua 5.3.
+-** You can define it to get all options, or change specific options
+-** to fit your specific needs.
+-*/
+-#if defined(LUA_COMPAT_5_3)   /* { */
+-
+-/*
+-@@ LUA_COMPAT_MATHLIB controls the presence of several deprecated
+-** functions in the mathematical library.
+-** (These functions were already officially removed in 5.3;
+-** nevertheless they are still available here.)
+-*/
+-#define LUA_COMPAT_MATHLIB
+-
+-/*
+-@@ LUA_COMPAT_APIINTCASTS controls the presence of macros for
+-** manipulating other integer types (lua_pushunsigned, lua_tounsigned,
+-** luaL_checkint, luaL_checklong, etc.)
+-** (These macros were also officially removed in 5.3, but they are still
+-** available here.)
+-*/
+-#define LUA_COMPAT_APIINTCASTS
+-
+-
+-/*
+-@@ LUA_COMPAT_LT_LE controls the emulation of the '__le' metamethod
+-** using '__lt'.
+-*/
+-#define LUA_COMPAT_LT_LE
+-
+-
+-/*
+-@@ The following macros supply trivial compatibility for some
+-** changes in the API. The macros themselves document how to
+-** change your code to avoid using them.
+-** (Once more, these macros were officially removed in 5.3, but they are
+-** still available here.)
+-*/
+-#define lua_strlen(L,i)               lua_rawlen(L, (i))
+-
+-#define lua_objlen(L,i)               lua_rawlen(L, (i))
+-
+-#define lua_equal(L,idx1,idx2)                lua_compare(L,(idx1),(idx2),LUA_OPEQ)
+-#define lua_lessthan(L,idx1,idx2)     lua_compare(L,(idx1),(idx2),LUA_OPLT)
+-
+-#endif                                /* } */
+-
+-/* }================================================================== */
+-
+-
+-
+-/*
+-** {==================================================================
+-** Configuration for Numbers (low-level part).
+-** Change these definitions if no predefined LUA_FLOAT_* / LUA_INT_*
+-** satisfy your needs.
+-** ===================================================================
+-*/
+-
+-/*
+-@@ LUAI_UACNUMBER is the result of a 'default argument promotion'
+-@@ over a floating number.
+-@@ l_floatatt(x) corrects float attribute 'x' to the proper float type
+-** by prefixing it with one of FLT/DBL/LDBL.
+-@@ LUA_NUMBER_FRMLEN is the length modifier for writing floats.
+-@@ LUA_NUMBER_FMT is the format for writing floats.
+-@@ lua_number2str converts a float to a string.
+-@@ l_mathop allows the addition of an 'l' or 'f' to all math operations.
+-@@ l_floor takes the floor of a float.
+-@@ lua_str2number converts a decimal numeral to a number.
+-*/
+-
+-
+-/* The following definitions are good for most cases here */
+-
+-#define l_floor(x)            (l_mathop(floor)(x))
+-
+-#define lua_number2str(s,sz,n)  \
+-      l_sprintf((s), sz, LUA_NUMBER_FMT, (LUAI_UACNUMBER)(n))
+-
+-/*
+-@@ lua_numbertointeger converts a float number with an integral value
+-** to an integer, or returns 0 if float is not within the range of
+-** a lua_Integer.  (The range comparisons are tricky because of
+-** rounding. The tests here assume a two-complement representation,
+-** where MININTEGER always has an exact representation as a float;
+-** MAXINTEGER may not have one, and therefore its conversion to float
+-** may have an ill-defined value.)
+-*/
+-#define lua_numbertointeger(n,p) \
+-  ((n) >= (LUA_NUMBER)(LUA_MININTEGER) && \
+-   (n) < -(LUA_NUMBER)(LUA_MININTEGER) && \
+-      (*(p) = (LUA_INTEGER)(n), 1))
+-
+-
+-/* now the variable definitions */
+-
+-#if LUA_FLOAT_TYPE == LUA_FLOAT_FLOAT         /* { single float */
+-
+-#define LUA_NUMBER    float
+-
+-#define l_floatatt(n)         (FLT_##n)
+-
+-#define LUAI_UACNUMBER        double
+-
+-#define LUA_NUMBER_FRMLEN     ""
+-#define LUA_NUMBER_FMT                "%.7g"
+-
+-#define l_mathop(op)          op##f
+-
+-#define lua_str2number(s,p)   strtof((s), (p))
+-
+-
+-#elif LUA_FLOAT_TYPE == LUA_FLOAT_LONGDOUBLE  /* }{ long double */
+-
+-#define LUA_NUMBER    long double
+-
+-#define l_floatatt(n)         (LDBL_##n)
+-
+-#define LUAI_UACNUMBER        long double
+-
+-#define LUA_NUMBER_FRMLEN     "L"
+-#define LUA_NUMBER_FMT                "%.19Lg"
+-
+-#define l_mathop(op)          op##l
+-
+-#define lua_str2number(s,p)   strtold((s), (p))
+-
+-#elif LUA_FLOAT_TYPE == LUA_FLOAT_DOUBLE      /* }{ double */
+-
+-#define LUA_NUMBER    double
+-
+-#define l_floatatt(n)         (DBL_##n)
+-
+-#define LUAI_UACNUMBER        double
+-
+-#define LUA_NUMBER_FRMLEN     ""
+-#define LUA_NUMBER_FMT                "%.14g"
+-
+-#define l_mathop(op)          op
+-
+-#define lua_str2number(s,p)   strtod((s), (p))
+-
+-#else                                         /* }{ */
+-
+-#error "numeric float type not defined"
+-
+-#endif                                        /* } */
+-
+-
+-
+-/*
+-@@ LUA_UNSIGNED is the unsigned version of LUA_INTEGER.
+-@@ LUAI_UACINT is the result of a 'default argument promotion'
+-@@ over a LUA_INTEGER.
+-@@ LUA_INTEGER_FRMLEN is the length modifier for reading/writing integers.
+-@@ LUA_INTEGER_FMT is the format for writing integers.
+-@@ LUA_MAXINTEGER is the maximum value for a LUA_INTEGER.
+-@@ LUA_MININTEGER is the minimum value for a LUA_INTEGER.
+-@@ LUA_MAXUNSIGNED is the maximum value for a LUA_UNSIGNED.
+-@@ lua_integer2str converts an integer to a string.
+-*/
+-
+-
+-/* The following definitions are good for most cases here */
+-
+-#define LUA_INTEGER_FMT               "%" LUA_INTEGER_FRMLEN "d"
+-
+-#define LUAI_UACINT           LUA_INTEGER
+-
+-#define lua_integer2str(s,sz,n)  \
+-      l_sprintf((s), sz, LUA_INTEGER_FMT, (LUAI_UACINT)(n))
+-
+-/*
+-** use LUAI_UACINT here to avoid problems with promotions (which
+-** can turn a comparison between unsigneds into a signed comparison)
+-*/
+-#define LUA_UNSIGNED          unsigned LUAI_UACINT
+-
+-
+-/* now the variable definitions */
+-
+-#if LUA_INT_TYPE == LUA_INT_INT               /* { int */
+-
+-#define LUA_INTEGER           int
+-#define LUA_INTEGER_FRMLEN    ""
+-
+-#define LUA_MAXINTEGER                INT_MAX
+-#define LUA_MININTEGER                INT_MIN
+-
+-#define LUA_MAXUNSIGNED               UINT_MAX
+-
+-#elif LUA_INT_TYPE == LUA_INT_LONG    /* }{ long */
+-
+-#define LUA_INTEGER           long
+-#define LUA_INTEGER_FRMLEN    "l"
+-
+-#define LUA_MAXINTEGER                LONG_MAX
+-#define LUA_MININTEGER                LONG_MIN
+-
+-#define LUA_MAXUNSIGNED               ULONG_MAX
+-
+-#elif LUA_INT_TYPE == LUA_INT_LONGLONG        /* }{ long long */
+-
+-/* use presence of macro LLONG_MAX as proxy for C99 compliance */
+-#if defined(LLONG_MAX)                /* { */
+-/* use ISO C99 stuff */
+-
+-#define LUA_INTEGER           long long
+-#define LUA_INTEGER_FRMLEN    "ll"
+-
+-#define LUA_MAXINTEGER                LLONG_MAX
+-#define LUA_MININTEGER                LLONG_MIN
+-
+-#define LUA_MAXUNSIGNED               ULLONG_MAX
+-
+-#elif defined(LUA_USE_WINDOWS) /* }{ */
+-/* in Windows, can use specific Windows types */
+-
+-#define LUA_INTEGER           __int64
+-#define LUA_INTEGER_FRMLEN    "I64"
+-
+-#define LUA_MAXINTEGER                _I64_MAX
+-#define LUA_MININTEGER                _I64_MIN
+-
+-#define LUA_MAXUNSIGNED               _UI64_MAX
+-
+-#else                         /* }{ */
+-
+-#error "Compiler does not support 'long long'. Use option '-DLUA_32BITS' \
+-  or '-DLUA_C89_NUMBERS' (see file 'luaconf.h' for details)"
+-
+-#endif                                /* } */
+-
+-#else                         /* }{ */
+-
+-#error "numeric integer type not defined"
+-
+-#endif                                /* } */
+-
+-/* }================================================================== */
+-
+-
+-/*
+-** {==================================================================
+-** Dependencies with C99 and other C details
+-** ===================================================================
+-*/
+-
+-/*
+-@@ l_sprintf is equivalent to 'snprintf' or 'sprintf' in C89.
+-** (All uses in Lua have only one format item.)
+-*/
+-#if !defined(LUA_USE_C89)
+-#define l_sprintf(s,sz,f,i)   snprintf(s,sz,f,i)
+-#else
+-#define l_sprintf(s,sz,f,i)   ((void)(sz), sprintf(s,f,i))
+-#endif
+-
+-
+-/*
+-@@ lua_strx2number converts a hexadecimal numeral to a number.
+-** In C99, 'strtod' does that conversion. Otherwise, you can
+-** leave 'lua_strx2number' undefined and Lua will provide its own
+-** implementation.
+-*/
+-#if !defined(LUA_USE_C89)
+-#define lua_strx2number(s,p)          lua_str2number(s,p)
+-#endif
+-
+-
+-/*
+-@@ lua_pointer2str converts a pointer to a readable string in a
+-** non-specified way.
+-*/
+-#define lua_pointer2str(buff,sz,p)    l_sprintf(buff,sz,"%p",p)
+-
+-
+-/*
+-@@ lua_number2strx converts a float to a hexadecimal numeral.
+-** In C99, 'sprintf' (with format specifiers '%a'/'%A') does that.
+-** Otherwise, you can leave 'lua_number2strx' undefined and Lua will
+-** provide its own implementation.
+-*/
+-#if !defined(LUA_USE_C89)
+-#define lua_number2strx(L,b,sz,f,n)  \
+-      ((void)L, l_sprintf(b,sz,f,(LUAI_UACNUMBER)(n)))
+-#endif
+-
+-
+-/*
+-** 'strtof' and 'opf' variants for math functions are not valid in
+-** C89. Otherwise, the macro 'HUGE_VALF' is a good proxy for testing the
+-** availability of these variants. ('math.h' is already included in
+-** all files that use these macros.)
+-*/
+-#if defined(LUA_USE_C89) || (defined(HUGE_VAL) && !defined(HUGE_VALF))
+-#undef l_mathop  /* variants not available */
+-#undef lua_str2number
+-#define l_mathop(op)          (lua_Number)op  /* no variant */
+-#define lua_str2number(s,p)   ((lua_Number)strtod((s), (p)))
+-#endif
+-
+-
+-/*
+-@@ LUA_KCONTEXT is the type of the context ('ctx') for continuation
+-** functions.  It must be a numerical type; Lua will use 'intptr_t' if
+-** available, otherwise it will use 'ptrdiff_t' (the nearest thing to
+-** 'intptr_t' in C89)
+-*/
+-#define LUA_KCONTEXT  ptrdiff_t
+-
+-#if !defined(LUA_USE_C89) && defined(__STDC_VERSION__) && \
+-    __STDC_VERSION__ >= 199901L
+-#include <stdint.h>
+-#if defined(INTPTR_MAX)  /* even in C99 this type is optional */
+-#undef LUA_KCONTEXT
+-#define LUA_KCONTEXT  intptr_t
+-#endif
+-#endif
+-
+-
+-/*
+-@@ lua_getlocaledecpoint gets the locale "radix character" (decimal point).
+-** Change that if you do not want to use C locales. (Code using this
+-** macro must include the header 'locale.h'.)
+-*/
+-#if !defined(lua_getlocaledecpoint)
+-#define lua_getlocaledecpoint()               (localeconv()->decimal_point[0])
+-#endif
+-
+-
+-/*
+-** macros to improve jump prediction, used mostly for error handling
+-** and debug facilities. (Some macros in the Lua API use these macros.
+-** Define LUA_NOBUILTIN if you do not want '__builtin_expect' in your
+-** code.)
+-*/
+-#if !defined(luai_likely)
+-
+-#if defined(__GNUC__) && !defined(LUA_NOBUILTIN)
+-#define luai_likely(x)                (__builtin_expect(((x) != 0), 1))
+-#define luai_unlikely(x)      (__builtin_expect(((x) != 0), 0))
+-#else
+-#define luai_likely(x)                (x)
+-#define luai_unlikely(x)      (x)
+-#endif
+-
+-#endif
+-
+-
+-#if defined(LUA_CORE) || defined(LUA_LIB)
+-/* shorter names for Lua's own use */
+-#define l_likely(x)   luai_likely(x)
+-#define l_unlikely(x) luai_unlikely(x)
+-#endif
+-
+-
+-
+-/* }================================================================== */
+-
+-
+-/*
+-** {==================================================================
+-** Language Variations
+-** =====================================================================
+-*/
+-
+-/*
+-@@ LUA_NOCVTN2S/LUA_NOCVTS2N control how Lua performs some
+-** coercions. Define LUA_NOCVTN2S to turn off automatic coercion from
+-** numbers to strings. Define LUA_NOCVTS2N to turn off automatic
+-** coercion from strings to numbers.
+-*/
+-/* #define LUA_NOCVTN2S */
+-/* #define LUA_NOCVTS2N */
+-
+-
+-/*
+-@@ LUA_USE_APICHECK turns on several consistency checks on the C API.
+-** Define it as a help when debugging C code.
+-*/
+-#if defined(LUA_USE_APICHECK)
+-#include <assert.h>
+-#define luai_apicheck(l,e)    assert(e)
+-#endif
+-
+-/* }================================================================== */
+-
+-
+-/*
+-** {==================================================================
+-** Macros that affect the API and must be stable (that is, must be the
+-** same when you compile Lua and when you compile code that links to
+-** Lua).
+-** =====================================================================
+-*/
+-
+-/*
+-@@ LUAI_MAXSTACK limits the size of the Lua stack.
+-** CHANGE it if you need a different limit. This limit is arbitrary;
+-** its only purpose is to stop Lua from consuming unlimited stack
+-** space (and to reserve some numbers for pseudo-indices).
+-** (It must fit into max(size_t)/32.)
+-*/
+-#if LUAI_IS32INT
+-#define LUAI_MAXSTACK         1000000
+-#else
+-#define LUAI_MAXSTACK         15000
+-#endif
+-
+-
+-/*
+-@@ LUA_EXTRASPACE defines the size of a raw memory area associated with
+-** a Lua state with very fast access.
+-** CHANGE it if you need a different size.
+-*/
+-#define LUA_EXTRASPACE                (sizeof(void *))
+-
+-
+-/*
+-@@ LUA_IDSIZE gives the maximum size for the description of the source
+-@@ of a function in debug information.
+-** CHANGE it if you want a different size.
+-*/
+-#define LUA_IDSIZE    60
+-
+-
+-/*
+-@@ LUAL_BUFFERSIZE is the buffer size used by the lauxlib buffer system.
+-*/
+-#define LUAL_BUFFERSIZE   ((int)(16 * sizeof(void*) * sizeof(lua_Number)))
+-
+-
+-/*
+-@@ LUAI_MAXALIGN defines fields that, when used in a union, ensure
+-** maximum alignment for the other items in that union.
+-*/
+-#define LUAI_MAXALIGN  lua_Number n; double u; void *s; lua_Integer i; long l
+-
+-/* }================================================================== */
+-
+-
+-
+-
+-
+-/* =================================================================== */
+-
+-/*
+-** Local configuration. You can use this space to add your redefinitions
+-** without modifying the main part of the file.
+-*/
+-
+-
+-
+-
+-
+-#endif
+-
+diff -Nur lua-5.4.4-old/src/luaconf.h.template.in lua-5.4.4/src/luaconf.h.template.in
+--- lua-5.4.4-old/src/luaconf.h.template.in    1970-01-01 00:00:00.000000000 +0000
++++ lua-5.4.4/src/luaconf.h.template.in        2023-01-08 14:49:48.714984535 +0000
+@@ -0,0 +1,791 @@
++/*
++** $Id: luaconf.h $
++** Configuration file for Lua
++** See Copyright Notice in lua.h
++*/
++
++
++#ifndef luaconf_h
++#define luaconf_h
++
++#include <limits.h>
++#include <stddef.h>
++
++@POSIX_DEFS@
++@LUA_DL_DEFS@
++@LUA_BUILD_AS_DLL_DEFS@
++@READLINE_DEFS@
++
++
++/*
++** ===================================================================
++** General Configuration File for Lua
++**
++** Some definitions here can be changed externally, through the compiler
++** (e.g., with '-D' options): They are commented out or protected
++** by '#if !defined' guards. However, several other definitions
++** should be changed directly here, either because they affect the
++** Lua ABI (by making the changes here, you ensure that all software
++** connected to Lua, such as C libraries, will be compiled with the same
++** configuration); or because they are seldom changed.
++**
++** Search for "@@" to find all configurable definitions.
++** ===================================================================
++*/
++
++
++/*
++** {====================================================================
++** System Configuration: macros to adapt (if needed) Lua to some
++** particular platform, for instance restricting it to C89.
++** =====================================================================
++*/
++
++/*
++@@ LUA_USE_C89 controls the use of non-ISO-C89 features.
++** Define it if you want Lua to avoid the use of a few C99 features
++** or Windows-specific features on Windows.
++*/
++/* #define LUA_USE_C89 */
++
++
++/*
++** By default, Lua on Windows use (some) specific Windows features
++*/
++#if !defined(LUA_USE_C89) && defined(_WIN32) && !defined(_WIN32_WCE)
++#define LUA_USE_WINDOWS  /* enable goodies for regular Windows */
++#endif
++
++
++#if defined(LUA_USE_WINDOWS)
++#define LUA_DL_DLL    /* enable support for DLL */
++#define LUA_USE_C89   /* broadly, Windows is C89 */
++#endif
++
++
++#if defined(LUA_USE_LINUX)
++#define LUA_USE_POSIX
++#define LUA_USE_DLOPEN                /* needs an extra library: -ldl */
++#endif
++
++
++#if defined(LUA_USE_MACOSX)
++#define LUA_USE_POSIX
++#define LUA_USE_DLOPEN                /* MacOS does not need -ldl */
++#endif
++
++
++/*
++@@ LUAI_IS32INT is true iff 'int' has (at least) 32 bits.
++*/
++#define LUAI_IS32INT  ((UINT_MAX >> 30) >= 3)
++
++/* }================================================================== */
++
++
++
++/*
++** {==================================================================
++** Configuration for Number types. These options should not be
++** set externally, because any other code connected to Lua must
++** use the same configuration.
++** ===================================================================
++*/
++
++/*
++@@ LUA_INT_TYPE defines the type for Lua integers.
++@@ LUA_FLOAT_TYPE defines the type for Lua floats.
++** Lua should work fine with any mix of these options supported
++** by your C compiler. The usual configurations are 64-bit integers
++** and 'double' (the default), 32-bit integers and 'float' (for
++** restricted platforms), and 'long'/'double' (for C compilers not
++** compliant with C99, which may not have support for 'long long').
++*/
++
++/* predefined options for LUA_INT_TYPE */
++#define LUA_INT_INT           1
++#define LUA_INT_LONG          2
++#define LUA_INT_LONGLONG      3
++
++/* predefined options for LUA_FLOAT_TYPE */
++#define LUA_FLOAT_FLOAT               1
++#define LUA_FLOAT_DOUBLE      2
++#define LUA_FLOAT_LONGDOUBLE  3
++
++
++/* Default configuration ('long long' and 'double', for 64-bit Lua) */
++#define LUA_INT_DEFAULT               LUA_INT_LONGLONG
++#define LUA_FLOAT_DEFAULT     LUA_FLOAT_DOUBLE
++
++
++/*
++@@ LUA_32BITS enables Lua with 32-bit integers and 32-bit floats.
++*/
++#define LUA_32BITS    0
++
++
++/*
++@@ LUA_C89_NUMBERS ensures that Lua uses the largest types available for
++** C89 ('long' and 'double'); Windows always has '__int64', so it does
++** not need to use this case.
++*/
++#if defined(LUA_USE_C89) && !defined(LUA_USE_WINDOWS)
++#define LUA_C89_NUMBERS               1
++#else
++#define LUA_C89_NUMBERS               0
++#endif
++
++
++#if LUA_32BITS                /* { */
++/*
++** 32-bit integers and 'float'
++*/
++#if LUAI_IS32INT  /* use 'int' if big enough */
++#define LUA_INT_TYPE  LUA_INT_INT
++#else  /* otherwise use 'long' */
++#define LUA_INT_TYPE  LUA_INT_LONG
++#endif
++#define LUA_FLOAT_TYPE        LUA_FLOAT_FLOAT
++
++#elif LUA_C89_NUMBERS /* }{ */
++/*
++** largest types available for C89 ('long' and 'double')
++*/
++#define LUA_INT_TYPE  LUA_INT_LONG
++#define LUA_FLOAT_TYPE        LUA_FLOAT_DOUBLE
++
++#else         /* }{ */
++/* use defaults */
++
++#define LUA_INT_TYPE  LUA_INT_DEFAULT
++#define LUA_FLOAT_TYPE        LUA_FLOAT_DEFAULT
++
++#endif                                /* } */
++
++
++/* }================================================================== */
++
++
++
++/*
++** {==================================================================
++** Configuration for Paths.
++** ===================================================================
++*/
++
++/*
++** LUA_PATH_SEP is the character that separates templates in a path.
++** LUA_PATH_MARK is the string that marks the substitution points in a
++** template.
++** LUA_EXEC_DIR in a Windows path is replaced by the executable's
++** directory.
++*/
++#define LUA_PATH_SEP            ";"
++#define LUA_PATH_MARK           "?"
++#define LUA_EXEC_DIR            "!"
++
++
++/*
++@@ LUA_PATH_DEFAULT is the default path that Lua uses to look for
++** Lua libraries.
++@@ LUA_CPATH_DEFAULT is the default path that Lua uses to look for
++** C libraries.
++** CHANGE them if your machine has a non-conventional directory
++** hierarchy or if you want to install your libraries in
++** non-conventional directories.
++*/
++
++#define LUA_VDIR      LUA_VERSION_MAJOR "." LUA_VERSION_MINOR
++#if defined(_WIN32)   /* { */
++/*
++** In Windows, any exclamation mark ('!') in the path is replaced by the
++** path of the directory of the executable file of the current process.
++*/
++#define LUA_LDIR      "!\\lua\\"
++#define LUA_CDIR      "!\\"
++#define LUA_SHRDIR    "!\\..\\share\\lua\\" LUA_VDIR "\\"
++
++#if !defined(LUA_PATH_DEFAULT)
++#define LUA_PATH_DEFAULT  \
++              LUA_LDIR"?.lua;"  LUA_LDIR"?\\init.lua;" \
++              LUA_CDIR"?.lua;"  LUA_CDIR"?\\init.lua;" \
++              LUA_SHRDIR"?.lua;" LUA_SHRDIR"?\\init.lua;" \
++              ".\\?.lua;" ".\\?\\init.lua"
++#endif
++
++#if !defined(LUA_CPATH_DEFAULT)
++#define LUA_CPATH_DEFAULT \
++              LUA_CDIR"?.dll;" \
++              LUA_CDIR"..\\lib\\lua\\" LUA_VDIR "\\?.dll;" \
++              LUA_CDIR"loadall.dll;" ".\\?.dll"
++#endif
++
++#else                 /* }{ */
++
++#define LUA_ROOT      "@prefix@/"
++#define LUA_LDIR      "@pkgdatadir@/lua/" LUA_VDIR "/"
++#define LUA_CDIR      "@libdir@/lua/" LUA_VDIR "/"
++
++#if !defined(LUA_PATH_DEFAULT)
++#define LUA_PATH_DEFAULT  \
++              LUA_LDIR"?.lua;"  LUA_LDIR"?/init.lua;" \
++              LUA_CDIR"?.lua;"  LUA_CDIR"?/init.lua;" \
++              "./?.lua;" "./?/init.lua"
++#endif
++
++#if !defined(LUA_CPATH_DEFAULT)
++#define LUA_CPATH_DEFAULT \
++              LUA_CDIR"?.so;" LUA_CDIR"loadall.so;" "./?.so"
++#endif
++
++#endif                        /* } */
++
++
++/*
++@@ LUA_DIRSEP is the directory separator (for submodules).
++** CHANGE it if your machine does not use "/" as the directory separator
++** and is not Windows. (On Windows Lua automatically uses "\".)
++*/
++#if !defined(LUA_DIRSEP)
++
++#if defined(_WIN32)
++#define LUA_DIRSEP    "\\"
++#else
++#define LUA_DIRSEP    "/"
++#endif
++
++#endif
++
++/* }================================================================== */
++
++
++/*
++** {==================================================================
++** Marks for exported symbols in the C code
++** ===================================================================
++*/
++
++/*
++@@ LUA_API is a mark for all core API functions.
++@@ LUALIB_API is a mark for all auxiliary library functions.
++@@ LUAMOD_API is a mark for all standard library opening functions.
++** CHANGE them if you need to define those functions in some special way.
++** For instance, if you want to create one Windows DLL with the core and
++** the libraries, you may want to use the following definition (define
++** LUA_BUILD_AS_DLL to get it).
++*/
++#if defined(LUA_BUILD_AS_DLL) /* { */
++
++#if defined(LUA_CORE) || defined(LUA_LIB)     /* { */
++#define LUA_API __declspec(dllexport)
++#else                                         /* }{ */
++#define LUA_API __declspec(dllimport)
++#endif                                                /* } */
++
++#else                         /* }{ */
++
++#define LUA_API               extern
++
++#endif                                /* } */
++
++
++/*
++** More often than not the libs go together with the core.
++*/
++#define LUALIB_API    LUA_API
++#define LUAMOD_API    LUA_API
++
++
++/*
++@@ LUAI_FUNC is a mark for all extern functions that are not to be
++** exported to outside modules.
++@@ LUAI_DDEF and LUAI_DDEC are marks for all extern (const) variables,
++** none of which to be exported to outside modules (LUAI_DDEF for
++** definitions and LUAI_DDEC for declarations).
++** CHANGE them if you need to mark them in some special way. Elf/gcc
++** (versions 3.2 and later) mark them as "hidden" to optimize access
++** when Lua is compiled as a shared library. Not all elf targets support
++** this attribute. Unfortunately, gcc does not offer a way to check
++** whether the target offers that support, and those without support
++** give a warning about it. To avoid these warnings, change to the
++** default definition.
++*/
++#if defined(__GNUC__) && ((__GNUC__*100 + __GNUC_MINOR__) >= 302) && \
++    defined(__ELF__)          /* { */
++#define LUAI_FUNC     __attribute__((visibility("internal"))) extern
++#else                         /* }{ */
++#define LUAI_FUNC     extern
++#endif                                /* } */
++
++#define LUAI_DDEC(dec)        LUAI_FUNC dec
++#define LUAI_DDEF     /* empty */
++
++/* }================================================================== */
++
++
++/*
++** {==================================================================
++** Compatibility with previous versions
++** ===================================================================
++*/
++
++/*
++@@ LUA_COMPAT_5_3 controls other macros for compatibility with Lua 5.3.
++** You can define it to get all options, or change specific options
++** to fit your specific needs.
++*/
++#if defined(LUA_COMPAT_5_3)   /* { */
++
++/*
++@@ LUA_COMPAT_MATHLIB controls the presence of several deprecated
++** functions in the mathematical library.
++** (These functions were already officially removed in 5.3;
++** nevertheless they are still available here.)
++*/
++#define LUA_COMPAT_MATHLIB
++
++/*
++@@ LUA_COMPAT_APIINTCASTS controls the presence of macros for
++** manipulating other integer types (lua_pushunsigned, lua_tounsigned,
++** luaL_checkint, luaL_checklong, etc.)
++** (These macros were also officially removed in 5.3, but they are still
++** available here.)
++*/
++#define LUA_COMPAT_APIINTCASTS
++
++
++/*
++@@ LUA_COMPAT_LT_LE controls the emulation of the '__le' metamethod
++** using '__lt'.
++*/
++#define LUA_COMPAT_LT_LE
++
++
++/*
++@@ The following macros supply trivial compatibility for some
++** changes in the API. The macros themselves document how to
++** change your code to avoid using them.
++** (Once more, these macros were officially removed in 5.3, but they are
++** still available here.)
++*/
++#define lua_strlen(L,i)               lua_rawlen(L, (i))
++
++#define lua_objlen(L,i)               lua_rawlen(L, (i))
++
++#define lua_equal(L,idx1,idx2)                lua_compare(L,(idx1),(idx2),LUA_OPEQ)
++#define lua_lessthan(L,idx1,idx2)     lua_compare(L,(idx1),(idx2),LUA_OPLT)
++
++#endif                                /* } */
++
++/* }================================================================== */
++
++
++
++/*
++** {==================================================================
++** Configuration for Numbers (low-level part).
++** Change these definitions if no predefined LUA_FLOAT_* / LUA_INT_*
++** satisfy your needs.
++** ===================================================================
++*/
++
++/*
++@@ LUAI_UACNUMBER is the result of a 'default argument promotion'
++@@ over a floating number.
++@@ l_floatatt(x) corrects float attribute 'x' to the proper float type
++** by prefixing it with one of FLT/DBL/LDBL.
++@@ LUA_NUMBER_FRMLEN is the length modifier for writing floats.
++@@ LUA_NUMBER_FMT is the format for writing floats.
++@@ lua_number2str converts a float to a string.
++@@ l_mathop allows the addition of an 'l' or 'f' to all math operations.
++@@ l_floor takes the floor of a float.
++@@ lua_str2number converts a decimal numeral to a number.
++*/
++
++
++/* The following definitions are good for most cases here */
++
++#define l_floor(x)            (l_mathop(floor)(x))
++
++#define lua_number2str(s,sz,n)  \
++      l_sprintf((s), sz, LUA_NUMBER_FMT, (LUAI_UACNUMBER)(n))
++
++/*
++@@ lua_numbertointeger converts a float number with an integral value
++** to an integer, or returns 0 if float is not within the range of
++** a lua_Integer.  (The range comparisons are tricky because of
++** rounding. The tests here assume a two-complement representation,
++** where MININTEGER always has an exact representation as a float;
++** MAXINTEGER may not have one, and therefore its conversion to float
++** may have an ill-defined value.)
++*/
++#define lua_numbertointeger(n,p) \
++  ((n) >= (LUA_NUMBER)(LUA_MININTEGER) && \
++   (n) < -(LUA_NUMBER)(LUA_MININTEGER) && \
++      (*(p) = (LUA_INTEGER)(n), 1))
++
++
++/* now the variable definitions */
++
++#if LUA_FLOAT_TYPE == LUA_FLOAT_FLOAT         /* { single float */
++
++#define LUA_NUMBER    float
++
++#define l_floatatt(n)         (FLT_##n)
++
++#define LUAI_UACNUMBER        double
++
++#define LUA_NUMBER_FRMLEN     ""
++#define LUA_NUMBER_FMT                "%.7g"
++
++#define l_mathop(op)          op##f
++
++#define lua_str2number(s,p)   strtof((s), (p))
++
++
++#elif LUA_FLOAT_TYPE == LUA_FLOAT_LONGDOUBLE  /* }{ long double */
++
++#define LUA_NUMBER    long double
++
++#define l_floatatt(n)         (LDBL_##n)
++
++#define LUAI_UACNUMBER        long double
++
++#define LUA_NUMBER_FRMLEN     "L"
++#define LUA_NUMBER_FMT                "%.19Lg"
++
++#define l_mathop(op)          op##l
++
++#define lua_str2number(s,p)   strtold((s), (p))
++
++#elif LUA_FLOAT_TYPE == LUA_FLOAT_DOUBLE      /* }{ double */
++
++#define LUA_NUMBER    double
++
++#define l_floatatt(n)         (DBL_##n)
++
++#define LUAI_UACNUMBER        double
++
++#define LUA_NUMBER_FRMLEN     ""
++#define LUA_NUMBER_FMT                "%.14g"
++
++#define l_mathop(op)          op
++
++#define lua_str2number(s,p)   strtod((s), (p))
++
++#else                                         /* }{ */
++
++#error "numeric float type not defined"
++
++#endif                                        /* } */
++
++
++
++/*
++@@ LUA_UNSIGNED is the unsigned version of LUA_INTEGER.
++@@ LUAI_UACINT is the result of a 'default argument promotion'
++@@ over a LUA_INTEGER.
++@@ LUA_INTEGER_FRMLEN is the length modifier for reading/writing integers.
++@@ LUA_INTEGER_FMT is the format for writing integers.
++@@ LUA_MAXINTEGER is the maximum value for a LUA_INTEGER.
++@@ LUA_MININTEGER is the minimum value for a LUA_INTEGER.
++@@ LUA_MAXUNSIGNED is the maximum value for a LUA_UNSIGNED.
++@@ lua_integer2str converts an integer to a string.
++*/
++
++
++/* The following definitions are good for most cases here */
++
++#define LUA_INTEGER_FMT               "%" LUA_INTEGER_FRMLEN "d"
++
++#define LUAI_UACINT           LUA_INTEGER
++
++#define lua_integer2str(s,sz,n)  \
++      l_sprintf((s), sz, LUA_INTEGER_FMT, (LUAI_UACINT)(n))
++
++/*
++** use LUAI_UACINT here to avoid problems with promotions (which
++** can turn a comparison between unsigneds into a signed comparison)
++*/
++#define LUA_UNSIGNED          unsigned LUAI_UACINT
++
++
++/* now the variable definitions */
++
++#if LUA_INT_TYPE == LUA_INT_INT               /* { int */
++
++#define LUA_INTEGER           int
++#define LUA_INTEGER_FRMLEN    ""
++
++#define LUA_MAXINTEGER                INT_MAX
++#define LUA_MININTEGER                INT_MIN
++
++#define LUA_MAXUNSIGNED               UINT_MAX
++
++#elif LUA_INT_TYPE == LUA_INT_LONG    /* }{ long */
++
++#define LUA_INTEGER           long
++#define LUA_INTEGER_FRMLEN    "l"
++
++#define LUA_MAXINTEGER                LONG_MAX
++#define LUA_MININTEGER                LONG_MIN
++
++#define LUA_MAXUNSIGNED               ULONG_MAX
++
++#elif LUA_INT_TYPE == LUA_INT_LONGLONG        /* }{ long long */
++
++/* use presence of macro LLONG_MAX as proxy for C99 compliance */
++#if defined(LLONG_MAX)                /* { */
++/* use ISO C99 stuff */
++
++#define LUA_INTEGER           long long
++#define LUA_INTEGER_FRMLEN    "ll"
++
++#define LUA_MAXINTEGER                LLONG_MAX
++#define LUA_MININTEGER                LLONG_MIN
++
++#define LUA_MAXUNSIGNED               ULLONG_MAX
++
++#elif defined(LUA_USE_WINDOWS) /* }{ */
++/* in Windows, can use specific Windows types */
++
++#define LUA_INTEGER           __int64
++#define LUA_INTEGER_FRMLEN    "I64"
++
++#define LUA_MAXINTEGER                _I64_MAX
++#define LUA_MININTEGER                _I64_MIN
++
++#define LUA_MAXUNSIGNED               _UI64_MAX
++
++#else                         /* }{ */
++
++#error "Compiler does not support 'long long'. Use option '-DLUA_32BITS' \
++  or '-DLUA_C89_NUMBERS' (see file 'luaconf.h' for details)"
++
++#endif                                /* } */
++
++#else                         /* }{ */
++
++#error "numeric integer type not defined"
++
++#endif                                /* } */
++
++/* }================================================================== */
++
++
++/*
++** {==================================================================
++** Dependencies with C99 and other C details
++** ===================================================================
++*/
++
++/*
++@@ l_sprintf is equivalent to 'snprintf' or 'sprintf' in C89.
++** (All uses in Lua have only one format item.)
++*/
++#if !defined(LUA_USE_C89)
++#define l_sprintf(s,sz,f,i)   snprintf(s,sz,f,i)
++#else
++#define l_sprintf(s,sz,f,i)   ((void)(sz), sprintf(s,f,i))
++#endif
++
++
++/*
++@@ lua_strx2number converts a hexadecimal numeral to a number.
++** In C99, 'strtod' does that conversion. Otherwise, you can
++** leave 'lua_strx2number' undefined and Lua will provide its own
++** implementation.
++*/
++#if !defined(LUA_USE_C89)
++#define lua_strx2number(s,p)          lua_str2number(s,p)
++#endif
++
++
++/*
++@@ lua_pointer2str converts a pointer to a readable string in a
++** non-specified way.
++*/
++#define lua_pointer2str(buff,sz,p)    l_sprintf(buff,sz,"%p",p)
++
++
++/*
++@@ lua_number2strx converts a float to a hexadecimal numeral.
++** In C99, 'sprintf' (with format specifiers '%a'/'%A') does that.
++** Otherwise, you can leave 'lua_number2strx' undefined and Lua will
++** provide its own implementation.
++*/
++#if !defined(LUA_USE_C89)
++#define lua_number2strx(L,b,sz,f,n)  \
++      ((void)L, l_sprintf(b,sz,f,(LUAI_UACNUMBER)(n)))
++#endif
++
++
++/*
++** 'strtof' and 'opf' variants for math functions are not valid in
++** C89. Otherwise, the macro 'HUGE_VALF' is a good proxy for testing the
++** availability of these variants. ('math.h' is already included in
++** all files that use these macros.)
++*/
++#if defined(LUA_USE_C89) || (defined(HUGE_VAL) && !defined(HUGE_VALF))
++#undef l_mathop  /* variants not available */
++#undef lua_str2number
++#define l_mathop(op)          (lua_Number)op  /* no variant */
++#define lua_str2number(s,p)   ((lua_Number)strtod((s), (p)))
++#endif
++
++
++/*
++@@ LUA_KCONTEXT is the type of the context ('ctx') for continuation
++** functions.  It must be a numerical type; Lua will use 'intptr_t' if
++** available, otherwise it will use 'ptrdiff_t' (the nearest thing to
++** 'intptr_t' in C89)
++*/
++#define LUA_KCONTEXT  ptrdiff_t
++
++#if !defined(LUA_USE_C89) && defined(__STDC_VERSION__) && \
++    __STDC_VERSION__ >= 199901L
++#include <stdint.h>
++#if defined(INTPTR_MAX)  /* even in C99 this type is optional */
++#undef LUA_KCONTEXT
++#define LUA_KCONTEXT  intptr_t
++#endif
++#endif
++
++
++/*
++@@ lua_getlocaledecpoint gets the locale "radix character" (decimal point).
++** Change that if you do not want to use C locales. (Code using this
++** macro must include the header 'locale.h'.)
++*/
++#if !defined(lua_getlocaledecpoint)
++#define lua_getlocaledecpoint()               (localeconv()->decimal_point[0])
++#endif
++
++
++/*
++** macros to improve jump prediction, used mostly for error handling
++** and debug facilities. (Some macros in the Lua API use these macros.
++** Define LUA_NOBUILTIN if you do not want '__builtin_expect' in your
++** code.)
++*/
++#if !defined(luai_likely)
++
++#if defined(__GNUC__) && !defined(LUA_NOBUILTIN)
++#define luai_likely(x)                (__builtin_expect(((x) != 0), 1))
++#define luai_unlikely(x)      (__builtin_expect(((x) != 0), 0))
++#else
++#define luai_likely(x)                (x)
++#define luai_unlikely(x)      (x)
++#endif
++
++#endif
++
++
++#if defined(LUA_CORE) || defined(LUA_LIB)
++/* shorter names for Lua's own use */
++#define l_likely(x)   luai_likely(x)
++#define l_unlikely(x) luai_unlikely(x)
++#endif
++
++
++
++/* }================================================================== */
++
++
++/*
++** {==================================================================
++** Language Variations
++** =====================================================================
++*/
++
++/*
++@@ LUA_NOCVTN2S/LUA_NOCVTS2N control how Lua performs some
++** coercions. Define LUA_NOCVTN2S to turn off automatic coercion from
++** numbers to strings. Define LUA_NOCVTS2N to turn off automatic
++** coercion from strings to numbers.
++*/
++/* #define LUA_NOCVTN2S */
++/* #define LUA_NOCVTS2N */
++
++
++/*
++@@ LUA_USE_APICHECK turns on several consistency checks on the C API.
++** Define it as a help when debugging C code.
++*/
++#if defined(LUA_USE_APICHECK)
++#include <assert.h>
++#define luai_apicheck(l,e)    assert(e)
++#endif
++
++/* }================================================================== */
++
++
++/*
++** {==================================================================
++** Macros that affect the API and must be stable (that is, must be the
++** same when you compile Lua and when you compile code that links to
++** Lua).
++** =====================================================================
++*/
++
++/*
++@@ LUAI_MAXSTACK limits the size of the Lua stack.
++** CHANGE it if you need a different limit. This limit is arbitrary;
++** its only purpose is to stop Lua from consuming unlimited stack
++** space (and to reserve some numbers for pseudo-indices).
++** (It must fit into max(size_t)/32.)
++*/
++#if LUAI_IS32INT
++#define LUAI_MAXSTACK         1000000
++#else
++#define LUAI_MAXSTACK         15000
++#endif
++
++
++/*
++@@ LUA_EXTRASPACE defines the size of a raw memory area associated with
++** a Lua state with very fast access.
++** CHANGE it if you need a different size.
++*/
++#define LUA_EXTRASPACE                (sizeof(void *))
++
++
++/*
++@@ LUA_IDSIZE gives the maximum size for the description of the source
++@@ of a function in debug information.
++** CHANGE it if you want a different size.
++*/
++#define LUA_IDSIZE    60
++
++
++/*
++@@ LUAL_BUFFERSIZE is the buffer size used by the lauxlib buffer system.
++*/
++#define LUAL_BUFFERSIZE   ((int)(16 * sizeof(void*) * sizeof(lua_Number)))
++
++
++/*
++@@ LUAI_MAXALIGN defines fields that, when used in a union, ensure
++** maximum alignment for the other items in that union.
++*/
++#define LUAI_MAXALIGN  lua_Number n; double u; void *s; lua_Integer i; long l
++
++/* }================================================================== */
++
++
++
++
++
++/* =================================================================== */
++
++/*
++** Local configuration. You can use this space to add your redefinitions
++** without modifying the main part of the file.
++*/
++
++
++
++
++
++#endif
++
+diff -Nur lua-5.4.4-old/src/luaconf.h.template.in.orig lua-5.4.4/src/luaconf.h.template.in.orig
+--- lua-5.4.4-old/src/luaconf.h.template.in.orig       1970-01-01 00:00:00.000000000 +0000
++++ lua-5.4.4/src/luaconf.h.template.in.orig   2022-01-13 11:24:43.000000000 +0000
+@@ -0,0 +1,786 @@
++/*
++** $Id: luaconf.h $
++** Configuration file for Lua
++** See Copyright Notice in lua.h
++*/
++
++
++#ifndef luaconf_h
++#define luaconf_h
++
++#include <limits.h>
++#include <stddef.h>
++
++
++/*
++** ===================================================================
++** General Configuration File for Lua
++**
++** Some definitions here can be changed externally, through the compiler
++** (e.g., with '-D' options): They are commented out or protected
++** by '#if !defined' guards. However, several other definitions
++** should be changed directly here, either because they affect the
++** Lua ABI (by making the changes here, you ensure that all software
++** connected to Lua, such as C libraries, will be compiled with the same
++** configuration); or because they are seldom changed.
++**
++** Search for "@@" to find all configurable definitions.
++** ===================================================================
++*/
++
++
++/*
++** {====================================================================
++** System Configuration: macros to adapt (if needed) Lua to some
++** particular platform, for instance restricting it to C89.
++** =====================================================================
++*/
++
++/*
++@@ LUA_USE_C89 controls the use of non-ISO-C89 features.
++** Define it if you want Lua to avoid the use of a few C99 features
++** or Windows-specific features on Windows.
++*/
++/* #define LUA_USE_C89 */
++
++
++/*
++** By default, Lua on Windows use (some) specific Windows features
++*/
++#if !defined(LUA_USE_C89) && defined(_WIN32) && !defined(_WIN32_WCE)
++#define LUA_USE_WINDOWS  /* enable goodies for regular Windows */
++#endif
++
++
++#if defined(LUA_USE_WINDOWS)
++#define LUA_DL_DLL    /* enable support for DLL */
++#define LUA_USE_C89   /* broadly, Windows is C89 */
++#endif
++
++
++#if defined(LUA_USE_LINUX)
++#define LUA_USE_POSIX
++#define LUA_USE_DLOPEN                /* needs an extra library: -ldl */
++#endif
++
++
++#if defined(LUA_USE_MACOSX)
++#define LUA_USE_POSIX
++#define LUA_USE_DLOPEN                /* MacOS does not need -ldl */
++#endif
++
++
++/*
++@@ LUAI_IS32INT is true iff 'int' has (at least) 32 bits.
++*/
++#define LUAI_IS32INT  ((UINT_MAX >> 30) >= 3)
++
++/* }================================================================== */
++
++
++
++/*
++** {==================================================================
++** Configuration for Number types. These options should not be
++** set externally, because any other code connected to Lua must
++** use the same configuration.
++** ===================================================================
++*/
++
++/*
++@@ LUA_INT_TYPE defines the type for Lua integers.
++@@ LUA_FLOAT_TYPE defines the type for Lua floats.
++** Lua should work fine with any mix of these options supported
++** by your C compiler. The usual configurations are 64-bit integers
++** and 'double' (the default), 32-bit integers and 'float' (for
++** restricted platforms), and 'long'/'double' (for C compilers not
++** compliant with C99, which may not have support for 'long long').
++*/
++
++/* predefined options for LUA_INT_TYPE */
++#define LUA_INT_INT           1
++#define LUA_INT_LONG          2
++#define LUA_INT_LONGLONG      3
++
++/* predefined options for LUA_FLOAT_TYPE */
++#define LUA_FLOAT_FLOAT               1
++#define LUA_FLOAT_DOUBLE      2
++#define LUA_FLOAT_LONGDOUBLE  3
++
++
++/* Default configuration ('long long' and 'double', for 64-bit Lua) */
++#define LUA_INT_DEFAULT               LUA_INT_LONGLONG
++#define LUA_FLOAT_DEFAULT     LUA_FLOAT_DOUBLE
++
++
++/*
++@@ LUA_32BITS enables Lua with 32-bit integers and 32-bit floats.
++*/
++#define LUA_32BITS    0
++
++
++/*
++@@ LUA_C89_NUMBERS ensures that Lua uses the largest types available for
++** C89 ('long' and 'double'); Windows always has '__int64', so it does
++** not need to use this case.
++*/
++#if defined(LUA_USE_C89) && !defined(LUA_USE_WINDOWS)
++#define LUA_C89_NUMBERS               1
++#else
++#define LUA_C89_NUMBERS               0
++#endif
++
++
++#if LUA_32BITS                /* { */
++/*
++** 32-bit integers and 'float'
++*/
++#if LUAI_IS32INT  /* use 'int' if big enough */
++#define LUA_INT_TYPE  LUA_INT_INT
++#else  /* otherwise use 'long' */
++#define LUA_INT_TYPE  LUA_INT_LONG
++#endif
++#define LUA_FLOAT_TYPE        LUA_FLOAT_FLOAT
++
++#elif LUA_C89_NUMBERS /* }{ */
++/*
++** largest types available for C89 ('long' and 'double')
++*/
++#define LUA_INT_TYPE  LUA_INT_LONG
++#define LUA_FLOAT_TYPE        LUA_FLOAT_DOUBLE
++
++#else         /* }{ */
++/* use defaults */
++
++#define LUA_INT_TYPE  LUA_INT_DEFAULT
++#define LUA_FLOAT_TYPE        LUA_FLOAT_DEFAULT
++
++#endif                                /* } */
++
++
++/* }================================================================== */
++
++
++
++/*
++** {==================================================================
++** Configuration for Paths.
++** ===================================================================
++*/
++
++/*
++** LUA_PATH_SEP is the character that separates templates in a path.
++** LUA_PATH_MARK is the string that marks the substitution points in a
++** template.
++** LUA_EXEC_DIR in a Windows path is replaced by the executable's
++** directory.
++*/
++#define LUA_PATH_SEP            ";"
++#define LUA_PATH_MARK           "?"
++#define LUA_EXEC_DIR            "!"
++
++
++/*
++@@ LUA_PATH_DEFAULT is the default path that Lua uses to look for
++** Lua libraries.
++@@ LUA_CPATH_DEFAULT is the default path that Lua uses to look for
++** C libraries.
++** CHANGE them if your machine has a non-conventional directory
++** hierarchy or if you want to install your libraries in
++** non-conventional directories.
++*/
++
++#define LUA_VDIR      LUA_VERSION_MAJOR "." LUA_VERSION_MINOR
++#if defined(_WIN32)   /* { */
++/*
++** In Windows, any exclamation mark ('!') in the path is replaced by the
++** path of the directory of the executable file of the current process.
++*/
++#define LUA_LDIR      "!\\lua\\"
++#define LUA_CDIR      "!\\"
++#define LUA_SHRDIR    "!\\..\\share\\lua\\" LUA_VDIR "\\"
++
++#if !defined(LUA_PATH_DEFAULT)
++#define LUA_PATH_DEFAULT  \
++              LUA_LDIR"?.lua;"  LUA_LDIR"?\\init.lua;" \
++              LUA_CDIR"?.lua;"  LUA_CDIR"?\\init.lua;" \
++              LUA_SHRDIR"?.lua;" LUA_SHRDIR"?\\init.lua;" \
++              ".\\?.lua;" ".\\?\\init.lua"
++#endif
++
++#if !defined(LUA_CPATH_DEFAULT)
++#define LUA_CPATH_DEFAULT \
++              LUA_CDIR"?.dll;" \
++              LUA_CDIR"..\\lib\\lua\\" LUA_VDIR "\\?.dll;" \
++              LUA_CDIR"loadall.dll;" ".\\?.dll"
++#endif
++
++#else                 /* }{ */
++
++#define LUA_ROOT      "/usr/local/"
++#define LUA_LDIR      LUA_ROOT "share/lua/" LUA_VDIR "/"
++#define LUA_CDIR      LUA_ROOT "lib/lua/" LUA_VDIR "/"
++
++#if !defined(LUA_PATH_DEFAULT)
++#define LUA_PATH_DEFAULT  \
++              LUA_LDIR"?.lua;"  LUA_LDIR"?/init.lua;" \
++              LUA_CDIR"?.lua;"  LUA_CDIR"?/init.lua;" \
++              "./?.lua;" "./?/init.lua"
++#endif
++
++#if !defined(LUA_CPATH_DEFAULT)
++#define LUA_CPATH_DEFAULT \
++              LUA_CDIR"?.so;" LUA_CDIR"loadall.so;" "./?.so"
++#endif
++
++#endif                        /* } */
++
++
++/*
++@@ LUA_DIRSEP is the directory separator (for submodules).
++** CHANGE it if your machine does not use "/" as the directory separator
++** and is not Windows. (On Windows Lua automatically uses "\".)
++*/
++#if !defined(LUA_DIRSEP)
++
++#if defined(_WIN32)
++#define LUA_DIRSEP    "\\"
++#else
++#define LUA_DIRSEP    "/"
++#endif
++
++#endif
++
++/* }================================================================== */
++
++
++/*
++** {==================================================================
++** Marks for exported symbols in the C code
++** ===================================================================
++*/
++
++/*
++@@ LUA_API is a mark for all core API functions.
++@@ LUALIB_API is a mark for all auxiliary library functions.
++@@ LUAMOD_API is a mark for all standard library opening functions.
++** CHANGE them if you need to define those functions in some special way.
++** For instance, if you want to create one Windows DLL with the core and
++** the libraries, you may want to use the following definition (define
++** LUA_BUILD_AS_DLL to get it).
++*/
++#if defined(LUA_BUILD_AS_DLL) /* { */
++
++#if defined(LUA_CORE) || defined(LUA_LIB)     /* { */
++#define LUA_API __declspec(dllexport)
++#else                                         /* }{ */
++#define LUA_API __declspec(dllimport)
++#endif                                                /* } */
++
++#else                         /* }{ */
++
++#define LUA_API               extern
++
++#endif                                /* } */
++
++
++/*
++** More often than not the libs go together with the core.
++*/
++#define LUALIB_API    LUA_API
++#define LUAMOD_API    LUA_API
++
++
++/*
++@@ LUAI_FUNC is a mark for all extern functions that are not to be
++** exported to outside modules.
++@@ LUAI_DDEF and LUAI_DDEC are marks for all extern (const) variables,
++** none of which to be exported to outside modules (LUAI_DDEF for
++** definitions and LUAI_DDEC for declarations).
++** CHANGE them if you need to mark them in some special way. Elf/gcc
++** (versions 3.2 and later) mark them as "hidden" to optimize access
++** when Lua is compiled as a shared library. Not all elf targets support
++** this attribute. Unfortunately, gcc does not offer a way to check
++** whether the target offers that support, and those without support
++** give a warning about it. To avoid these warnings, change to the
++** default definition.
++*/
++#if defined(__GNUC__) && ((__GNUC__*100 + __GNUC_MINOR__) >= 302) && \
++    defined(__ELF__)          /* { */
++#define LUAI_FUNC     __attribute__((visibility("internal"))) extern
++#else                         /* }{ */
++#define LUAI_FUNC     extern
++#endif                                /* } */
++
++#define LUAI_DDEC(dec)        LUAI_FUNC dec
++#define LUAI_DDEF     /* empty */
++
++/* }================================================================== */
++
++
++/*
++** {==================================================================
++** Compatibility with previous versions
++** ===================================================================
++*/
++
++/*
++@@ LUA_COMPAT_5_3 controls other macros for compatibility with Lua 5.3.
++** You can define it to get all options, or change specific options
++** to fit your specific needs.
++*/
++#if defined(LUA_COMPAT_5_3)   /* { */
++
++/*
++@@ LUA_COMPAT_MATHLIB controls the presence of several deprecated
++** functions in the mathematical library.
++** (These functions were already officially removed in 5.3;
++** nevertheless they are still available here.)
++*/
++#define LUA_COMPAT_MATHLIB
++
++/*
++@@ LUA_COMPAT_APIINTCASTS controls the presence of macros for
++** manipulating other integer types (lua_pushunsigned, lua_tounsigned,
++** luaL_checkint, luaL_checklong, etc.)
++** (These macros were also officially removed in 5.3, but they are still
++** available here.)
++*/
++#define LUA_COMPAT_APIINTCASTS
++
++
++/*
++@@ LUA_COMPAT_LT_LE controls the emulation of the '__le' metamethod
++** using '__lt'.
++*/
++#define LUA_COMPAT_LT_LE
++
++
++/*
++@@ The following macros supply trivial compatibility for some
++** changes in the API. The macros themselves document how to
++** change your code to avoid using them.
++** (Once more, these macros were officially removed in 5.3, but they are
++** still available here.)
++*/
++#define lua_strlen(L,i)               lua_rawlen(L, (i))
++
++#define lua_objlen(L,i)               lua_rawlen(L, (i))
++
++#define lua_equal(L,idx1,idx2)                lua_compare(L,(idx1),(idx2),LUA_OPEQ)
++#define lua_lessthan(L,idx1,idx2)     lua_compare(L,(idx1),(idx2),LUA_OPLT)
++
++#endif                                /* } */
++
++/* }================================================================== */
++
++
++
++/*
++** {==================================================================
++** Configuration for Numbers (low-level part).
++** Change these definitions if no predefined LUA_FLOAT_* / LUA_INT_*
++** satisfy your needs.
++** ===================================================================
++*/
++
++/*
++@@ LUAI_UACNUMBER is the result of a 'default argument promotion'
++@@ over a floating number.
++@@ l_floatatt(x) corrects float attribute 'x' to the proper float type
++** by prefixing it with one of FLT/DBL/LDBL.
++@@ LUA_NUMBER_FRMLEN is the length modifier for writing floats.
++@@ LUA_NUMBER_FMT is the format for writing floats.
++@@ lua_number2str converts a float to a string.
++@@ l_mathop allows the addition of an 'l' or 'f' to all math operations.
++@@ l_floor takes the floor of a float.
++@@ lua_str2number converts a decimal numeral to a number.
++*/
++
++
++/* The following definitions are good for most cases here */
++
++#define l_floor(x)            (l_mathop(floor)(x))
++
++#define lua_number2str(s,sz,n)  \
++      l_sprintf((s), sz, LUA_NUMBER_FMT, (LUAI_UACNUMBER)(n))
++
++/*
++@@ lua_numbertointeger converts a float number with an integral value
++** to an integer, or returns 0 if float is not within the range of
++** a lua_Integer.  (The range comparisons are tricky because of
++** rounding. The tests here assume a two-complement representation,
++** where MININTEGER always has an exact representation as a float;
++** MAXINTEGER may not have one, and therefore its conversion to float
++** may have an ill-defined value.)
++*/
++#define lua_numbertointeger(n,p) \
++  ((n) >= (LUA_NUMBER)(LUA_MININTEGER) && \
++   (n) < -(LUA_NUMBER)(LUA_MININTEGER) && \
++      (*(p) = (LUA_INTEGER)(n), 1))
++
++
++/* now the variable definitions */
++
++#if LUA_FLOAT_TYPE == LUA_FLOAT_FLOAT         /* { single float */
++
++#define LUA_NUMBER    float
++
++#define l_floatatt(n)         (FLT_##n)
++
++#define LUAI_UACNUMBER        double
++
++#define LUA_NUMBER_FRMLEN     ""
++#define LUA_NUMBER_FMT                "%.7g"
++
++#define l_mathop(op)          op##f
++
++#define lua_str2number(s,p)   strtof((s), (p))
++
++
++#elif LUA_FLOAT_TYPE == LUA_FLOAT_LONGDOUBLE  /* }{ long double */
++
++#define LUA_NUMBER    long double
++
++#define l_floatatt(n)         (LDBL_##n)
++
++#define LUAI_UACNUMBER        long double
++
++#define LUA_NUMBER_FRMLEN     "L"
++#define LUA_NUMBER_FMT                "%.19Lg"
++
++#define l_mathop(op)          op##l
++
++#define lua_str2number(s,p)   strtold((s), (p))
++
++#elif LUA_FLOAT_TYPE == LUA_FLOAT_DOUBLE      /* }{ double */
++
++#define LUA_NUMBER    double
++
++#define l_floatatt(n)         (DBL_##n)
++
++#define LUAI_UACNUMBER        double
++
++#define LUA_NUMBER_FRMLEN     ""
++#define LUA_NUMBER_FMT                "%.14g"
++
++#define l_mathop(op)          op
++
++#define lua_str2number(s,p)   strtod((s), (p))
++
++#else                                         /* }{ */
++
++#error "numeric float type not defined"
++
++#endif                                        /* } */
++
++
++
++/*
++@@ LUA_UNSIGNED is the unsigned version of LUA_INTEGER.
++@@ LUAI_UACINT is the result of a 'default argument promotion'
++@@ over a LUA_INTEGER.
++@@ LUA_INTEGER_FRMLEN is the length modifier for reading/writing integers.
++@@ LUA_INTEGER_FMT is the format for writing integers.
++@@ LUA_MAXINTEGER is the maximum value for a LUA_INTEGER.
++@@ LUA_MININTEGER is the minimum value for a LUA_INTEGER.
++@@ LUA_MAXUNSIGNED is the maximum value for a LUA_UNSIGNED.
++@@ lua_integer2str converts an integer to a string.
++*/
++
++
++/* The following definitions are good for most cases here */
++
++#define LUA_INTEGER_FMT               "%" LUA_INTEGER_FRMLEN "d"
++
++#define LUAI_UACINT           LUA_INTEGER
++
++#define lua_integer2str(s,sz,n)  \
++      l_sprintf((s), sz, LUA_INTEGER_FMT, (LUAI_UACINT)(n))
++
++/*
++** use LUAI_UACINT here to avoid problems with promotions (which
++** can turn a comparison between unsigneds into a signed comparison)
++*/
++#define LUA_UNSIGNED          unsigned LUAI_UACINT
++
++
++/* now the variable definitions */
++
++#if LUA_INT_TYPE == LUA_INT_INT               /* { int */
++
++#define LUA_INTEGER           int
++#define LUA_INTEGER_FRMLEN    ""
++
++#define LUA_MAXINTEGER                INT_MAX
++#define LUA_MININTEGER                INT_MIN
++
++#define LUA_MAXUNSIGNED               UINT_MAX
++
++#elif LUA_INT_TYPE == LUA_INT_LONG    /* }{ long */
++
++#define LUA_INTEGER           long
++#define LUA_INTEGER_FRMLEN    "l"
++
++#define LUA_MAXINTEGER                LONG_MAX
++#define LUA_MININTEGER                LONG_MIN
++
++#define LUA_MAXUNSIGNED               ULONG_MAX
++
++#elif LUA_INT_TYPE == LUA_INT_LONGLONG        /* }{ long long */
++
++/* use presence of macro LLONG_MAX as proxy for C99 compliance */
++#if defined(LLONG_MAX)                /* { */
++/* use ISO C99 stuff */
++
++#define LUA_INTEGER           long long
++#define LUA_INTEGER_FRMLEN    "ll"
++
++#define LUA_MAXINTEGER                LLONG_MAX
++#define LUA_MININTEGER                LLONG_MIN
++
++#define LUA_MAXUNSIGNED               ULLONG_MAX
++
++#elif defined(LUA_USE_WINDOWS) /* }{ */
++/* in Windows, can use specific Windows types */
++
++#define LUA_INTEGER           __int64
++#define LUA_INTEGER_FRMLEN    "I64"
++
++#define LUA_MAXINTEGER                _I64_MAX
++#define LUA_MININTEGER                _I64_MIN
++
++#define LUA_MAXUNSIGNED               _UI64_MAX
++
++#else                         /* }{ */
++
++#error "Compiler does not support 'long long'. Use option '-DLUA_32BITS' \
++  or '-DLUA_C89_NUMBERS' (see file 'luaconf.h' for details)"
++
++#endif                                /* } */
++
++#else                         /* }{ */
++
++#error "numeric integer type not defined"
++
++#endif                                /* } */
++
++/* }================================================================== */
++
++
++/*
++** {==================================================================
++** Dependencies with C99 and other C details
++** ===================================================================
++*/
++
++/*
++@@ l_sprintf is equivalent to 'snprintf' or 'sprintf' in C89.
++** (All uses in Lua have only one format item.)
++*/
++#if !defined(LUA_USE_C89)
++#define l_sprintf(s,sz,f,i)   snprintf(s,sz,f,i)
++#else
++#define l_sprintf(s,sz,f,i)   ((void)(sz), sprintf(s,f,i))
++#endif
++
++
++/*
++@@ lua_strx2number converts a hexadecimal numeral to a number.
++** In C99, 'strtod' does that conversion. Otherwise, you can
++** leave 'lua_strx2number' undefined and Lua will provide its own
++** implementation.
++*/
++#if !defined(LUA_USE_C89)
++#define lua_strx2number(s,p)          lua_str2number(s,p)
++#endif
++
++
++/*
++@@ lua_pointer2str converts a pointer to a readable string in a
++** non-specified way.
++*/
++#define lua_pointer2str(buff,sz,p)    l_sprintf(buff,sz,"%p",p)
++
++
++/*
++@@ lua_number2strx converts a float to a hexadecimal numeral.
++** In C99, 'sprintf' (with format specifiers '%a'/'%A') does that.
++** Otherwise, you can leave 'lua_number2strx' undefined and Lua will
++** provide its own implementation.
++*/
++#if !defined(LUA_USE_C89)
++#define lua_number2strx(L,b,sz,f,n)  \
++      ((void)L, l_sprintf(b,sz,f,(LUAI_UACNUMBER)(n)))
++#endif
++
++
++/*
++** 'strtof' and 'opf' variants for math functions are not valid in
++** C89. Otherwise, the macro 'HUGE_VALF' is a good proxy for testing the
++** availability of these variants. ('math.h' is already included in
++** all files that use these macros.)
++*/
++#if defined(LUA_USE_C89) || (defined(HUGE_VAL) && !defined(HUGE_VALF))
++#undef l_mathop  /* variants not available */
++#undef lua_str2number
++#define l_mathop(op)          (lua_Number)op  /* no variant */
++#define lua_str2number(s,p)   ((lua_Number)strtod((s), (p)))
++#endif
++
++
++/*
++@@ LUA_KCONTEXT is the type of the context ('ctx') for continuation
++** functions.  It must be a numerical type; Lua will use 'intptr_t' if
++** available, otherwise it will use 'ptrdiff_t' (the nearest thing to
++** 'intptr_t' in C89)
++*/
++#define LUA_KCONTEXT  ptrdiff_t
++
++#if !defined(LUA_USE_C89) && defined(__STDC_VERSION__) && \
++    __STDC_VERSION__ >= 199901L
++#include <stdint.h>
++#if defined(INTPTR_MAX)  /* even in C99 this type is optional */
++#undef LUA_KCONTEXT
++#define LUA_KCONTEXT  intptr_t
++#endif
++#endif
++
++
++/*
++@@ lua_getlocaledecpoint gets the locale "radix character" (decimal point).
++** Change that if you do not want to use C locales. (Code using this
++** macro must include the header 'locale.h'.)
++*/
++#if !defined(lua_getlocaledecpoint)
++#define lua_getlocaledecpoint()               (localeconv()->decimal_point[0])
++#endif
++
++
++/*
++** macros to improve jump prediction, used mostly for error handling
++** and debug facilities. (Some macros in the Lua API use these macros.
++** Define LUA_NOBUILTIN if you do not want '__builtin_expect' in your
++** code.)
++*/
++#if !defined(luai_likely)
++
++#if defined(__GNUC__) && !defined(LUA_NOBUILTIN)
++#define luai_likely(x)                (__builtin_expect(((x) != 0), 1))
++#define luai_unlikely(x)      (__builtin_expect(((x) != 0), 0))
++#else
++#define luai_likely(x)                (x)
++#define luai_unlikely(x)      (x)
++#endif
++
++#endif
++
++
++#if defined(LUA_CORE) || defined(LUA_LIB)
++/* shorter names for Lua's own use */
++#define l_likely(x)   luai_likely(x)
++#define l_unlikely(x) luai_unlikely(x)
++#endif
++
++
++
++/* }================================================================== */
++
++
++/*
++** {==================================================================
++** Language Variations
++** =====================================================================
++*/
++
++/*
++@@ LUA_NOCVTN2S/LUA_NOCVTS2N control how Lua performs some
++** coercions. Define LUA_NOCVTN2S to turn off automatic coercion from
++** numbers to strings. Define LUA_NOCVTS2N to turn off automatic
++** coercion from strings to numbers.
++*/
++/* #define LUA_NOCVTN2S */
++/* #define LUA_NOCVTS2N */
++
++
++/*
++@@ LUA_USE_APICHECK turns on several consistency checks on the C API.
++** Define it as a help when debugging C code.
++*/
++#if defined(LUA_USE_APICHECK)
++#include <assert.h>
++#define luai_apicheck(l,e)    assert(e)
++#endif
++
++/* }================================================================== */
++
++
++/*
++** {==================================================================
++** Macros that affect the API and must be stable (that is, must be the
++** same when you compile Lua and when you compile code that links to
++** Lua).
++** =====================================================================
++*/
++
++/*
++@@ LUAI_MAXSTACK limits the size of the Lua stack.
++** CHANGE it if you need a different limit. This limit is arbitrary;
++** its only purpose is to stop Lua from consuming unlimited stack
++** space (and to reserve some numbers for pseudo-indices).
++** (It must fit into max(size_t)/32.)
++*/
++#if LUAI_IS32INT
++#define LUAI_MAXSTACK         1000000
++#else
++#define LUAI_MAXSTACK         15000
++#endif
++
++
++/*
++@@ LUA_EXTRASPACE defines the size of a raw memory area associated with
++** a Lua state with very fast access.
++** CHANGE it if you need a different size.
++*/
++#define LUA_EXTRASPACE                (sizeof(void *))
++
++
++/*
++@@ LUA_IDSIZE gives the maximum size for the description of the source
++@@ of a function in debug information.
++** CHANGE it if you want a different size.
++*/
++#define LUA_IDSIZE    60
++
++
++/*
++@@ LUAL_BUFFERSIZE is the buffer size used by the lauxlib buffer system.
++*/
++#define LUAL_BUFFERSIZE   ((int)(16 * sizeof(void*) * sizeof(lua_Number)))
++
++
++/*
++@@ LUAI_MAXALIGN defines fields that, when used in a union, ensure
++** maximum alignment for the other items in that union.
++*/
++#define LUAI_MAXALIGN  lua_Number n; double u; void *s; lua_Integer i; long l
++
++/* }================================================================== */
++
++
++
++
++
++/* =================================================================== */
++
++/*
++** Local configuration. You can use this space to add your redefinitions
++** without modifying the main part of the file.
++*/
++
++
++
++
++
++#endif
++
+diff -Nur lua-5.4.4-old/src/lua.pc.in lua-5.4.4/src/lua.pc.in
+--- lua-5.4.4-old/src/lua.pc.in        1970-01-01 00:00:00.000000000 +0000
++++ lua-5.4.4/src/lua.pc.in    2023-01-08 14:49:48.718984708 +0000
+@@ -0,0 +1,13 @@
++V= @MAJOR_VERSION@
++R= @VERSION@
++prefix= @prefix@
++exec_prefix=${prefix}
++libdir= @libdir@
++includedir=${prefix}/include
++
++Name: Lua
++Description: An Extensible Extension Language
++Version: ${R}
++Requires:
++Libs: -llua @LUA_LIBS@
++Cflags: -I${includedir}
+diff -Nur lua-5.4.4-old/src/Makefile.am lua-5.4.4/src/Makefile.am
+--- lua-5.4.4-old/src/Makefile.am      1970-01-01 00:00:00.000000000 +0000
++++ lua-5.4.4/src/Makefile.am  2023-01-08 14:49:48.718984708 +0000
+@@ -0,0 +1,46 @@
++AM_CFLAGS = -Wall
++
++include_HEADERS = lua.h lualib.h lauxlib.h lua.hpp
++
++nodist_include_HEADERS = luaconf.h
++
++lib_LTLIBRARIES = liblua.la
++liblua_la_LDFLAGS = -release @MAJOR_VERSION@
++liblua_la_SOURCES = \
++      lapi.c lauxlib.c lbaselib.c lcode.c lcorolib.c lctype.c ldblib.c \
++      ldebug.c ldo.c ldump.c lfunc.c lgc.c linit.c liolib.c llex.c lmathlib.c lmem.c \
++      loadlib.c lobject.c lopcodes.c loslib.c lparser.c lstate.c lstring.c lstrlib.c \
++      ltable.c ltablib.c ltm.c lundump.c lutf8lib.c lvm.c lzio.c \
++      lapi.h lcode.h lctype.h ldebug.h ldo.h lfunc.h lgc.h llex.h llimits.h \
++      lmem.h lobject.h lopcodes.h lparser.h lstate.h lstring.h ltable.h ltm.h \
++      lundump.h lvm.h lzio.h
++
++pkgconfigdir = $(libdir)/pkgconfig
++pkgconfig_DATA = lua.pc
++
++bin_PROGRAMS = lua luac
++
++lua_SOURCES = lua.c
++lua_LDADD = liblua.la @LUA_LIBS@ @READLINE_LIBS@
++lua_DEPENDENCIES = liblua.la
++
++luac_SOURCES = luac.c
++# Statically link liblua against luac since luac uses symbols not exported in liblua
++luac_LDADD = .libs/liblua.a @LUA_LIBS@
++luac_DEPENDENCIES = liblua.la
++
++EXTRA_DIST = luaconf.h.template
++BUILT_SOURCES = luaconf.h
++CLEANFILES = luaconf.h luaconf.h.template
++
++readline_defs = @READLINE_DEFS@
++
++edit =        sed \
++        -e 's,%prefix%,$(prefix),g' \
++        -e 's,%lua_datadir%,$(datadir),g' \
++        -e 's,%lua_libdir%,$(libdir),g'
++
++luaconf.h : luaconf.h.template
++      rm -f $@ $@.tmp
++      $(edit) $< >$@.tmp
++      mv $@.tmp $@
diff --git a/lua/patches/lua-5.4.4-configure-compat-module.patch b/lua/patches/lua-5.4.4-configure-compat-module.patch
new file mode 100644 (file)
index 0000000..80bb047
--- /dev/null
@@ -0,0 +1,34 @@
+diff -up lua-5.2.2/configure.ac.compat-module lua-5.2.2/configure.ac
+--- lua-5.2.2/configure.ac.compat-module       2013-05-10 10:16:05.344137597 -0400
++++ lua-5.2.2/configure.ac     2013-05-10 10:16:05.357137596 -0400
+@@ -11,6 +11,19 @@ AC_PROG_CC
+ AC_PROG_LIBTOOL
+ AC_ARG_WITH(
++  [compat-module],
++  [AC_HELP_STRING([--with-compat-module], [Enable LUA_COMPAT_MODULE functions [default=no]])],
++  [use_compat_module=$withval],
++  [use_compat_module=no]
++)
++
++COMPAT_DEFS="#undef LUA_COMPAT_ALL"
++if test "x$use_compat_module" == "xyes"; then
++  COMPAT_DEFS="#define LUA_COMPAT_ALL"
++fi
++AC_SUBST(COMPAT_DEFS)
++
++AC_ARG_WITH(
+   [readline],
+   [AC_HELP_STRING([--with-readline], [Use readline for interpreter input [default=yes]])],
+   [use_readline=$withval],
+diff -up lua-5.2.2/src/luaconf.h.template.in.compat-module lua-5.2.2/src/luaconf.h.template.in
+--- lua-5.2.2/src/luaconf.h.template.in.compat-module  2013-05-10 10:25:42.586116963 -0400
++++ lua-5.2.2/src/luaconf.h.template.in        2013-05-10 10:26:29.957115269 -0400
+@@ -15,6 +15,7 @@
+ @LUA_DL_DEFS@
+ @LUA_BUILD_AS_DLL_DEFS@
+ @READLINE_DEFS@
++@COMPAT_DEFS@
+ /*
diff --git a/lua/patches/lua-5.4.4-configure-linux.patch b/lua/patches/lua-5.4.4-configure-linux.patch
new file mode 100644 (file)
index 0000000..735386a
--- /dev/null
@@ -0,0 +1,22 @@
+diff -up lua-5.2.2/configure.ac.linux lua-5.2.2/configure.ac
+--- lua-5.2.2/configure.ac.linux       2013-05-10 15:42:27.269437631 -0400
++++ lua-5.2.2/configure.ac     2013-05-10 15:43:23.530435620 -0400
+@@ -50,6 +50,7 @@ AC_SUBST(READLINE_LIBS)
+ case "$host" in
+   *-mingw*)  use_os=win32  ;;
+   *-darwin*) use_os=macosx ;;
++  *-linux*)  use_os=linux  ;;
+   *)         use_os=posix  ;;
+ esac
+@@ -62,6 +63,10 @@ if test "x$use_os" == "xwin32"; then
+ elif test "x$use_os" == "xmacosx"; then
+   POSIX_DEFS="#define LUA_USE_POSIX"
+   LUA_DL_DEFS="#define LUA_DL_DYLD"
++elif test "x$use_os" == "xlinux"; then
++  POSIX_DEFS="#define LUA_USE_LINUX"
++  LUA_DL_DEFS="#define LUA_DL_DLOPEN"
++  LUA_LIBS="$LUA_LIBS -ldl"
+ elif test "x$use_os" == "xposix"; then
+   POSIX_DEFS="#define LUA_USE_POSIX"
+   LUA_DL_DEFS="#define LUA_DL_DLOPEN"