I traced this issue to a1b01e7701f9fc370f8dff777aad6d39a2c5a3e3 (lrama), because that introduced the use of BASERUBY, which is what currently breaks this:
--- a/common.mk
+++ b/common.mk
@@ -298,7 +298,8 @@ configure-ext: $(EXTS_MK)
build-ext: $(EXTS_MK)
$(Q)$(MAKE) -f $(EXTS_MK) $(mflags) libdir="$(libdir)" LIBRUBY_EXTS=$(LIBRUBY_EXTS) \
- EXTENCS="$(ENCOBJS)" MINIRUBY="$(MINIRUBY)" UPDATE_LIBRARIES=no $(EXTSTATIC)
+ EXTENCS="$(ENCOBJS)" BASERUBY="$(BASERUBY)" MINIRUBY="$(MINIRUBY)" \
+ UPDATE_LIBRARIES=no $(EXTSTATIC)
$(Q)$(MAKE) $(EXTS_NOTE)
exts-note: $(EXTS_MK)
@@ -1208,8 +1209,8 @@ $(srcdir)/ext/ripper/ripper.c: $(srcdir)/ext/ripper/tools/preproc.rb $(srcdir)/p
$(Q) $(CHDIR) $(@D) && \
$(CAT_DEPEND) depend | \
$(exec) $(MAKE) -f - $(mflags) \
- Q=$(Q) ECHO=$(ECHO) RM="$(RM1)" BISON="$(YACC)" top_srcdir=../.. srcdir=. VPATH=../.. \
- RUBY="$(BASERUBY)" PATH_SEPARATOR="$(PATH_SEPARATOR)" LANG=C
+ Q=$(Q) ECHO=$(ECHO) RM="$(RM1)" top_srcdir=../.. srcdir=. VPATH=../.. \
+ RUBY="$(BASERUBY)" BASERUBY="$(BASERUBY)" PATH_SEPARATOR="$(PATH_SEPARATOR)" LANG=C
This isn't necessarily specific to BASERUBY, though. The underlying issue is that exts.mk
(created from templates/exts.mk.tmpl
) uses $(MFLAGS)
:
ruby:
$(Q)$(MAKE) $(MFLAGS) $(SUBMAKEOPTS) $@
This doesn't work as the ;
inside BASERUBY (defined as echo executable host ruby is required. use --with-baseruby option.; false
) is not quoted. I'm not sure how to get it quoted correctly (neither the Q
or QL
modifiers work), I'm checking with the OpenBSD make maintainer.
One possible way to workaround the issue would be to ship a tool/missing-baseruby
file that contained:
#!/bin/sh
echo "executable host ruby is required. use --with-baseruby option."
exit 1
And use that as BASERUBY
.
However, I think the best fix would be to not use BASERUBY
here. This is after miniruby
and ruby
are built, we should be able to use the built ruby instead of BASERUBY
when building extensions, unless I'm missing something.