From 82f26ab102f327c021d89d4917e60d13063dcd23 Mon Sep 17 00:00:00 2001
From: Stefan Strogin <stefan@steils.org>
Date: Tue, 5 May 2026 04:53:20 +0000
Subject: [PATCH] Allow building against system Lua

---
 sys/unix/Makefile.src |  6 ++++++
 sys/unix/Makefile.top | 17 +++++++++++++++++
 2 files changed, 23 insertions(+)

diff --git a/sys/unix/Makefile.src b/sys/unix/Makefile.src
index 863fa096c..c5004de5a 100644
--- a/sys/unix/Makefile.src
+++ b/sys/unix/Makefile.src
@@ -503,10 +503,16 @@ MAKEDEFS = ../util/makedefs
 
 # -lm required by lua
 LUA_VERSION ?=5.4.8
+SYSTEM_LUA ?=0
+LUA_LIBS ?=
 LUABASE = liblua-$(LUA_VERSION).a
 LUALIB = ../lib/lua/$(LUABASE)
 LUALIBS = $(LUALIB) -lm $(DLLIB)
 LUAHEADERS = lib/lua-$(LUA_VERSION)/src
+ifeq ($(SYSTEM_LUA),1)
+LUALIB =
+LUALIBS = $(LUA_LIBS)
+endif
 
 # timestamp files to reduce `make' overhead and shorten .o dependency lists
 CONFIG_H = ../src/config.h-t
diff --git a/sys/unix/Makefile.top b/sys/unix/Makefile.top
index 5ecca3232..47e455a3e 100644
--- a/sys/unix/Makefile.top
+++ b/sys/unix/Makefile.top
@@ -122,12 +122,17 @@ RECOVERBIN = recover
 
 # Lua
 LUAHEADERS = lib/lua-$(LUA_VERSION)/src
+SYSTEM_LUA ?=0
+LUA_HEADER_DIR ?=/usr/include
 LUATESTTARGET = $(LUAHEADERS)/lua.h
 LUATOP = $(LUAHEADERS)
 LUAMAKEFLAGS = CC='$(CC)' SYSCFLAGS='$(SYSCFLAGS)'
 LUA2NHTOP = ../../..
 LUABASELIB = liblua-$(LUA_VERSION).a
 TOPLUALIB = lib/lua/$(LUABASELIB)
+ifeq ($(SYSTEM_LUA),1)
+TOPLUALIB =
+endif
 
 ALLDEP = $(PRECHECK) $(GAME) recover Guidebook $(VARDAT) spec_levs check-dlb
 
@@ -141,6 +146,17 @@ $(GAME): lua_support
 
 lua_support: include/nhlua.h
 	@true
+ifeq ($(SYSTEM_LUA),1)
+include/nhlua.h:
+	echo '/* nhlua.h - generated by top Makefile */' > $@
+	@echo '#include <lua.h>' >> $@
+	@sed -e '/(lua_error)/!d' \
+		-e '/(lua_error)/s/LUA_API/ATTRNORETURN LUA_API/1' \
+		-e '/(lua_error)/s/;/ NORETURN;/1' < $(LUA_HEADER_DIR)/lua.h >> $@
+	@echo '#include <lualib.h>' >> $@
+	@echo '#include <lauxlib.h>' >> $@
+	@echo '/*nhlua.h*/' >> $@
+else
 $(LUATOP)/liblua.a: $(LUAHEADERS)/lua.h
 	( cd $(LUATOP) && make $(LUAMAKEFLAGS) a )
 $(TOPLUALIB): $(LUATOP)/liblua.a
@@ -160,6 +176,7 @@ include/nhlua.h: $(TOPLUALIB)
 lib/lua-$(LUA_VERSION)/src/lua.h:
 	@echo "Please do 'make fetch-lua' in the top directory to obtain lua-$(LUA_VERSION)"
 	@false
+endif
 luabin:
 	( cd $(LUATOP) \
 	  && make $(LUAMAKEFILES) all && cd $(LUA2NHTOP) )
-- 
2.54.0

