From bd4fa78ecf8afd85eb0a2bd15ece8a796b2c68fc Mon Sep 17 00:00:00 2001 From: LocalIdentity Date: Wed, 22 Jul 2026 05:52:27 +1000 Subject: [PATCH 1/3] Update LuaJIT version Updates to the latest LuaJIT version so that we can use the new backported extensions from LuaJIT 3.0 https://luajit.org/extensions.html#lj30_bp_syntax --- vcpkg-configuration.json | 2 +- ...-do-not-set-macosx-deployment-target.patch | 14 + .../005-do-not-pass-ld-e-macosx.patch | 11 + .../ports/luajit/2026-07-20_1/Makefile.nmake | 20 + .../ports/luajit/2026-07-20_1/configure | 86 ++++ .../luajit/2026-07-20_1/luajit.pc.win.in | 24 + .../ports/luajit/2026-07-20_1/msvcbuild.patch | 51 ++ .../luajit/2026-07-20_1/pob-wide-crt.patch | 457 ++++++++++++++++++ .../ports/luajit/2026-07-20_1/portfile.cmake | 109 +++++ .../ports/luajit/2026-07-20_1/vcpkg.json | 49 ++ vcpkg-ports/versions/baseline.json | 5 + vcpkg-ports/versions/l-/luajit.json | 5 + 12 files changed, 832 insertions(+), 1 deletion(-) create mode 100644 vcpkg-ports/ports/luajit/2026-07-20_1/003-do-not-set-macosx-deployment-target.patch create mode 100644 vcpkg-ports/ports/luajit/2026-07-20_1/005-do-not-pass-ld-e-macosx.patch create mode 100644 vcpkg-ports/ports/luajit/2026-07-20_1/Makefile.nmake create mode 100644 vcpkg-ports/ports/luajit/2026-07-20_1/configure create mode 100644 vcpkg-ports/ports/luajit/2026-07-20_1/luajit.pc.win.in create mode 100644 vcpkg-ports/ports/luajit/2026-07-20_1/msvcbuild.patch create mode 100644 vcpkg-ports/ports/luajit/2026-07-20_1/pob-wide-crt.patch create mode 100644 vcpkg-ports/ports/luajit/2026-07-20_1/portfile.cmake create mode 100644 vcpkg-ports/ports/luajit/2026-07-20_1/vcpkg.json diff --git a/vcpkg-configuration.json b/vcpkg-configuration.json index 3782776..ab524ed 100644 --- a/vcpkg-configuration.json +++ b/vcpkg-configuration.json @@ -7,7 +7,7 @@ { "kind": "filesystem", "path": "vcpkg-ports", - "baseline": "2025-10-07", + "baseline": "2026-07-22", "packages": ["glfw3", "gli", "luajit"] } ] diff --git a/vcpkg-ports/ports/luajit/2026-07-20_1/003-do-not-set-macosx-deployment-target.patch b/vcpkg-ports/ports/luajit/2026-07-20_1/003-do-not-set-macosx-deployment-target.patch new file mode 100644 index 0000000..52f53c7 --- /dev/null +++ b/vcpkg-ports/ports/luajit/2026-07-20_1/003-do-not-set-macosx-deployment-target.patch @@ -0,0 +1,14 @@ +diff --git a/src/Makefile b/src/Makefile +index c4d0b14d..2c9769b9 100644 +--- a/src/Makefile ++++ b/src/Makefile +@@ -318,9 +318,6 @@ ifeq (,$(shell $(TARGET_CC) -o /dev/null -c -x c /dev/null -fno-stack-protector + TARGET_XCFLAGS+= -fno-stack-protector + endif + ifeq (Darwin,$(TARGET_SYS)) +- ifeq (,$(MACOSX_DEPLOYMENT_TARGET)) +- $(error missing: export MACOSX_DEPLOYMENT_TARGET=XX.YY) +- endif + TARGET_STRIP+= -x + TARGET_XCFLAGS+= -DLUAJIT_UNWIND_EXTERNAL + TARGET_XSHLDFLAGS= -dynamiclib -undefined dynamic_lookup -fPIC diff --git a/vcpkg-ports/ports/luajit/2026-07-20_1/005-do-not-pass-ld-e-macosx.patch b/vcpkg-ports/ports/luajit/2026-07-20_1/005-do-not-pass-ld-e-macosx.patch new file mode 100644 index 0000000..8f2f615 --- /dev/null +++ b/vcpkg-ports/ports/luajit/2026-07-20_1/005-do-not-pass-ld-e-macosx.patch @@ -0,0 +1,11 @@ +diff --git a/etc/luajit.pc b/etc/luajit.pc +index 39e1e57..3837d3b 100644 +--- a/etc/luajit.pc ++++ b/etc/luajit.pc +@@ -21,5 +21,5 @@ URL: https://luajit.org + Version: ${version} + Requires: + Libs: -L${libdir} -l${libname} +-Libs.private: -Wl,-E -lm -ldl ++Libs.private: -lm -ldl + Cflags: -I${includedir} diff --git a/vcpkg-ports/ports/luajit/2026-07-20_1/Makefile.nmake b/vcpkg-ports/ports/luajit/2026-07-20_1/Makefile.nmake new file mode 100644 index 0000000..5dadd97 --- /dev/null +++ b/vcpkg-ports/ports/luajit/2026-07-20_1/Makefile.nmake @@ -0,0 +1,20 @@ +all: + @echo _CL_ = $(_CL_) + @echo _LINK_ = $(_LINK_) + cd src && .\msvcbuild.bat $(MSVCBUILD_OPTIONS) + +install: src/luajit.exe + -mkdir "$(INSTALLDIR)" + -mkdir "$(INSTALLDIR)\bin" + copy src\luajit.exe "$(INSTALLDIR)\bin\" + if exist src\lua51.dll copy src\lua51.dll "$(INSTALLDIR)\bin\" + -mkdir "$(INSTALLDIR)\lib" + copy src\lua51.lib "$(INSTALLDIR)\lib\" + -mkdir "$(INSTALLDIR)\include" + -mkdir "$(INSTALLDIR)\include\luajit" + copy src/lua.h "$(INSTALLDIR)\include\luajit\" + copy src/luajit.h "$(INSTALLDIR)\include\luajit\" + copy src/luaconf.h "$(INSTALLDIR)\include\luajit\" + copy src/lualib.h "$(INSTALLDIR)\include\luajit\" + copy src/lauxlib.h "$(INSTALLDIR)\include\luajit\" + copy src/lua.hpp "$(INSTALLDIR)\include\luajit\" diff --git a/vcpkg-ports/ports/luajit/2026-07-20_1/configure b/vcpkg-ports/ports/luajit/2026-07-20_1/configure new file mode 100644 index 0000000..0384100 --- /dev/null +++ b/vcpkg-ports/ports/luajit/2026-07-20_1/configure @@ -0,0 +1,86 @@ +#!/bin/sh + +set -e + +LJARCH= +LUAJIT_BUILDMODE= +LUAJIT_BUILDVM_X= +LUAJIT_DASM_ARCHS= +LUAJIT_PREFIX= +for OPTION; do + case "${OPTION}" in + --prefix=*) + LUAJIT_PREFIX="${OPTION#--prefix=}" + ;; + BUILDMODE=*) + LUAJIT_BUILDMODE="${OPTION#BUILDMODE=}" + ;; + BUILDVM_X=*) + LUAJIT_BUILDVM_X="${OPTION#BUILDVM_X=}" + ;; + DASM_ARCHS=*) + LUAJIT_DASM_ARCHS="${OPTION#DASM_ARCHS=}" + ;; + LJARCH=*) + LJARCH="${OPTION#LJARCH=}" + ;; + esac +done + +cat > Makefile.vcpkg < [-m32] -E src/lj_arch.h -dM' +TARGET_TESTARCH_COMMON += 'LJ_LE 1' 'LJ_HASJIT 1' 'LJ_HASFFI 1' 'LJ_ARCH_HASFPU 1' 'LJ_ABI_SOFTFP 0' +TARGET_TESTARCH_COMMON_32 += \$(TARGET_TESTARCH_COMMON) 'LJ_ARCH_BITS 32' +TARGET_TESTARCH_COMMON_64 += \$(TARGET_TESTARCH_COMMON) 'LJ_ARCH_BITS 64' 'LJ_TARGET_GC64 1' +TARGET_TESTARCH_arm = \$(TARGET_TESTARCH_COMMON_32) LJ_TARGET_ARM +TARGET_TESTARCH_arm64 = \$(TARGET_TESTARCH_COMMON_64) LJ_TARGET_ARM64 'LJ_ARCH_VERSION 80' +TARGET_TESTARCH_x86 = \$(TARGET_TESTARCH_COMMON_32) LJ_TARGET_X86 +TARGET_TESTARCH_x64 = \$(TARGET_TESTARCH_COMMON_64) LJ_TARGET_X64 'LJ_FR2 1' + +all: + \$(MAKE) clean \$(COMMON_OPTIONS) \$(BUILD_OPTIONS) + \$(MAKE) all \$(COMMON_OPTIONS) \$(BUILD_OPTIONS) + for DA in \$(DASM_ARCHS); do \\ + rm -f src/host/buildvm_arch.h src/host/*.o; \\ + case "\$\$DA" in \\ + arm) TARGET_TESTARCH="\$(TARGET_TESTARCH_arm)" ;; \\ + arm64) TARGET_TESTARCH="\$(TARGET_TESTARCH_arm64)" ;; \\ + x86) TARGET_TESTARCH="\$(TARGET_TESTARCH_x86)" ;; \\ + x64) TARGET_TESTARCH="\$(TARGET_TESTARCH_x64)" ;; \\ + esac ; \\ + \$(MAKE) -C src host/buildvm-\$\$DA\$(EXECUTABLE_SUFFIX) \$(COMMON_OPTIONS) \$(BUILD_OPTIONS) \\ + BUILDVM_T=host/buildvm-\$\$DA\$(EXECUTABLE_SUFFIX) "TARGET_TESTARCH=\$\${TARGET_TESTARCH}" \\ + || exit 1; \\ + done + +install: + \$(MAKE) install \$(COMMON_OPTIONS) + for DA in \$(DASM_ARCHS); do \\ + mkdir -p "\$\${DESTDIR}\$(BUILDVM_PREFIX)"; \\ + install -m 0755 "src/host/buildvm-\$\$DA\$(EXECUTABLE_SUFFIX)" "\$\${DESTDIR}\$(BUILDVM_PREFIX)/buildvm-\$\$DA\$(EXECUTABLE_SUFFIX)" || exit 1 ; \\ + done + +END_MAKEFILE diff --git a/vcpkg-ports/ports/luajit/2026-07-20_1/luajit.pc.win.in b/vcpkg-ports/ports/luajit/2026-07-20_1/luajit.pc.win.in new file mode 100644 index 0000000..6eef921 --- /dev/null +++ b/vcpkg-ports/ports/luajit/2026-07-20_1/luajit.pc.win.in @@ -0,0 +1,24 @@ +# Package information for LuaJIT to be used by pkg-config. +majver=2 +minver=1 +relver=0 +version=${majver}.${minver} +abiver=51 + +prefix=@PREFIX@ +multilib=lib +exec_prefix=${prefix} +libdir=${exec_prefix}/${multilib} +libname=lua${abiver} +includedir=${prefix}/include/luajit + +INSTALL_LMOD=${prefix}/share/lua/${abiver} +INSTALL_CMOD=${prefix}/${multilib}/lua/${abiver} + +Name: LuaJIT +Description: Just-in-time compiler for Lua +URL: https://luajit.org +Version: ${version} +Requires: +Libs: -L${libdir} -l${libname} +Cflags: -I${includedir} @LJIT_MSVC_PC_CFLAGS@ diff --git a/vcpkg-ports/ports/luajit/2026-07-20_1/msvcbuild.patch b/vcpkg-ports/ports/luajit/2026-07-20_1/msvcbuild.patch new file mode 100644 index 0000000..4571ea9 --- /dev/null +++ b/vcpkg-ports/ports/luajit/2026-07-20_1/msvcbuild.patch @@ -0,0 +1,51 @@ +diff --git a/src/msvcbuild.bat b/src/msvcbuild.bat +index fd5e7f2..df7dd0d 100644 +--- a/src/msvcbuild.bat ++++ b/src/msvcbuild.bat +@@ -16,15 +16,15 @@ + + @setlocal + @rem Add more debug flags here, e.g. DEBUGCFLAGS=/DLUA_USE_ASSERT +-@set DEBUGCFLAGS= +-@set LJCOMPILE=cl /nologo /c /O2 /W3 /D_CRT_SECURE_NO_DEPRECATE /D_CRT_STDIO_INLINE=__declspec(dllexport)__inline ++@set DEBUGCFLAGS=/Od ++@set LJCOMPILE=cl /nologo /c /O2 /W3 /D_CRT_SECURE_NO_DEPRECATE /D_CRT_STDIO_INLINE=__declspec(dllexport)__inline /Z7 /GL + @set LJDYNBUILD=/DLUA_BUILD_AS_DLL /MD + @set LJDYNBUILD_DEBUG=/DLUA_BUILD_AS_DLL /MDd + @set LJCOMPILETARGET=/Zi + @set LJLINKTYPE=/DEBUG /RELEASE + @set LJLINKTYPE_DEBUG=/DEBUG + @set LJLINKTARGET=/OPT:REF /OPT:ICF /INCREMENTAL:NO +-@set LJLINK=link /nologo ++@set LJLINK=link /nologo /LTCG + @set LJMT=mt /nologo + @set LJLIB=lib /nologo /nodefaultlib + @set DASMDIR=..\dynasm +@@ -110,10 +110,10 @@ buildvm -m folddef -o lj_folddef.h lj_opt_fold.c + @set LJLINK=%LJLINK% %LJLINKTYPE% %LJLINKTARGET% + @if "%1"=="amalg" goto :AMALGDLL + @if "%1"=="static" goto :STATIC +-%LJCOMPILE% %LJDYNBUILD% lj_*.c lib_*.c ++%LJCOMPILE% %LJDYNBUILD% lj_*.c lib_*.c /Fdlua51.pdb + @if errorlevel 1 goto :BAD + @if "%1"=="mixed" goto :STATICLIB +-%LJLINK% /DLL /OUT:%LJDLLNAME% lj_*.obj lib_*.obj ++%LJLINK% /DLL /OUT:%LJDLLNAME% lj_*.obj lib_*.obj /DEBUG /OPT:ICF /OPT:REF + @if errorlevel 1 goto :BAD + @goto :MTDLL + :STATIC +@@ -141,7 +141,7 @@ buildvm -m folddef -o lj_folddef.h lj_opt_fold.c + if exist %LJDLLNAME%.manifest^ + %LJMT% -manifest %LJDLLNAME%.manifest -outputresource:%LJDLLNAME%;2 + +-%LJCOMPILE% luajit.c ++%LJCOMPILE% luajit.c /Fdluajit.pdb + @if errorlevel 1 goto :BAD + %LJLINK% /OUT:luajit.exe luajit.obj %LJLIBNAME% + @if errorlevel 1 goto :BAD +@@ -169,4 +169,5 @@ if exist luajit.exe.manifest^ + @goto :END + :FAIL + @echo You must open a "Visual Studio Command Prompt" to run this script ++exit 1 + :END diff --git a/vcpkg-ports/ports/luajit/2026-07-20_1/pob-wide-crt.patch b/vcpkg-ports/ports/luajit/2026-07-20_1/pob-wide-crt.patch new file mode 100644 index 0000000..9a1392a --- /dev/null +++ b/vcpkg-ports/ports/luajit/2026-07-20_1/pob-wide-crt.patch @@ -0,0 +1,457 @@ +diff --git a/src/Makefile b/src/Makefile +index 4a56d1e8..26081d74 100644 +--- a/src/Makefile ++++ b/src/Makefile +@@ -514,7 +514,7 @@ LJCORE_O= lj_assert.o lj_gc.o lj_err.o lj_char.o lj_bc.o lj_obj.o lj_buf.o \ + lj_mcode.o lj_snap.o lj_record.o lj_crecord.o lj_ffrecord.o \ + lj_asm.o lj_trace.o lj_gdbjit.o \ + lj_ctype.o lj_cdata.o lj_cconv.o lj_ccall.o lj_ccallback.o \ +- lj_carith.o lj_clib.o lj_cparse.o \ ++ lj_carith.o lj_clib.o lj_cparse.o lj_utf8win.o \ + lj_lib.o lj_alloc.o lib_aux.o \ + $(LJLIB_O) lib_init.o + +diff --git a/src/lib_io.c b/src/lib_io.c +index 5659ff51..66e3196e 100644 +--- a/src/lib_io.c ++++ b/src/lib_io.c +@@ -26,6 +26,7 @@ + #include "lj_ff.h" + #include "lj_lib.h" + #include "lj_strscan.h" ++#include "lj_utf8win.h" + + /* Userdata payload for I/O file. */ + typedef struct IOFileUD { +@@ -85,7 +86,7 @@ static IOFileUD *io_file_open(lua_State *L, const char *mode) + { + const char *fname = strdata(lj_lib_checkstr(L, 1)); + IOFileUD *iof = io_file_new(L); +- iof->fp = fopen(fname, mode); ++ iof->fp = _lua_fopen(fname, mode); + if (iof->fp == NULL) + luaL_argerror(L, 1, lj_strfmt_pushf(L, "%s: %s", fname, strerror(errno))); + return iof; +@@ -414,7 +415,7 @@ LJLIB_CF(io_open) + GCstr *s = lj_lib_optstr(L, 2); + const char *mode = s ? strdata(s) : "r"; + IOFileUD *iof = io_file_new(L); +- iof->fp = fopen(fname, mode); ++ iof->fp = _lua_fopen(fname, mode); + return iof->fp != NULL ? 1 : luaL_fileresult(L, 0, fname); + } + +diff --git a/src/lib_os.c b/src/lib_os.c +index ae3fc857..ae48b6ff 100644 +--- a/src/lib_os.c ++++ b/src/lib_os.c +@@ -22,6 +22,7 @@ + #include "lj_buf.h" + #include "lj_str.h" + #include "lj_lib.h" ++#include "lj_utf8win.h" + + #if LJ_TARGET_POSIX + #include +@@ -49,7 +50,7 @@ LJLIB_CF(os_execute) + #endif + #else + const char *cmd = luaL_optstring(L, 1, NULL); +- int stat = system(cmd); ++ int stat = _lua_system(cmd); + #if LJ_52 + if (cmd) + return luaL_execresult(L, stat); +@@ -64,14 +65,14 @@ LJLIB_CF(os_execute) + LJLIB_CF(os_remove) + { + const char *filename = luaL_checkstring(L, 1); +- return luaL_fileresult(L, remove(filename) == 0, filename); ++ return luaL_fileresult(L, _lua_remove(filename) == 0, filename); + } + + LJLIB_CF(os_rename) + { + const char *fromname = luaL_checkstring(L, 1); + const char *toname = luaL_checkstring(L, 2); +- return luaL_fileresult(L, rename(fromname, toname) == 0, fromname); ++ return luaL_fileresult(L, _lua_rename(fromname, toname) == 0, fromname); + } + + LJLIB_CF(os_tmpname) +@@ -91,7 +92,7 @@ LJLIB_CF(os_tmpname) + lj_err_caller(L, LJ_ERR_OSUNIQF); + #else + char buf[L_tmpnam]; +- if (tmpnam(buf) == NULL) ++ if (_lua_tmpnam(buf) == NULL) + lj_err_caller(L, LJ_ERR_OSUNIQF); + #endif + lua_pushstring(L, buf); +@@ -104,7 +105,9 @@ LJLIB_CF(os_getenv) + #if LJ_TARGET_CONSOLE + lua_pushnil(L); + #else +- lua_pushstring(L, getenv(luaL_checkstring(L, 1))); /* if NULL push nil */ ++ char const* val = _lua_getenvcopy(luaL_checkstring(L, 1)); ++ lua_pushstring(L, val); /* if NULL push nil */ ++ _lua_getenvfree(val); + #endif + return 1; + } +diff --git a/src/lib_package.c b/src/lib_package.c +index 88218c2e..88d9b780 100644 +--- a/src/lib_package.c ++++ b/src/lib_package.c +@@ -16,6 +16,7 @@ + #include "lj_obj.h" + #include "lj_err.h" + #include "lj_lib.h" ++#include "lj_utf8win.h" + + /* ------------------------------------------------------------------------ */ + +@@ -94,15 +95,18 @@ void *LJ_WIN_LOADLIBA(const char *path) + + static void setprogdir(lua_State *L) + { +- char buff[MAX_PATH + 1]; +- char *lb; +- DWORD nsize = sizeof(buff); +- DWORD n = GetModuleFileNameA(NULL, buff, nsize); +- if (n == 0 || n == nsize || (lb = strrchr(buff, '\\')) == NULL) { ++ enum { N = 1<<16 }; ++ wchar_t buff[N]; ++ wchar_t *lb; ++ DWORD nsize = N; ++ DWORD n = GetModuleFileNameW(NULL, buff, nsize); ++ if (n == 0 || n == nsize || (lb = wcsrchr(buff, L'\\')) == NULL) { + luaL_error(L, "unable to get ModuleFileName"); + } else { +- *lb = '\0'; +- luaL_gsub(L, lua_tostring(L, -1), LUA_EXECDIR, buff); ++ *lb = L'\0'; ++ char nbuff[N]; ++ _lua_narrowtobuffer(buff, nbuff, N); ++ luaL_gsub(L, lua_tostring(L, -1), LUA_EXECDIR, nbuff); + lua_remove(L, -2); /* remove original string */ + } + } +@@ -133,7 +137,9 @@ static void ll_unloadlib(void *lib) + + static void *ll_load(lua_State *L, const char *path, int gl) + { +- HINSTANCE lib = LJ_WIN_LOADLIBA(path); ++ wchar_t pathBuf[1<<16]; ++ _lua_widentobuffer(path, pathBuf, _countof(pathBuf)); ++ HINSTANCE lib = LoadLibraryW(pathBuf); + if (lib == NULL) pusherror(L); + UNUSED(gl); + return lib; +@@ -296,7 +302,7 @@ static int lj_cf_package_unloadlib(lua_State *L) + + static int readable(const char *filename) + { +- FILE *f = fopen(filename, "r"); /* try to open file */ ++ FILE *f = _lua_fopen(filename, "r"); /* try to open file */ + if (f == NULL) return 0; /* open failed */ + fclose(f); + return 1; +@@ -554,16 +560,17 @@ static void setpath(lua_State *L, const char *fieldname, const char *envname, + const char *path = NULL; + UNUSED(envname); + #else +- const char *path = getenv(envname); ++ char const *path = _lua_getenvcopy(envname); + #endif + if (path == NULL || noenv) { + lua_pushstring(L, def); + } else { +- path = luaL_gsub(L, path, LUA_PATHSEP LUA_PATHSEP, ++ char const* lpath = luaL_gsub(L, path, LUA_PATHSEP LUA_PATHSEP, + LUA_PATHSEP AUXMARK LUA_PATHSEP); +- luaL_gsub(L, path, AUXMARK, def); ++ luaL_gsub(L, lpath, AUXMARK, def); + lua_remove(L, -2); + } ++ _lua_getenvfree(path); + setprogdir(L); + lua_setfield(L, -2, fieldname); + } +diff --git a/src/lj_clib.c b/src/lj_clib.c +index 218e9c08..4bfc71bf 100644 +--- a/src/lj_clib.c ++++ b/src/lj_clib.c +@@ -17,6 +17,7 @@ + #include "lj_cdata.h" + #include "lj_clib.h" + #include "lj_strfmt.h" ++#include "lj_utf8win.h" + + /* -- OS-specific functions ----------------------------------------------- */ + +@@ -211,7 +212,12 @@ static const char *clib_extname(lua_State *L, const char *name) + static void *clib_loadlib(lua_State *L, const char *name, int global) + { + DWORD oldwerr = GetLastError(); +- void *h = LJ_WIN_LOADLIBA(clib_extname(L, name)); ++ enum {NameSize = 1<<16}; ++ wchar_t namebuf[NameSize]; ++ void *h = NULL; ++ if (_lua_widentobuffer(clib_extname(L, name), namebuf, NameSize)) { ++ h = (void *)LoadLibraryW(namebuf); ++ } + if (!h) clib_error(L, "cannot load module " LUA_QS ": %s", name); + SetLastError(oldwerr); + UNUSED(global); +diff --git a/src/lj_load.c b/src/lj_load.c +index 24b660a8..332baa0b 100644 +--- a/src/lj_load.c ++++ b/src/lj_load.c +@@ -22,6 +22,7 @@ + #include "lj_lex.h" + #include "lj_bcdump.h" + #include "lj_parse.h" ++#include "lj_utf8win.h" + + /* -- Load Lua source code and bytecode ----------------------------------- */ + +@@ -104,7 +105,7 @@ LUALIB_API int luaL_loadfilex(lua_State *L, const char *filename, + int err = 0; + if (filename) { + chunkname = lua_pushfstring(L, "@%s", filename); +- ctx.fp = fopen(filename, "rb"); ++ ctx.fp = _lua_fopen(filename, "rb"); + if (ctx.fp == NULL) { + L->top--; + lua_pushfstring(L, "cannot open %s: %s", filename, strerror(errno)); +diff --git a/src/lj_utf8win.c b/src/lj_utf8win.c +new file mode 100644 +index 00000000..96ee913a +--- /dev/null ++++ b/src/lj_utf8win.c +@@ -0,0 +1,137 @@ ++#include "lj_utf8win.h" ++ ++#ifdef _WIN32 ++#include ++#include ++#include ++#include ++ ++enum { PathBufSize = 1<<16, ModeBufSize = 5 }; ++ ++bool _lua_narrowtobuffer(wchar_t const* srcPtr, char* dstBuf, int dstSize) ++{ ++ int cchSrc = (int)wcslen(srcPtr); ++ if (!cchSrc) { ++ dstBuf[0] = '\0'; ++ return true; ++ } ++ int cbDst = WideCharToMultiByte(CP_UTF8, WC_ERR_INVALID_CHARS, srcPtr, cchSrc, dstBuf, dstSize - 1, NULL, NULL); ++ if (!cbDst || cbDst >= dstSize) { ++ return false; ++ } ++ dstBuf[cbDst] = '\0'; ++ return true; ++} ++ ++bool _lua_widentobuffer(char const* srcPtr, wchar_t* dstBuf, int dstSize) ++{ ++ int cbSrc = (int)strlen(srcPtr); ++ if (!cbSrc) { ++ dstBuf[0] = L'\0'; ++ return true; ++ } ++ int cchDst = MultiByteToWideChar(CP_UTF8, MB_ERR_INVALID_CHARS, srcPtr, cbSrc, dstBuf, dstSize - 1); ++ if (!cchDst || cchDst >= dstSize ) { ++ return false; ++ } ++ dstBuf[cchDst] = L'\0'; ++ return true; ++} ++ ++FILE* _lua_fopen(char const* path, char const* mode) ++{ ++ if (!path || !mode) { ++ return NULL; ++ } ++ wchar_t pathBuf[PathBufSize]; ++ wchar_t modeBuf[ModeBufSize]; ++ if (!_lua_widentobuffer(path, pathBuf, PathBufSize) || ++ !_lua_widentobuffer(mode, modeBuf, ModeBufSize)) ++ { ++ return NULL; ++ } ++ FILE* fp = _wfopen(pathBuf, modeBuf); ++ return fp; ++} ++ ++char const* _lua_getenvcopy(char const* name) ++{ ++ if (!name) { ++ return NULL; ++ } ++ wchar_t nameBuf[PathBufSize]; ++ if (!_lua_widentobuffer(name, nameBuf, PathBufSize)) { ++ return NULL; ++ } ++ wchar_t* var = _wgetenv(nameBuf); ++ if (!var) { ++ return NULL; ++ } ++ char varBuf[PathBufSize]; ++ if (!_lua_narrowtobuffer(var, varBuf, PathBufSize)) { ++ return NULL; ++ } ++ size_t cbVar = strlen(varBuf) + 1; ++ char* ret = calloc(1, cbVar); ++ memcpy(ret, varBuf, cbVar); ++ return ret; ++} ++ ++void _lua_getenvfree(char const* var) ++{ ++ if (var) { ++ free((char*)var); ++ } ++} ++ ++int _lua_remove(char const* path) ++{ ++ if (!path) { ++ return -1; ++ } ++ wchar_t pathBuf[PathBufSize]; ++ if (!_lua_widentobuffer(path, pathBuf, PathBufSize)) { ++ return -1; ++ } ++ return _wremove(pathBuf); ++} ++ ++int _lua_rename(char const* oldpath, char const* newpath) ++{ ++ if (!oldpath || !newpath) { ++ return -1; ++ } ++ wchar_t oldBuf[PathBufSize]; ++ wchar_t newBuf[PathBufSize]; ++ if (!_lua_widentobuffer(oldpath, oldBuf, PathBufSize) || ++ !_lua_widentobuffer(newpath, newBuf, PathBufSize)) ++ { ++ return -1; ++ } ++ return _wrename(oldBuf, newBuf); ++} ++ ++int _lua_system(char const* cmd) ++{ ++ if (!cmd) { ++ return -1; ++ } ++ wchar_t cmdBuf[PathBufSize]; ++ if (!_lua_widentobuffer(cmd, cmdBuf, PathBufSize)) { ++ return -1; ++ } ++ return _wsystem(cmdBuf); ++} ++ ++char* _lua_tmpnam(char* s) ++{ ++ wchar_t tmpBuf[L_tmpnam]; ++ _wtmpnam(tmpBuf); ++ ++ if (!_lua_narrowtobuffer(tmpBuf, s, L_tmpnam)) { ++ return NULL; ++ } ++ return s; ++} ++ ++#endif +diff --git a/src/lj_utf8win.h b/src/lj_utf8win.h +new file mode 100644 +index 00000000..72e9ccae +--- /dev/null ++++ b/src/lj_utf8win.h +@@ -0,0 +1,28 @@ ++#ifndef LJ_UTF8_WIN_H ++#define LJ_UTF8_WIN_H ++ ++#include ++#include ++#include ++ ++#ifdef _WIN32 ++bool _lua_narrowtobuffer(wchar_t const* srcPtr, char* dstBuf, int dstSize); ++bool _lua_widentobuffer(char const* srcPtr, wchar_t* dstBuf, int dstSize); ++FILE* _lua_fopen(char const* path, char const* mode); ++char const* _lua_getenvcopy(char const* name); ++void _lua_getenvfree(char const* name); ++int _lua_remove(char const* path); ++int _lua_rename(char const* oldpath, char const* newpath); ++int _lua_system(char const* cmd); ++char* _lua_tmpnam(); ++#else ++#define _lua_fopen(path, mode) fopen(path, mode) ++#define _lua_getenvcopy(name) strdup(getenv(name)) ++#define _lua_getenvfree(name) free(name) ++#define _lua_remove(path) remove(path) ++#define _lua_rename(oldpath, newpath) rename(oldpath, newpath) ++#define _lua_system(cmd) system(cmd) ++#define _lua_tmpnam(s) tmpnam(s) ++#endif ++ ++#endif +diff --git a/src/msvcbuild.bat.rej b/src/msvcbuild.bat.rej +new file mode 100644 +index 00000000..4263730b +--- /dev/null ++++ b/src/msvcbuild.bat.rej +@@ -0,0 +1,47 @@ ++diff a/src/msvcbuild.bat b/src/msvcbuild.bat (rejected hunks) ++@@ -13,9 +13,9 @@ ++ ++ @setlocal ++ @rem Add more debug flags here, e.g. DEBUGCFLAGS=/DLUA_USE_APICHECK ++-@set DEBUGCFLAGS= ++-@set LJCOMPILE=cl /nologo /c /O2 /W3 /D_CRT_SECURE_NO_DEPRECATE /D_CRT_STDIO_INLINE=__declspec(dllexport)__inline ++-@set LJLINK=link /nologo +++@set DEBUGCFLAGS=/Od +++@set LJCOMPILE=cl /nologo /c /O2 /W3 /D_CRT_SECURE_NO_DEPRECATE /D_CRT_STDIO_INLINE=__declspec(dllexport)__inline /Z7 /GL +++@set LJLINK=link /nologo /LTCG ++ @set LJMT=mt /nologo ++ @set LJLIB=lib /nologo /nodefaultlib ++ @set DASMDIR=..\dynasm ++@@ -67,14 +67,13 @@ buildvm -m folddef -o lj_folddef.h lj_opt_fold.c ++ @if "%1" neq "debug" goto :NODEBUG ++ @shift ++ @set BUILDTYPE=debug ++-@set LJCOMPILE=%LJCOMPILE% /Zi %DEBUGCFLAGS% +++@set LJCOMPILE=%LJCOMPILE% /Z7 %DEBUGCFLAGS% ++ :NODEBUG ++-@set LJLINK=%LJLINK% /%BUILDTYPE% ++ @if "%1"=="amalg" goto :AMALGDLL ++ @if "%1"=="static" goto :STATIC ++-%LJCOMPILE% /MD /DLUA_BUILD_AS_DLL lj_*.c lib_*.c +++%LJCOMPILE% /MD /DLUA_BUILD_AS_DLL lj_*.c lib_*.c /Fdlua51.pdb ++ @if errorlevel 1 goto :BAD ++-%LJLINK% /DLL /out:%LJDLLNAME% lj_*.obj lib_*.obj +++%LJLINK% /DLL /out:%LJDLLNAME% lj_*.obj lib_*.obj /DEBUG /OPT:ICF /OPT:REF ++ @if errorlevel 1 goto :BAD ++ @goto :MTDLL ++ :STATIC ++@@ -92,7 +91,7 @@ buildvm -m folddef -o lj_folddef.h lj_opt_fold.c ++ if exist %LJDLLNAME%.manifest^ ++ %LJMT% -manifest %LJDLLNAME%.manifest -outputresource:%LJDLLNAME%;2 ++ ++-%LJCOMPILE% luajit.c +++%LJCOMPILE% luajit.c /Fdluajit.pdb ++ @if errorlevel 1 goto :BAD ++ %LJLINK% /out:luajit.exe luajit.obj %LJLIBNAME% ++ @if errorlevel 1 goto :BAD ++@@ -114,4 +113,5 @@ if exist luajit.exe.manifest^ ++ @goto :END ++ :FAIL ++ @echo You must open a "Visual Studio Command Prompt" to run this script +++exit 1 ++ :END diff --git a/vcpkg-ports/ports/luajit/2026-07-20_1/portfile.cmake b/vcpkg-ports/ports/luajit/2026-07-20_1/portfile.cmake new file mode 100644 index 0000000..aff10ba --- /dev/null +++ b/vcpkg-ports/ports/luajit/2026-07-20_1/portfile.cmake @@ -0,0 +1,109 @@ +set(extra_patches "") +if (VCPKG_TARGET_IS_OSX) + list(APPEND extra_patches 005-do-not-pass-ld-e-macosx.patch) +endif() + +vcpkg_from_github( + OUT_SOURCE_PATH SOURCE_PATH + REPO LuaJIT/LuaJIT + REF 2460b3ff93a1c955de3d62cfc825de7d68dc272e #2026-07-20 + SHA512 f7b35a4690b5bfc847dc9f94288cc7c51b7a3bd84a793b5841889ecc7dc2d60b67b3b9f31f3e713a0c8867a719c27b129289f6d90d64dccf54595e270c6c2977 + HEAD_REF v2.1 + PATCHES + msvcbuild.patch + 003-do-not-set-macosx-deployment-target.patch + pob-wide-crt.patch + ${extra_patches} +) + +vcpkg_cmake_get_vars(cmake_vars_file) +include("${cmake_vars_file}") + +if(VCPKG_DETECTED_MSVC) + # Due to lack of better MSVC cross-build support, just always build the host + # minilua tool with the target toolchain. This will work for native builds and + # for targeting x86 from x64 hosts. (UWP and ARM64 is unsupported.) + vcpkg_list(SET options) + set(PKGCONFIG_CFLAGS "") + if (VCPKG_LIBRARY_LINKAGE STREQUAL "static") + list(APPEND options "MSVCBUILD_OPTIONS=static") + else() + set(PKGCONFIG_CFLAGS "/DLUA_BUILD_AS_DLL=1") + endif() + + vcpkg_install_nmake(SOURCE_PATH "${SOURCE_PATH}" + PROJECT_NAME "${CMAKE_CURRENT_LIST_DIR}/Makefile.nmake" + OPTIONS + ${options} + ) + + configure_file("${CMAKE_CURRENT_LIST_DIR}/luajit.pc.win.in" "${CURRENT_PACKAGES_DIR}/lib/pkgconfig/luajit.pc" @ONLY) + if(NOT VCPKG_BUILD_TYPE) + configure_file("${CMAKE_CURRENT_LIST_DIR}/luajit.pc.win.in" "${CURRENT_PACKAGES_DIR}/debug/lib/pkgconfig/luajit.pc" @ONLY) + endif() + + vcpkg_copy_pdbs() +else() + vcpkg_list(SET options) + if(VCPKG_CROSSCOMPILING) + list(APPEND options + "LJARCH=${VCPKG_TARGET_ARCHITECTURE}" + "BUILDVM_X=${CURRENT_HOST_INSTALLED_DIR}/manual-tools/${PORT}/buildvm-${VCPKG_TARGET_ARCHITECTURE}${VCPKG_HOST_EXECUTABLE_SUFFIX}" + ) + endif() + + vcpkg_list(SET make_options "EXECUTABLE_SUFFIX=${VCPKG_TARGET_EXECUTABLE_SUFFIX}") + set(strip_options "") # cf. src/Makefile + if(VCPKG_TARGET_IS_OSX) + vcpkg_list(APPEND make_options "TARGET_SYS=Darwin") + set(strip_options " -x") + elseif(VCPKG_TARGET_IS_IOS) + vcpkg_list(APPEND make_options "TARGET_SYS=iOS") + set(strip_options " -x") + elseif(VCPKG_TARGET_IS_LINUX) + vcpkg_list(APPEND make_options "TARGET_SYS=Linux") + elseif(VCPKG_TARGET_IS_WINDOWS) + vcpkg_list(APPEND make_options "TARGET_SYS=Windows") + set(strip_options " --strip-unneeded") + endif() + + set(dasm_archs "") + if("buildvm-32" IN_LIST FEATURES) + string(APPEND dasm_archs " arm x86") + endif() + if("buildvm-64" IN_LIST FEATURES) + string(APPEND dasm_archs " arm64 x64") + endif() + + file(COPY "${CMAKE_CURRENT_LIST_DIR}/configure" DESTINATION "${SOURCE_PATH}") + vcpkg_configure_make(SOURCE_PATH "${SOURCE_PATH}" + COPY_SOURCE + OPTIONS + "BUILDMODE=${VCPKG_LIBRARY_LINKAGE}" + ${options} + OPTIONS_RELEASE + "DASM_ARCHS=${dasm_archs}" + ) + vcpkg_install_make( + MAKEFILE "Makefile.vcpkg" + OPTIONS + ${make_options} + "TARGET_AR=${VCPKG_DETECTED_CMAKE_AR} rcus" + "TARGET_STRIP=${VCPKG_DETECTED_CMAKE_STRIP}${strip_options}" + ) +endif() + +file(REMOVE_RECURSE + "${CURRENT_PACKAGES_DIR}/debug/include" + "${CURRENT_PACKAGES_DIR}/debug/lib/lua" + "${CURRENT_PACKAGES_DIR}/debug/share" + "${CURRENT_PACKAGES_DIR}/lib/lua" + "${CURRENT_PACKAGES_DIR}/share/lua" + "${CURRENT_PACKAGES_DIR}/share/man" +) + +vcpkg_copy_tools(TOOL_NAMES luajit AUTO_CLEAN) + +vcpkg_fixup_pkgconfig() + +vcpkg_install_copyright(FILE_LIST "${SOURCE_PATH}/COPYRIGHT") diff --git a/vcpkg-ports/ports/luajit/2026-07-20_1/vcpkg.json b/vcpkg-ports/ports/luajit/2026-07-20_1/vcpkg.json new file mode 100644 index 0000000..d6268fc --- /dev/null +++ b/vcpkg-ports/ports/luajit/2026-07-20_1/vcpkg.json @@ -0,0 +1,49 @@ +{ + "name": "luajit", + "version-date": "2026-07-20", + "port-version": 1, + "description": "LuaJIT is a Just-In-Time (JIT) compiler for the Lua programming language.", + "homepage": "https://github.com/LuaJIT/LuaJIT", + "license": "MIT", + "supports": "!uwp & !(arm64 & windows)", + "dependencies": [ + { + "name": "luajit", + "host": true, + "features": [ + "buildvm-64" + ], + "platform": "!native & (arm64 | x64) & (!windows | mingw)" + }, + { + "name": "luajit", + "host": true, + "features": [ + "buildvm-32" + ], + "platform": "!native & ((arm & !arm64) | x86) & (!windows | mingw)" + }, + { + "name": "vcpkg-cmake", + "host": true + }, + { + "name": "vcpkg-cmake-config", + "host": true + }, + { + "name": "vcpkg-cmake-get-vars", + "host": true + } + ], + "features": { + "buildvm-32": { + "description": "Install host tools for 32 bit targets", + "supports": "native & ((arm & !arm64) | x86) & (!windows | mingw)" + }, + "buildvm-64": { + "description": "Install host tools for 64 bit targets", + "supports": "native & (arm64 | x64) & (!windows | mingw)" + } + } +} diff --git a/vcpkg-ports/versions/baseline.json b/vcpkg-ports/versions/baseline.json index 4a6f04d..7b4c091 100644 --- a/vcpkg-ports/versions/baseline.json +++ b/vcpkg-ports/versions/baseline.json @@ -11,5 +11,10 @@ "glfw3": { "baseline": "3.4", "port-version": 1 }, "gli": { "baseline": "2021-07-06", "port-version": 3 }, "luajit": { "baseline": "2025-07-24", "port-version": 1 } + }, + "2026-07-22": { + "glfw3": { "baseline": "3.4", "port-version": 1 }, + "gli": { "baseline": "2021-07-06", "port-version": 3 }, + "luajit": { "baseline": "2026-07-20", "port-version": 1 } } } \ No newline at end of file diff --git a/vcpkg-ports/versions/l-/luajit.json b/vcpkg-ports/versions/l-/luajit.json index 158fee9..c45c4c4 100644 --- a/vcpkg-ports/versions/l-/luajit.json +++ b/vcpkg-ports/versions/l-/luajit.json @@ -1,5 +1,10 @@ { "versions": [ + { + "version-date": "2026-07-20", + "port-version": 1, + "path": "$/ports/luajit/2026-07-20_1" + }, { "version-date": "2025-07-24", "port-version": 1, From 835eb86a60d7ce96cbb0487ec9c27148f10cf73a Mon Sep 17 00:00:00 2001 From: LocalIdentity Date: Wed, 22 Jul 2026 06:27:01 +1000 Subject: [PATCH 2/3] Fix build to use vs 2022 instead of 2026 with windows latest --- .github/workflows/main.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index cbd8781..a191ed8 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -10,7 +10,7 @@ jobs: matrix: include: - platform: x64 - os: windows-latest + os: windows-2022 triplet: x64-windows runs-on: ${{ matrix.os }} env: From 5d5679d26daa71b463b705e5f843867d09e979c6 Mon Sep 17 00:00:00 2001 From: oat Date: Thu, 23 Jul 2026 22:11:31 +0700 Subject: [PATCH 3/3] Forward-port macOS LuaJIT port fixes to 2026-07-20_1 Upstream's LuaJIT bump adds vcpkg-ports/ports/luajit/2026-07-20_1 and points the filesystem-registry baseline at it. That directory is byte-identical to 2025-07-24_1 apart from lacking the macOS fixes this fork carries, so they would have silently stopped applying on the next build without any textual merge conflict. Restore all three in the new port: - configure: pin the installed tool symlink via INSTALL_TSYMNAME so it doesn't collide with an existing target on the osx triplet. - configure: restore the executable bit; portfile.cmake file(COPY)s the script into the source tree and the make step invokes it directly. Upstream's own 2025-07-24_1 shipped it 100755. - pob-wide-crt.patch: make _lua_getenvcopy null-safe, since strdup(NULL) on an unset env var is UB, and cast in _lua_getenvfree so free() doesn't discard a const qualifier. Both files are now byte-identical to their 2025-07-24_1 counterparts. Not build-verified: a CMake rebuild is the real test. --- vcpkg-ports/ports/luajit/2026-07-20_1/configure | 2 +- vcpkg-ports/ports/luajit/2026-07-20_1/pob-wide-crt.patch | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) mode change 100644 => 100755 vcpkg-ports/ports/luajit/2026-07-20_1/configure diff --git a/vcpkg-ports/ports/luajit/2026-07-20_1/configure b/vcpkg-ports/ports/luajit/2026-07-20_1/configure old mode 100644 new mode 100755 index 0384100..4aad2cd --- a/vcpkg-ports/ports/luajit/2026-07-20_1/configure +++ b/vcpkg-ports/ports/luajit/2026-07-20_1/configure @@ -77,7 +77,7 @@ all: done install: - \$(MAKE) install \$(COMMON_OPTIONS) + \$(MAKE) install \$(COMMON_OPTIONS) 'INSTALL_TSYMNAME=luajit-lnk' for DA in \$(DASM_ARCHS); do \\ mkdir -p "\$\${DESTDIR}\$(BUILDVM_PREFIX)"; \\ install -m 0755 "src/host/buildvm-\$\$DA\$(EXECUTABLE_SUFFIX)" "\$\${DESTDIR}\$(BUILDVM_PREFIX)/buildvm-\$\$DA\$(EXECUTABLE_SUFFIX)" || exit 1 ; \\ diff --git a/vcpkg-ports/ports/luajit/2026-07-20_1/pob-wide-crt.patch b/vcpkg-ports/ports/luajit/2026-07-20_1/pob-wide-crt.patch index 9a1392a..c332098 100644 --- a/vcpkg-ports/ports/luajit/2026-07-20_1/pob-wide-crt.patch +++ b/vcpkg-ports/ports/luajit/2026-07-20_1/pob-wide-crt.patch @@ -393,8 +393,8 @@ index 00000000..72e9ccae +char* _lua_tmpnam(); +#else +#define _lua_fopen(path, mode) fopen(path, mode) -+#define _lua_getenvcopy(name) strdup(getenv(name)) -+#define _lua_getenvfree(name) free(name) ++#define _lua_getenvcopy(name) ({ char const* _lua_ev = getenv(name); _lua_ev ? strdup(_lua_ev) : (char*)0; }) ++#define _lua_getenvfree(name) free((void*)(name)) +#define _lua_remove(path) remove(path) +#define _lua_rename(oldpath, newpath) rename(oldpath, newpath) +#define _lua_system(cmd) system(cmd)