mame/quine-relay · error

$(1) interpreter not found!

Error message

$(1) interpreter not found!

What it means

src/Makefile.gen.rb is the generator that emits the root Makefile (File.write('../Makefile', ...) at line 80), and line 21 is the heredoc template of the check macro whose $(error $(1) interpreter not found!) aborts make when find_any finds none of the candidate interpreters for JAVASCRIPT (nodejs node js), SCHEME (guile csi gosh), GBS (gbs3 gbs2 gba3), or WASI_RUNTIME (wasmtime node). The error itself manifests at Makefile:7 of the generated file whenever the environment lacks a whole group; pointing at this line means the fix belongs in the generator, not in the generated Makefile (the two must stay in sync, and the Makefile is checksum-tracked via SHA256SUMS).

Source

Thrown at src/Makefile.gen.rb:21

OUT = []

def banner(s1, s2=nil, i=nil)
  s = "##  #{ "#{ i + 1 }: " if i }#{ s1 }#{ ' -> ' + s2 if s2 }  ##"
  OUT << "\t@echo"
  OUT << "\t@echo \"#{ "#" * s.size }\""
  OUT << "\t@echo \"#{ s }\""
  OUT << "\t@echo \"#{ "#" * s.size }\""
  OUT << "\t@echo"
end

OUT << <<-END
MAKEFLAGS += --no-print-directory

PATH := $(CURDIR)/vendor/local/bin:/usr/games:$(PATH)
CLASSPATH := .

find_any0 = $(firstword $(foreach x,$(1),$(if $(shell which $(x) 2>/dev/null),$(x),)))
check = $(if $(2),$(2),$(error $(1) interpreter not found!))
find_any = $(call check,$(1),$(call find_any0,$(2)))

JAVASCRIPT   := $(call find_any,JavaScript,nodejs node js)
SCHEME       := $(call find_any,Scheme,guile csi gosh)
GBS          := $(call find_any,Gambas script,gbs3 gbs2 gba3)
WASI_RUNTIME := $(call find_any,WASI runtime,wasmtime node)

ifeq ($(SCHEME),csi)
  SCHEME := csi -s
endif
ifeq ($(WASI_RUNTIME),node)
  WASI_RUNTIME := node --experimental-wasi-unstable-preview1 vendor/wasi-runtime.js
endif

.DELETE_ON_ERROR:
END
OUT << "all: QR2.rb"
banner("CHECK")

View on GitHub (pinned to c2aa5098d3)

Solutions

  1. First confirm the environment actually has the tools: which nodejs node guile csi gosh gbs3 gbs2 gba3 wasmtime; install what is missing (apt-get install nodejs guile-3.0 gambas3-scripter wasmtime)
  2. To support another runtime, edit the candidate list in this heredoc (e.g. WASI runtime,wasmtime wasmer node) and regenerate with cd src && rake ../Makefile so Makefile and generator stay consistent
  3. Use the repo Dockerfile for a known-good toolchain instead of hand-satisfying every group
  4. Do not hand-edit the generated Makefile: the next rake run will overwrite it and SHA256SUMS will mismatch

Example fix

# before (src/Makefile.gen.rb heredoc)
WASI_RUNTIME := $(call find_any,WASI runtime,wasmtime node)

# after -- widen the candidates, then regenerate (cd src && rake ../Makefile)
WASI_RUNTIME := $(call find_any,WASI runtime,wasmtime wasmer node)
Defensive patterns

Strategy: validation

Validate before calling

# Before regenerating or running make, confirm each find_any group resolves
%w[nodejs node js guile csi gosh gbs3 gbs2 gba3 wasmtime].each do |x|
  puts "#{x}: #{`which #{x} 2>/dev/null`.empty? ? 'MISSING' : 'ok'}"
end

Prevention

When it happens

Trigger: Running make on a freshly generated Makefile in an environment missing every candidate of a group (no node/js, no guile/csi/gosh, no gbs3/gbs2/gba3, no wasmtime/node); regenerating the Makefile (cd src && rake ../Makefile) after editing the candidate lists without installing the tools; CI images missing /usr/games (gbs3) or vendor/local/bin.

Common situations: Maintainers adding a language stage that needs a new runtime and forgetting to extend the candidate lists; environments where an interpreter exists under a different name (deno instead of node, wasmer instead of wasmtime) and nobody added it to the lists; portable builds where gambas is not packaged.

Related errors


AI-assisted analysis of mame/quine-relay@c2aa5098d3 (2026-08-21). Data as JSON: /api/errors/dc4ccc53d5500705. Report an issue: GitHub.