From 6d8b9a9d619821b722273d93cdc4645ae2e23ede Mon Sep 17 00:00:00 2001 From: Yuta Saito Date: Sat, 30 Jul 2022 17:25:12 +0900 Subject: [PATCH] Resolve abi symbol references from miniruby to avoid circular deps Adding `ruby` to `PREP` causes the following circular dependencies because `PREP` is used as a prerequisite by some targets required to build `ruby` target itself. ``` make: Circular .rbconfig.time <- ruby dependency dropped. make: Circular builtin_binary.inc <- ruby dependency dropped. make: Circular ext/extinit.c <- ruby dependency dropped. make: Circular ruby <- ruby dependency dropped. ``` Adding a new Make variable like `EXTPREP` only for exts may be also reasonable, but it would introduce another complexity into our build system. `-bundle_loader` doesn't care that link-time and run-time loader executables are different as long as bound symbols are provided, so it's ok to resolve from miniruby to simplify our build. --- configure.ac | 5 ++--- enc/Makefile.in | 2 +- ext/extmk.rb | 2 +- 3 files changed, 4 insertions(+), 5 deletions(-) diff --git a/configure.ac b/configure.ac index 1808a643f3..c68b7632e6 100644 --- a/configure.ac +++ b/configure.ac @@ -3015,7 +3015,6 @@ STATIC= # When building ext bundles, a mach-o bundle needs to know its loader # program to bind symbols from the ruby executable EXTDLDFLAGS="-bundle_loader '\$(BUILTRUBY)'" - PREP="$PREP"' $(PROGRAM)' ]) rb_cv_dlopen=yes], [aix*], [ : ${LDSHARED='$(CC)'} @@ -3340,7 +3339,7 @@ AS_IF([test x"$cross_compiling" = xyes], [ AC_SUBST(XRUBY_LIBDIR) AC_SUBST(XRUBY_RUBYLIBDIR) AC_SUBST(XRUBY_RUBYHDRDIR) - PREP="$PREP "'$(arch)-fake.rb' + PREP='$(arch)-fake.rb' RUNRUBY_COMMAND='$(MINIRUBY) -I`cd $(srcdir)/lib; pwd`' RUNRUBY='$(RUNRUBY_COMMAND)' XRUBY='$(MINIRUBY)' @@ -3350,7 +3349,7 @@ AS_IF([test x"$cross_compiling" = xyes], [ ], [ MINIRUBY='./miniruby$(EXEEXT) -I$(srcdir)/lib -I.' MINIRUBY="$MINIRUBY"' -I$(EXTOUT)/common' - PREP="$PREP "'miniruby$(EXEEXT)' + PREP='miniruby$(EXEEXT)' RUNRUBY_COMMAND='$(MINIRUBY) $(tooldir)/runruby.rb --extout=$(EXTOUT) $(RUNRUBYOPT)' RUNRUBY='$(RUNRUBY_COMMAND) --' XRUBY='$(RUNRUBY)' diff --git a/enc/Makefile.in b/enc/Makefile.in index 0e1a27a667..dd8ca1b528 100644 --- a/enc/Makefile.in +++ b/enc/Makefile.in @@ -36,7 +36,7 @@ RUBY_SO_NAME = @RUBY_SO_NAME@ LIBRUBY = @LIBRUBY@ LIBRUBYARG_SHARED = @LIBRUBYARG_SHARED@ LIBRUBYARG_STATIC = $(LIBRUBYARG_SHARED) -BUILTRUBY = $(topdir)/ruby$(EXEEXT) +BUILTRUBY = $(topdir)/miniruby$(EXEEXT) empty = AR = @AR@ diff --git a/ext/extmk.rb b/ext/extmk.rb index b0d84ef00f..1624ec9099 100755 --- a/ext/extmk.rb +++ b/ext/extmk.rb @@ -427,7 +427,7 @@ end topruby = $ruby $ruby = topruby.join(' ') $mflags << "ruby=#$ruby" -$builtruby = '$(topdir)/ruby' + EXEEXT # Must be an executable path +$builtruby = '$(topdir)/miniruby' + EXEEXT # Must be an executable path MTIMES = [__FILE__, 'rbconfig.rb', srcdir+'/lib/mkmf.rb'].collect {|f| File.mtime(f)}