# Shared groundwork for the t05xx scripts, sourced after setup.sh from inside # the trash directory. It locates the shipped extensions and the unit checks # beside this file, finds the standalone Lua interpreters the checks can run # under, and offers a probe that asks the Lua inside the cgit binary itself # whether a module is available to it, since that interpreter can differ from # every standalone one on the path. EXTENSIONS_DIRECTORY=$(cd "$TEST_OUTPUT_DIRECTORY/../custom/extensions" && pwd) EXT_TEST_DIRECTORY=$(cd "$TEST_OUTPUT_DIRECTORY/extensions" && pwd) # Prints the Lua version a binary reports, like 5.1, which is also what # LuaJIT reports. ext_lua_version() { "$1" -e 'io.write(string.match(_VERSION, "%d+%.%d+"))' 2>/dev/null } # Prints the interpreters found on the path whose version falls between 5.1 # and the given 5.x ceiling, one per line, so a script is never failed on a # version it never claimed to run on. ext_lua_interpreters() { ext_lua_ceiling=$1 for ext_lua_bin in luajit lua5.1 lua5.2 lua5.3 lua5.4 lua5.5 lua do command -v "$ext_lua_bin" >/dev/null 2>&1 || continue case "$(ext_lua_version "$ext_lua_bin")" in 5.[1-9]) ext_lua_minor=$(ext_lua_version "$ext_lua_bin") ext_lua_minor=${ext_lua_minor#5.} test "$ext_lua_minor" -le "$ext_lua_ceiling" && echo "$ext_lua_bin" ;; esac done } # Asks whether cgit's own Lua can require every module named, by pointing a # throwaway commit-filter at the given repository and reading its answer off # the rendered commit page. Filters need a page to run on, which is why a # repository has to be handed in. cgit_lua_probe() { test "$CGIT_HAS_LUA" -eq 1 || return 1 cgit_lua_probe_gitdir=$1 shift { echo "function filter_open(...) end" echo "function filter_write(str) end" echo "function filter_close()" echo "local ok = true" for cgit_lua_probe_module in "$@" do echo "if not pcall(require, '$cgit_lua_probe_module') then" echo "ok = false" echo "end" done echo "if ok then html('LUA_PROBE_YES') else html('LUA_PROBE_NO') end" echo "return 0" echo "end" } >lua-probe.lua cat >lua-probe-cgitrc <