{"record":{"id":"f6c73aa44e1e7713","repo":"mame/quine-relay","slug":"1-interpreter-not-found","errorCode":null,"errorMessage":"$(1) interpreter not found!","messagePattern":"\\$\\(1\\) interpreter not found!","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"Makefile","lineNumber":7,"sourceCode":"MAKEFLAGS += --no-print-directory\n\nPATH := $(CURDIR)/vendor/local/bin:/usr/games:$(PATH)\nCLASSPATH := .\n\nfind_any0 = $(firstword $(foreach x,$(1),$(if $(shell which $(x) 2>/dev/null),$(x),)))\ncheck = $(if $(2),$(2),$(error $(1) interpreter not found!))\nfind_any = $(call check,$(1),$(call find_any0,$(2)))\n\nJAVASCRIPT   := $(call find_any,JavaScript,nodejs node js)\nSCHEME       := $(call find_any,Scheme,guile csi gosh)\nGBS          := $(call find_any,Gambas script,gbs3 gbs2 gba3)\nWASI_RUNTIME := $(call find_any,WASI runtime,wasmtime node)\n\nifeq ($(SCHEME),csi)\n  SCHEME := csi -s\nendif\nifeq ($(WASI_RUNTIME),node)\n  WASI_RUNTIME := node --experimental-wasi-unstable-preview1 vendor/wasi-runtime.js\nendif\n\n.DELETE_ON_ERROR:\n\nall: QR2.rb\n\t@echo","sourceCodeStart":1,"sourceCodeEnd":25,"githubUrl":"https://github.com/mame/quine-relay/blob/c2aa5098d3e95409a36185b16371089dd04db642/Makefile#L1-L25","documentation":"The generated Makefile resolves its optional toolchains at parse time: find_any0 picks the first candidate found via which, and check expands to $(error ...) when the list yields nothing, aborting make immediately with '<group> interpreter not found!'. Four groups are resolved this way at lines 10-13: JAVASCRIPT (nodejs/node/js), SCHEME (guile/csi/gosh), GBS (gbs3/gbs2/gba3), and WASI_RUNTIME (wasmtime/node). Because $(error) fires during variable expansion, no target can run until every group has at least one interpreter on PATH (the Makefile prepends $(CURDIR)/vendor/local/bin and /usr/games, where Ubuntu's gambas gbs3 lives).","triggerScenarios":"Running make (or make check/all) on a machine missing one of the four groups: no nodejs/node/js; no guile/csi/gosh; no gbs3/gbs2/gba3; neither wasmtime nor node. Also triggered when PATH is stripped (sudo/env -i make) so which finds nothing, or vendor/local/bin was never populated.","commonSituations":"Fresh CI containers or minimal Debian/Ubuntu images without the README's apt-get line (nodejs, guile-3.0, gambas3-scripter, wabt, etc.); macOS where only node exists but scheme/gambas are absent; PATH lacking /usr/games so gbs3 is invisible; wasmtime not packaged and node missing.","solutions":["Install the missing groups: sudo apt-get install -y nodejs guile-3.0 gambas3-scripter (nodejs alone satisfies both JAVASCRIPT and WASI_RUNTIME since node is a wasmtime fallback)","Or run everything in the provided environment: build the repo Dockerfile, which installs all interpreters including wabt and gambas","Verify before re-running: which nodejs; which guile; which gbs3; which wasmtime (remember /usr/games must be in PATH for gbs3)","If you legitimately lack a group, edit the find_any lists in src/Makefile.gen.rb and regenerate instead of patching the generated Makefile"],"exampleFix":"# before\n$ make\nMakefile:7: *** WASI runtime interpreter not found!.  Stop.\n\n# after\n$ sudo apt-get install -y nodejs guile-3.0 gambas3-scripter wasmtime\n$ make","handlingStrategy":"validation","validationCode":"# Run before make\nfor group in 'nodejs node js' 'guile csi gosh' 'gbs3 gbs2 gba3' 'wasmtime node'; do\n  found=0; for x in $group; do command -v \"$x\" >/dev/null 2>&1 && found=1 && break; done\n  [ \"$found\" = 1 ] || echo \"missing interpreter group: $group\"\ndone","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Install the interpreter groups up front: sudo apt-get install -y nodejs guile-3.0 gambas3-scripter (nodejs also covers WASI_RUNTIME)","Keep /usr/games in PATH for gbs3, and build vendor/local/bin (the Makefile prepends it) for vendored runtimes","For reproducible builds use the repo Dockerfile, which installs the full README dependency list including wabt"],"tags":["make","makefile","path","interpreter","build","environment"],"backgroundTag":"interpreter-not-found","analyzedSha":"c2aa5098d3e95409a36185b16371089dd04db642","analyzedAt":"2026-08-21T15:28:43.741Z","schemaVersion":2},"datasetVersion":"2026-08-21T18:17:14.833Z"}