From 0fda818bd7741fa9bd424e02abeacc73e39a470c Mon Sep 17 00:00:00 2001 From: Nobuyoshi Nakada Date: Thu, 31 Oct 2024 01:06:36 +0900 Subject: [PATCH] Make gemspec files for default gems with extensions So that rubygems can find them as gems. However, the `--install-dir` option of `gem install` seems to exclude prerelease gems, even already installed in that directory, from the dependencies for some reasons; use the `GEM_HOME` environment variable instead. Now net-imap 0.5.0 depends on json gem. --- common.mk | 38 ++++++++++++++++++++++++++++++++------ tool/lib/gem_env.rb | 2 ++ tool/test-bundled-gems.rb | 3 +-- 3 files changed, 35 insertions(+), 8 deletions(-) create mode 100644 tool/lib/gem_env.rb diff --git a/common.mk b/common.mk index 28bb2b7d60..393e53acae 100644 --- a/common.mk +++ b/common.mk @@ -1573,6 +1573,35 @@ test-bundled-gems-precheck: $(TEST_RUNNABLE)-test-bundled-gems-precheck yes-test-bundled-gems-precheck: main no-test-bundled-gems-precheck: +update-default-gemspecs: main + $(ACTIONS_GROUP) + @$(MAKEDIRS) $(srcdir)/.bundle/specifications + @$(XRUBY) -W0 -C "$(srcdir)" -rrubygems \ + -e "destdir = ARGV.shift" \ + -e "ARGV.each do |basedir|" \ + -e "Dir.glob(basedir+'/**/*.gemspec') do |g|" \ + -e "dir, base = File.split(g)" \ + -e "spec = Dir.chdir(dir) {Gem::Specification.load(base)} ||" \ + -e "Gem::Specification.load(g)" \ + -e "unless spec" \ + -e "puts %[Ignoring #{g}]" \ + -e "next" \ + -e "end" \ + -e "spec.files.clear" \ + -e "spec.extensions.clear" \ + -e "File.binwrite(File.join(destdir, spec.full_name+'.gemspec'), spec.to_ruby)" \ + -e "end" \ + -e "end" \ + -- .bundle/specifications lib ext + $(ACTIONS_ENDGROUP) + +install-for-test-bundled-gems: update-default-gemspecs + $(ACTIONS_GROUP) + $(XRUBY) -C "$(srcdir)" -r./tool/lib/gem_env.rb bin/gem \ + install --no-document --conservative \ + "hoe" "json-schema" "test-unit-rr" "simplecov" "simplecov-html" "simplecov-json" + $(ACTIONS_ENDGROUP) + test-bundled-gems-fetch: yes-test-bundled-gems-fetch yes-test-bundled-gems-fetch: $(ACTIONS_GROUP) @@ -1582,12 +1611,9 @@ no-test-bundled-gems-fetch: test-bundled-gems-prepare: $(PRECHECK_BUNDLED_GEMS) test-bundled-gems-fetch test-bundled-gems-prepare: $(TEST_RUNNABLE)-test-bundled-gems-prepare -no-test-bundled-gems-prepare: no-test-bundled-gems-precheck -yes-test-bundled-gems-prepare: yes-test-bundled-gems-precheck - $(ACTIONS_GROUP) - $(XRUBY) -C "$(srcdir)" bin/gem install --no-document \ - --install-dir .bundle --conservative "hoe" "json-schema" "test-unit-rr" "simplecov" - $(ACTIONS_ENDGROUP) +no-test-bundled-gems-prepare: no-test-bundled-gems-precheck no-test-bundled-gems-fetch +yes-test-bundled-gems-prepare: yes-test-bundled-gems-precheck yes-test-bundled-gems-fetch +yes-test-bundled-gems-prepare: install-for-test-bundled-gems PREPARE_BUNDLED_GEMS = test-bundled-gems-prepare test-bundled-gems: $(TEST_RUNNABLE)-test-bundled-gems $(DOT_WAIT) $(TEST_RUNNABLE)-test-bundled-gems-spec diff --git a/tool/lib/gem_env.rb b/tool/lib/gem_env.rb new file mode 100644 index 0000000000..70a2469db2 --- /dev/null +++ b/tool/lib/gem_env.rb @@ -0,0 +1,2 @@ +ENV['GEM_HOME'] = gem_home = File.expand_path('.bundle') +ENV['GEM_PATH'] = [gem_home, File.expand_path('../../../.bundle', __FILE__)].uniq.join(File::PATH_SEPARATOR) diff --git a/tool/test-bundled-gems.rb b/tool/test-bundled-gems.rb index d173ea5b54..e200e9b5df 100644 --- a/tool/test-bundled-gems.rb +++ b/tool/test-bundled-gems.rb @@ -2,6 +2,7 @@ require 'rbconfig' require 'timeout' require 'fileutils' require_relative 'lib/colorize' +require_relative 'lib/gem_env' ENV.delete("GNUMAKEFLAGS") @@ -10,8 +11,6 @@ github_actions = ENV["GITHUB_ACTIONS"] == "true" allowed_failures = ENV['TEST_BUNDLED_GEMS_ALLOW_FAILURES'] || '' allowed_failures = allowed_failures.split(',').reject(&:empty?) -ENV["GEM_PATH"] = [File.realpath('.bundle'), File.realpath('../.bundle', __dir__)].join(File::PATH_SEPARATOR) - colorize = Colorize.new rake = File.realpath("../../.bundle/bin/rake", __FILE__) gem_dir = File.realpath('../../gems', __FILE__)