diff --git a/defs/gmake.mk b/defs/gmake.mk index 0320f9b7d553fb..a05f5943aa981a 100644 --- a/defs/gmake.mk +++ b/defs/gmake.mk @@ -358,6 +358,21 @@ $(srcdir)/gems/%.gem: extract-gems: | $(patsubst %,$(srcdir)/.bundle/gems/%,$(bundled-gems)) extract-gems: | $(call foreach-bundled-gems-rev,bundled-gem-extracted) +# Docs targets call $(RDOC) -> tool/rdoc-srcdir, which loads rdoc/rdoc and +# activates its `add_dependency 'rbs', '>= 4.0.0'`. Activation requires +# the bundled rbs gem to be discoverable and its C extension built. The +# existing per-bundled-gem Makefile generated by ext/extmk.rb does both +# (extension build + copy of .bundled.rbs-*.gemspec into +# .bundle/specifications/), but only if ext/configure-ext.mk has seen +# `.bundle/gems/` populated when its template's +# `Dir.glob(".bundle/gems/**/extconf.rb")` runs. On a clean tree +# prepare-gems may not have run yet, so make the dep explicit for the +# docs goals. Other targets are left alone so a plain `make` doesn't +# reach for prepare-gems -> update-gems (network). +ifneq ($(filter rdoc rdoc:% html html-server rdoc-coverage undocumented docs install install-all install-doc install-html install-rdoc reinstall,$(MAKECMDGOALS)),) +ext/configure-ext.mk: $(HAVE_BASERUBY:yes=prepare-gems) +endif + $(srcdir)/.bundle/gems/%: $(srcdir)/gems/%.gem | .bundle/gems $(ECHO) Extracting bundle gem $*... $(Q) $(BASERUBY) -C "$(srcdir)" \ diff --git a/tool/update-deps b/tool/update-deps index 2d4a5674be72a7..bfaf1fe0989aaa 100755 --- a/tool/update-deps +++ b/tool/update-deps @@ -328,12 +328,13 @@ def read_make_deps(cwd) next if /libyjit.o\z/ =~ target.to_s # skip YJIT Rust object (no corresponding C source) next if /libzjit.o\z/ =~ target.to_s # skip ZJIT Rust object (no corresponding C source) next if /target\/release\/libruby.o\z/ =~ target.to_s # skip YJIT+ZJIT Rust object (no corresponding C source) - next if /\.bundle\// =~ target.to_s next if /\A\./ =~ target.to_s # skip rules such as ".c.o" #p [curdir, target, deps] dir = curdir || dirstack.last - dependencies[dir + target] ||= [] - dependencies[dir + target] |= deps.map {|dep| dir + dep } + key = dir + target + next if /\.bundle\// =~ key.to_s # bundled gem extensions manage their own depend files + dependencies[key] ||= [] + dependencies[key] |= deps.map {|dep| dir + dep } elsif data_base_end curdir = nil elsif directory_leave