aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMike Pall <mike>2023-08-21 03:06:26 +0200
committerMike Pall <mike>2023-08-21 03:06:26 +0200
commit50e0fa03c48cb9af03c3efdc3100f12687651a2e (patch)
treead5e693de66cc012374445575b70379bc6047123
parentc34594681909cac98d44629863df2c7afd93eaf0 (diff)
downloadluajit-50e0fa03c48cb9af03c3efdc3100f12687651a2e.tar.gz
luajit-50e0fa03c48cb9af03c3efdc3100f12687651a2e.tar.bz2
luajit-50e0fa03c48cb9af03c3efdc3100f12687651a2e.zip
Switch build system to rolling releases.v2.0.ROLLING
-rw-r--r--Makefile28
-rw-r--r--etc/luajit.pc2
-rw-r--r--src/.gitignore2
-rw-r--r--src/Makefile23
-rw-r--r--src/host/buildvm.c1
-rw-r--r--src/host/genversion.lua43
-rw-r--r--src/jit/bc.lua1
-rw-r--r--src/jit/bcsave.lua2
-rw-r--r--src/jit/dump.lua1
-rw-r--r--src/jit/v.lua1
-rw-r--r--src/lib_jit.c2
-rw-r--r--src/luaconf.h2
-rw-r--r--src/luajit_rolling.h (renamed from src/luajit.h)6
13 files changed, 87 insertions, 27 deletions
diff --git a/Makefile b/Makefile
index 9fc0032c..792d7e56 100644
--- a/Makefile
+++ b/Makefile
@@ -15,10 +15,16 @@
15 15
16MAJVER= 2 16MAJVER= 2
17MINVER= 0 17MINVER= 0
18RELVER= 5
19VERSION= $(MAJVER).$(MINVER).$(RELVER)
20ABIVER= 5.1 18ABIVER= 5.1
21 19
20# LuaJIT uses rolling releases. The release version is based on the time of
21# the latest git commit. The 'git' command must be available during the build.
22RELVER= $(shell cat src/luajit_relver.txt 2>/dev/null || : )
23# Note: setting it with := doesn't work, since it will change during the build.
24
25MMVERSION= $(MAJVER).$(MINVER)
26VERSION= $(MMVERSION).$(RELVER)
27
22############################################################################## 28##############################################################################
23# 29#
24# Change the installation path as needed. This automatically adjusts 30# Change the installation path as needed. This automatically adjusts
@@ -32,10 +38,10 @@ DPREFIX= $(DESTDIR)$(PREFIX)
32INSTALL_BIN= $(DPREFIX)/bin 38INSTALL_BIN= $(DPREFIX)/bin
33INSTALL_LIB= $(DPREFIX)/$(MULTILIB) 39INSTALL_LIB= $(DPREFIX)/$(MULTILIB)
34INSTALL_SHARE= $(DPREFIX)/share 40INSTALL_SHARE= $(DPREFIX)/share
35INSTALL_DEFINC= $(DPREFIX)/include/luajit-$(MAJVER).$(MINVER) 41INSTALL_DEFINC= $(DPREFIX)/include/luajit-$(MMVERSION)
36INSTALL_INC= $(INSTALL_DEFINC) 42INSTALL_INC= $(INSTALL_DEFINC)
37 43
38INSTALL_LJLIBD= $(INSTALL_SHARE)/luajit-$(VERSION) 44INSTALL_LJLIBD= $(INSTALL_SHARE)/luajit-$(MMVERSION)
39INSTALL_JITLIB= $(INSTALL_LJLIBD)/jit 45INSTALL_JITLIB= $(INSTALL_LJLIBD)/jit
40INSTALL_LMODD= $(INSTALL_SHARE)/lua 46INSTALL_LMODD= $(INSTALL_SHARE)/lua
41INSTALL_LMOD= $(INSTALL_LMODD)/$(ABIVER) 47INSTALL_LMOD= $(INSTALL_LMODD)/$(ABIVER)
@@ -49,10 +55,10 @@ INSTALL_TSYMNAME= luajit
49INSTALL_ANAME= libluajit-$(ABIVER).a 55INSTALL_ANAME= libluajit-$(ABIVER).a
50INSTALL_SOSHORT1= libluajit-$(ABIVER).so 56INSTALL_SOSHORT1= libluajit-$(ABIVER).so
51INSTALL_SOSHORT2= libluajit-$(ABIVER).so.$(MAJVER) 57INSTALL_SOSHORT2= libluajit-$(ABIVER).so.$(MAJVER)
52INSTALL_SONAME= $(INSTALL_SOSHORT2).$(MINVER).$(RELVER) 58INSTALL_SONAME= libluajit-$(ABIVER).so.$(VERSION)
53INSTALL_DYLIBSHORT1= libluajit-$(ABIVER).dylib 59INSTALL_DYLIBSHORT1= libluajit-$(ABIVER).dylib
54INSTALL_DYLIBSHORT2= libluajit-$(ABIVER).$(MAJVER).dylib 60INSTALL_DYLIBSHORT2= libluajit-$(ABIVER).$(MAJVER).dylib
55INSTALL_DYLIBNAME= libluajit-$(ABIVER).$(MAJVER).$(MINVER).$(RELVER).dylib 61INSTALL_DYLIBNAME= libluajit-$(ABIVER).$(VERSION).dylib
56INSTALL_PCNAME= luajit.pc 62INSTALL_PCNAME= luajit.pc
57 63
58INSTALL_STATIC= $(INSTALL_LIB)/$(INSTALL_ANAME) 64INSTALL_STATIC= $(INSTALL_LIB)/$(INSTALL_ANAME)
@@ -77,7 +83,8 @@ INSTALL_F= install -m 0644
77UNINSTALL= $(RM) 83UNINSTALL= $(RM)
78LDCONFIG= ldconfig -n 2>/dev/null 84LDCONFIG= ldconfig -n 2>/dev/null
79SED_PC= sed -e "s|^prefix=.*|prefix=$(PREFIX)|" \ 85SED_PC= sed -e "s|^prefix=.*|prefix=$(PREFIX)|" \
80 -e "s|^multilib=.*|multilib=$(MULTILIB)|" 86 -e "s|^multilib=.*|multilib=$(MULTILIB)|" \
87 -e "s|^relver=.*|relver=$(RELVER)|"
81ifneq ($(INSTALL_DEFINC),$(INSTALL_INC)) 88ifneq ($(INSTALL_DEFINC),$(INSTALL_INC))
82 SED_PC+= -e "s|^includedir=.*|includedir=$(INSTALL_INC)|" 89 SED_PC+= -e "s|^includedir=.*|includedir=$(INSTALL_INC)|"
83endif 90endif
@@ -110,9 +117,9 @@ endif
110INSTALL_DEP= src/luajit 117INSTALL_DEP= src/luajit
111 118
112default all $(INSTALL_DEP): 119default all $(INSTALL_DEP):
113 @echo "==== Building LuaJIT $(VERSION) ====" 120 @echo "==== Building LuaJIT $(MMVERSION) ===="
114 $(MAKE) -C src 121 $(MAKE) -C src
115 @echo "==== Successfully built LuaJIT $(VERSION) ====" 122 @echo "==== Successfully built LuaJIT $(MMVERSION) ===="
116 123
117install: $(INSTALL_DEP) 124install: $(INSTALL_DEP)
118 @echo "==== Installing LuaJIT $(VERSION) to $(PREFIX) ====" 125 @echo "==== Installing LuaJIT $(VERSION) to $(PREFIX) ===="
@@ -150,8 +157,9 @@ uninstall:
150############################################################################## 157##############################################################################
151 158
152amalg: 159amalg:
153 @echo "Building LuaJIT $(VERSION)" 160 @echo "==== Building LuaJIT $(MMVERSION) (amalgamation) ===="
154 $(MAKE) -C src amalg 161 $(MAKE) -C src amalg
162 @echo "==== Successfully built LuaJIT $(MMVERSION) (amalgamation) ===="
155 163
156clean: 164clean:
157 $(MAKE) -C src clean 165 $(MAKE) -C src clean
diff --git a/etc/luajit.pc b/etc/luajit.pc
index 9bac3a8b..68f8d5cc 100644
--- a/etc/luajit.pc
+++ b/etc/luajit.pc
@@ -1,7 +1,7 @@
1# Package information for LuaJIT to be used by pkg-config. 1# Package information for LuaJIT to be used by pkg-config.
2majver=2 2majver=2
3minver=0 3minver=0
4relver=5 4relver=ROLLING
5version=${majver}.${minver}.${relver} 5version=${majver}.${minver}.${relver}
6abiver=5.1 6abiver=5.1
7 7
diff --git a/src/.gitignore b/src/.gitignore
index fc94e82c..19f2a00e 100644
--- a/src/.gitignore
+++ b/src/.gitignore
@@ -1,4 +1,6 @@
1luajit 1luajit
2luajit.h
3luajit_relver.txt
2lj_bcdef.h 4lj_bcdef.h
3lj_ffdef.h 5lj_ffdef.h
4lj_libdef.h 6lj_libdef.h
diff --git a/src/Makefile b/src/Makefile
index aac78beb..e6954a95 100644
--- a/src/Makefile
+++ b/src/Makefile
@@ -12,7 +12,6 @@
12 12
13MAJVER= 2 13MAJVER= 2
14MINVER= 0 14MINVER= 0
15RELVER= 5
16ABIVER= 5.1 15ABIVER= 5.1
17NODOTABIVER= 51 16NODOTABIVER= 51
18 17
@@ -308,7 +307,7 @@ ifeq (Darwin,$(TARGET_SYS))
308 TARGET_STRIP+= -x 307 TARGET_STRIP+= -x
309 TARGET_XSHLDFLAGS= -dynamiclib -single_module -undefined dynamic_lookup -fPIC 308 TARGET_XSHLDFLAGS= -dynamiclib -single_module -undefined dynamic_lookup -fPIC
310 TARGET_DYNXLDOPTS= 309 TARGET_DYNXLDOPTS=
311 TARGET_XSHLDFLAGS+= -install_name $(TARGET_DYLIBPATH) -compatibility_version $(MAJVER).$(MINVER) -current_version $(MAJVER).$(MINVER).$(RELVER) 310 TARGET_XSHLDFLAGS+= -install_name $(TARGET_DYLIBPATH) -compatibility_version $(MAJVER).$(MINVER) -current_version $(MAJVER).$(MINVER).255
312 ifeq (x64,$(TARGET_LJARCH)) 311 ifeq (x64,$(TARGET_LJARCH))
313 TARGET_XLDFLAGS+= -pagezero_size 10000 -image_base 100000000 312 TARGET_XLDFLAGS+= -pagezero_size 10000 -image_base 100000000
314 TARGET_XSHLDFLAGS+= -image_base 7fff04c4a000 313 TARGET_XSHLDFLAGS+= -image_base 7fff04c4a000
@@ -318,7 +317,7 @@ ifeq (iOS,$(TARGET_SYS))
318 TARGET_STRIP+= -x 317 TARGET_STRIP+= -x
319 TARGET_XSHLDFLAGS= -dynamiclib -single_module -undefined dynamic_lookup -fPIC 318 TARGET_XSHLDFLAGS= -dynamiclib -single_module -undefined dynamic_lookup -fPIC
320 TARGET_DYNXLDOPTS= 319 TARGET_DYNXLDOPTS=
321 TARGET_XSHLDFLAGS+= -install_name $(TARGET_DYLIBPATH) -compatibility_version $(MAJVER).$(MINVER) -current_version $(MAJVER).$(MINVER).$(RELVER) 320 TARGET_XSHLDFLAGS+= -install_name $(TARGET_DYLIBPATH) -compatibility_version $(MAJVER).$(MINVER) -current_version $(MAJVER).$(MINVER).255
322else 321else
323 ifneq (SunOS,$(TARGET_SYS)) 322 ifneq (SunOS,$(TARGET_SYS))
324 ifneq (PS3,$(TARGET_SYS)) 323 ifneq (PS3,$(TARGET_SYS))
@@ -367,10 +366,11 @@ MINILUA_O= host/minilua.o
367MINILUA_LIBS= -lm 366MINILUA_LIBS= -lm
368MINILUA_T= host/minilua 367MINILUA_T= host/minilua
369MINILUA_X= $(MINILUA_T) 368MINILUA_X= $(MINILUA_T)
369MINILUA_DEP=
370 370
371ifeq (,$(HOST_LUA)) 371ifeq (,$(HOST_LUA))
372 HOST_LUA= $(MINILUA_X) 372 HOST_LUA= $(MINILUA_X)
373 DASM_DEP= $(MINILUA_T) 373 MINILUA_DEP= $(MINILUA_T)
374endif 374endif
375 375
376DASM_DIR= ../dynasm 376DASM_DIR= ../dynasm
@@ -445,6 +445,10 @@ endif
445DASM_FLAGS= $(DASM_XFLAGS) $(DASM_AFLAGS) 445DASM_FLAGS= $(DASM_XFLAGS) $(DASM_AFLAGS)
446DASM_DASC= vm_$(DASM_ARCH).dasc 446DASM_DASC= vm_$(DASM_ARCH).dasc
447 447
448GIT= git
449GIT_RELVER= [ -d ../.git ] && $(GIT) show -s --format=%ct >luajit_relver.txt 2>/dev/null || cat ../.relver >luajit_relver.txt 2>/dev/null || :
450GIT_DEP= $(wildcard ../.git/HEAD ../.git/refs/heads/*)
451
448BUILDVM_O= host/buildvm.o host/buildvm_asm.o host/buildvm_peobj.o \ 452BUILDVM_O= host/buildvm.o host/buildvm_asm.o host/buildvm_peobj.o \
449 host/buildvm_lib.o host/buildvm_fold.o 453 host/buildvm_lib.o host/buildvm_fold.o
450BUILDVM_T= host/buildvm 454BUILDVM_T= host/buildvm
@@ -488,8 +492,8 @@ LUAJIT_T= luajit
488 492
489ALL_T= $(LUAJIT_T) $(LUAJIT_A) $(LUAJIT_SO) $(HOST_T) 493ALL_T= $(LUAJIT_T) $(LUAJIT_A) $(LUAJIT_SO) $(HOST_T)
490ALL_HDRGEN= lj_bcdef.h lj_ffdef.h lj_libdef.h lj_recdef.h lj_folddef.h \ 494ALL_HDRGEN= lj_bcdef.h lj_ffdef.h lj_libdef.h lj_recdef.h lj_folddef.h \
491 host/buildvm_arch.h 495 host/buildvm_arch.h luajit.h
492ALL_GEN= $(LJVM_S) $(ALL_HDRGEN) $(LIB_VMDEFP) 496ALL_GEN= $(LJVM_S) $(ALL_HDRGEN) luajit_relver.txt $(LIB_VMDEFP)
493WIN_RM= *.obj *.lib *.exp *.dll *.exe *.manifest *.pdb *.ilk 497WIN_RM= *.obj *.lib *.exp *.dll *.exe *.manifest *.pdb *.ilk
494ALL_RM= $(ALL_T) $(ALL_GEN) *.o host/*.o $(WIN_RM) 498ALL_RM= $(ALL_T) $(ALL_GEN) *.o host/*.o $(WIN_RM)
495 499
@@ -610,7 +614,12 @@ $(MINILUA_T): $(MINILUA_O)
610 $(E) "HOSTLINK $@" 614 $(E) "HOSTLINK $@"
611 $(Q)$(HOST_CC) $(HOST_ALDFLAGS) -o $@ $(MINILUA_O) $(MINILUA_LIBS) $(HOST_ALIBS) 615 $(Q)$(HOST_CC) $(HOST_ALDFLAGS) -o $@ $(MINILUA_O) $(MINILUA_LIBS) $(HOST_ALIBS)
612 616
613host/buildvm_arch.h: $(DASM_DASC) $(DASM_DEP) lj_arch.h lua.h luaconf.h 617luajit.h: $(MINILUA_DEP) $(GIT_DEP) luajit_rolling.h
618 $(E) "VERSION $@"
619 $(Q)$(GIT_RELVER)
620 $(Q)$(HOST_LUA) host/genversion.lua
621
622host/buildvm_arch.h: $(DASM_DASC) $(MINILUA_DEP) lj_arch.h lua.h luaconf.h
614 $(E) "DYNASM $@" 623 $(E) "DYNASM $@"
615 $(Q)$(DASM) $(DASM_FLAGS) -o $@ $(DASM_DASC) 624 $(Q)$(DASM) $(DASM_FLAGS) -o $@ $(DASM_DASC)
616 625
diff --git a/src/host/buildvm.c b/src/host/buildvm.c
index ef393ff8..39c2bc24 100644
--- a/src/host/buildvm.c
+++ b/src/host/buildvm.c
@@ -320,6 +320,7 @@ static void emit_vmdef(BuildCtx *ctx)
320 char buf[80]; 320 char buf[80];
321 int i; 321 int i;
322 fprintf(ctx->fp, "-- This is a generated file. DO NOT EDIT!\n\n"); 322 fprintf(ctx->fp, "-- This is a generated file. DO NOT EDIT!\n\n");
323 fprintf(ctx->fp, "assert(require(\"jit\").version == \"%s\", \"LuaJIT core/library version mismatch\")\n\n", LUAJIT_VERSION);
323 fprintf(ctx->fp, "module(...)\n\n"); 324 fprintf(ctx->fp, "module(...)\n\n");
324 325
325 fprintf(ctx->fp, "bcnames = \""); 326 fprintf(ctx->fp, "bcnames = \"");
diff --git a/src/host/genversion.lua b/src/host/genversion.lua
new file mode 100644
index 00000000..a38cec56
--- /dev/null
+++ b/src/host/genversion.lua
@@ -0,0 +1,43 @@
1----------------------------------------------------------------------------
2-- Lua script to embed the rolling release version in luajit.h.
3----------------------------------------------------------------------------
4-- Copyright (C) 2005-2023 Mike Pall. All rights reserved.
5-- Released under the MIT license. See Copyright Notice in luajit.h
6----------------------------------------------------------------------------
7
8local FILE_INPUT_H = "luajit_rolling.h"
9local FILE_INPUT_R = "luajit_relver.txt"
10local FILE_OUTPUT_H = "luajit.h"
11
12local function file_read(file)
13 local fp = assert(io.open(file, "rb"), "run from the wrong directory")
14 local data = assert(fp:read("*a"))
15 fp:close()
16 return data
17end
18
19local function file_write_mod(file, data)
20 local fp = io.open(file, "rb")
21 if fp then
22 local odata = assert(fp:read("*a"))
23 fp:close()
24 if odata == data then return end
25 end
26 fp = assert(io.open(file, "wb"))
27 assert(fp:write(data))
28 assert(fp:close())
29end
30
31local text = file_read(FILE_INPUT_H)
32local relver = file_read(FILE_INPUT_R):match("(%d+)")
33
34if relver then
35 text = text:gsub("ROLLING", relver)
36else
37 io.stderr:write([[
38**** WARNING Cannot determine rolling release version from git log.
39**** WARNING The 'git' command must be available during the build.
40]])
41end
42
43file_write_mod(FILE_OUTPUT_H, text)
diff --git a/src/jit/bc.lua b/src/jit/bc.lua
index b128d35a..4b384012 100644
--- a/src/jit/bc.lua
+++ b/src/jit/bc.lua
@@ -41,7 +41,6 @@
41 41
42-- Cache some library functions and objects. 42-- Cache some library functions and objects.
43local jit = require("jit") 43local jit = require("jit")
44assert(jit.version_num == 20005, "LuaJIT core/library version mismatch")
45local jutil = require("jit.util") 44local jutil = require("jit.util")
46local vmdef = require("jit.vmdef") 45local vmdef = require("jit.vmdef")
47local bit = require("bit") 46local bit = require("bit")
diff --git a/src/jit/bcsave.lua b/src/jit/bcsave.lua
index fcd80334..55fae993 100644
--- a/src/jit/bcsave.lua
+++ b/src/jit/bcsave.lua
@@ -11,7 +11,7 @@
11------------------------------------------------------------------------------ 11------------------------------------------------------------------------------
12 12
13local jit = require("jit") 13local jit = require("jit")
14assert(jit.version_num == 20005, "LuaJIT core/library version mismatch") 14assert(jit.version_num == 20099, "LuaJIT core/library version mismatch")
15local bit = require("bit") 15local bit = require("bit")
16 16
17-- Symbol name prefix for LuaJIT bytecode. 17-- Symbol name prefix for LuaJIT bytecode.
diff --git a/src/jit/dump.lua b/src/jit/dump.lua
index 87950cb2..86f11e26 100644
--- a/src/jit/dump.lua
+++ b/src/jit/dump.lua
@@ -55,7 +55,6 @@
55 55
56-- Cache some library functions and objects. 56-- Cache some library functions and objects.
57local jit = require("jit") 57local jit = require("jit")
58assert(jit.version_num == 20005, "LuaJIT core/library version mismatch")
59local jutil = require("jit.util") 58local jutil = require("jit.util")
60local vmdef = require("jit.vmdef") 59local vmdef = require("jit.vmdef")
61local funcinfo, funcbc = jutil.funcinfo, jutil.funcbc 60local funcinfo, funcbc = jutil.funcinfo, jutil.funcbc
diff --git a/src/jit/v.lua b/src/jit/v.lua
index 19b6949d..29edcf2b 100644
--- a/src/jit/v.lua
+++ b/src/jit/v.lua
@@ -59,7 +59,6 @@
59 59
60-- Cache some library functions and objects. 60-- Cache some library functions and objects.
61local jit = require("jit") 61local jit = require("jit")
62assert(jit.version_num == 20005, "LuaJIT core/library version mismatch")
63local jutil = require("jit.util") 62local jutil = require("jit.util")
64local vmdef = require("jit.vmdef") 63local vmdef = require("jit.vmdef")
65local funcinfo, traceinfo = jutil.funcinfo, jutil.traceinfo 64local funcinfo, traceinfo = jutil.funcinfo, jutil.traceinfo
diff --git a/src/lib_jit.c b/src/lib_jit.c
index c2f1ee7c..04a564c7 100644
--- a/src/lib_jit.c
+++ b/src/lib_jit.c
@@ -648,7 +648,7 @@ LUALIB_API int luaopen_jit(lua_State *L)
648{ 648{
649 lua_pushliteral(L, LJ_OS_NAME); 649 lua_pushliteral(L, LJ_OS_NAME);
650 lua_pushliteral(L, LJ_ARCH_NAME); 650 lua_pushliteral(L, LJ_ARCH_NAME);
651 lua_pushinteger(L, LUAJIT_VERSION_NUM); 651 lua_pushinteger(L, LUAJIT_VERSION_NUM); /* Deprecated. */
652 lua_pushliteral(L, LUAJIT_VERSION); 652 lua_pushliteral(L, LUAJIT_VERSION);
653 LJ_LIB_REG(L, LUA_JITLIBNAME, jit); 653 LJ_LIB_REG(L, LUA_JITLIBNAME, jit);
654#ifndef LUAJIT_DISABLE_JITUTIL 654#ifndef LUAJIT_DISABLE_JITUTIL
diff --git a/src/luaconf.h b/src/luaconf.h
index c1c9b4d3..8fc3eee5 100644
--- a/src/luaconf.h
+++ b/src/luaconf.h
@@ -37,7 +37,7 @@
37#endif 37#endif
38#define LUA_LROOT "/usr/local" 38#define LUA_LROOT "/usr/local"
39#define LUA_LUADIR "/lua/5.1/" 39#define LUA_LUADIR "/lua/5.1/"
40#define LUA_LJDIR "/luajit-2.0.5/" 40#define LUA_LJDIR "/luajit-2.0/"
41 41
42#ifdef LUA_ROOT 42#ifdef LUA_ROOT
43#define LUA_JROOT LUA_ROOT 43#define LUA_JROOT LUA_ROOT
diff --git a/src/luajit.h b/src/luajit_rolling.h
index 8b09f376..27368836 100644
--- a/src/luajit.h
+++ b/src/luajit_rolling.h
@@ -30,9 +30,9 @@
30 30
31#include "lua.h" 31#include "lua.h"
32 32
33#define LUAJIT_VERSION "LuaJIT 2.0.5" 33#define LUAJIT_VERSION "LuaJIT 2.0.ROLLING"
34#define LUAJIT_VERSION_NUM 20005 /* Version 2.0.5 = 02.00.05. */ 34#define LUAJIT_VERSION_NUM 20099 /* Deprecated. */
35#define LUAJIT_VERSION_SYM luaJIT_version_2_0_5 35#define LUAJIT_VERSION_SYM luaJIT_version_2_0_ROLLING
36#define LUAJIT_COPYRIGHT "Copyright (C) 2005-2023 Mike Pall" 36#define LUAJIT_COPYRIGHT "Copyright (C) 2005-2023 Mike Pall"
37#define LUAJIT_URL "https://luajit.org/" 37#define LUAJIT_URL "https://luajit.org/"
38 38