From c25d166cba7bbe8bef5737eb3b14598bbdb5fed6 Mon Sep 17 00:00:00 2001 From: Christopher Head Date: Tue, 23 Mar 2021 21:57:57 -0700 Subject: [PATCH] Add infrastructure for multi-file programs --- infrastructure/Makefile | 27 ++++++++++++++++++++++++++ infrastructure/combine | 42 +++++++++++++++++++++++++++++++++++++++++ luacheckrc | 8 +++++++- 3 files changed, 76 insertions(+), 1 deletion(-) create mode 100644 infrastructure/Makefile create mode 100755 infrastructure/combine diff --git a/infrastructure/Makefile b/infrastructure/Makefile new file mode 100644 index 0000000..a269ce3 --- /dev/null +++ b/infrastructure/Makefile @@ -0,0 +1,27 @@ +ALL_SOURCES := $(filter-out combined.lua,$(wildcard *.lua)) +MAIN_SOURCE := main.lua +TEST_SOURCES := $(filter test-%.lua,$(ALL_SOURCES)) +MODULE_SOURCES := $(filter-out $(MAIN_SOURCE) $(TEST_SOURCES),$(ALL_SOURCES)) + +.PHONY : world +world : combined.lua + +combined.lua : $(MAIN_SOURCE) $(MODULE_SOURCES) ../infrastructure/combine + ../infrastructure/combine $(MAIN_SOURCE) $(MODULE_SOURCES) > $@ + +.PHONY : check +check : luacheck $(TEST_SOURCES:test-%.lua=check-%) + +.PHONY : luacheck +luacheck : $(ALL_SOURCES) + luacheck $+ + +.PHONY : $(TEST_SOURCES:test-%.lua=check-%) +$(TEST_SOURCES:test-%.lua=check-%) : check-% : $(ALL_SOURCES) + luajit $(@:check-%=test-%.lua) + +.PHONY : clean +clean : + $(RM) combined.lua + +.DELETE_ON_ERROR : diff --git a/infrastructure/combine b/infrastructure/combine new file mode 100755 index 0000000..b4bb19b --- /dev/null +++ b/infrastructure/combine @@ -0,0 +1,42 @@ +#!/bin/bash + +set -e +set -u +set -o pipefail + +cat << 'EOF' +local require_cache = {} +local function require(module_name) + local entry = require_cache[module_name] + if type(entry) == "function" then + entry = entry(module_name) + require_cache[module_name] = entry + end + return entry +end + +EOF + +main_file="$1" +shift + +for file in "$@"; do + echo 'require_cache["'"${file%.lua}"'"] = function(...)' + echo "--[[" + echo "BEGIN CONTENTS OF ${file}" + echo "]]" + cat "${file}" + echo "--[[" + echo "END CONTENTS OF ${file}" + echo "]]" + echo "end" + echo +done + +echo "--[[" +echo "BEGIN CONTENTS OF ${main_file}" +echo "]]" +cat "${main_file}" +echo "--[[" +echo "END CONTENTS OF ${main_file}" +echo "]]" diff --git a/luacheckrc b/luacheckrc index 21a9ea7..781f0ff 100644 --- a/luacheckrc +++ b/luacheckrc @@ -121,5 +121,11 @@ stds.luacontrollerwriteable = { }, } -files["*.lua"].std = "sandboxcommon+luacontroller" +stds.combinescript = { + read_globals = { + "require", + } +} + +files["*.lua"].std = "sandboxcommon+luacontroller+combinescript" files["test-*.lua"].std = "sandboxcommonwriteable+luacontrollerwriteable+luajit"