distributable: url: https://github.com/rubygems/rubygems/archive/refs/tags/v{{version}}.tar.gz strip-components: 1 versions: github: rubygems/rubygems dependencies: ruby-lang.org: '>=2.3' runtime: env: RUBYLIB: ${{prefix}}/lib:$RUBYLIB build: dependencies: ruby-lang.org: ~3.1 # testing a theory # NOTE ^^ we don’t know what this comment means either! script: - ruby setup.rb --prefix={{prefix}} --env-shebang --no-ri --no-rdoc # 3.5.5 fixed this - run: patch -p1 --no-backup-if-mismatch < $PROP if: <3.5.5 working-directory: ${{prefix}} prop: |+ --- a/lib/rubygems/defaults.rb +++ b/lib/rubygems/defaults.rb @@ -20,13 +20,7 @@ def self.default_sources # specified in the environment def self.default_spec_cache_dir - default_spec_cache_dir = File.join Gem.user_home, ".gem", "specs" - - unless File.exist?(default_spec_cache_dir) - default_spec_cache_dir = File.join Gem.data_home, "gem", "specs" - end - - default_spec_cache_dir + File.join Gem.cache_home, "gem", "specs" end ## - run: patch -p1 --no-backup-if-mismatch < "$SRCROOT"/props/fit-n-finish.patch working-directory: ${{prefix}} # 3.5.7 removed some redunant parens, breaking patching - run: patch -p1 --no-backup-if-mismatch < "$SRCROOT"/props/fit-n-finish2-pre357.patch if: <3.5.7 working-directory: ${{prefix}} - run: patch -p1 --no-backup-if-mismatch < "$SRCROOT"/props/fit-n-finish2-post357.patch if: '>=3.5.7' working-directory: ${{prefix}} # makes ruby’s default system dir be fixed in /usr/local/lib/ruby # rather the relative to ~/.pkgx/ruby-lang.org - run: | patch -p1 --no-backup-if-mismatch < "$SRCROOT"/props/default-sys-dir.patch sed -i -e 's/Gem.default_dir/Gem.default_system_dir/' lib/rubygems/path_support.rb working-directory: ${{prefix}} # removes redudnant `gem` directory that looks gross in our directory formatting - run: sed -i -e 's/Gem.state_home, "gem",/Gem.state_home,/' defaults.rb working-directory: ${{prefix}}/lib/rubygems if: '>=3.4' # ensure `gem` tries to install to ~/.gem if /usr/local is not writable - run: patch -p1 --no-backup-if-mismatch < "$SRCROOT"/props/user-install-pre3.5.patch working-directory: ${{prefix}} if: '<3.5' - run: patch -p1 --no-backup-if-mismatch < "$SRCROOT"/props/user-install-post3.5.patch working-directory: ${{prefix}} if: '>=3.5' # fixes bug where gem won’t create the full directory path when installing # which typically isn’t a problem since the directory already exists in a standard # install but we fuck with the paths way more - run: sed -i -e 's/Dir\.mkdir dir, \*\[options\[:dir_mode\].*/FileUtils.mkdir_p dir, *[options[:dir_mode] \&\& 0o755].compact/' installer.rb working-directory: ${{prefix}}/lib/rubygems # these are provided by ruby-lang.org # they turn up here since that is how gem handles deps # but ruby is in PATH and has these and that is the preference - run: for PROG in rake rbs rdbg typeprof; do if test -f $PROG; then rm $PROG; fi; done working-directory: ${{prefix}}/bin # ruby has a neat feature where it will look for a ruby shebang and # ignore everything from before that, so we can make scripts that execute # as POSIX shell and then re-exec themselves as ruby scripts # REF https://github.com/pkgxdev/pantry/issues/4010 - run: | for tool in bundle bundler; do echo "$(cat $PROP gems/bundler-*/exe/$tool)" > bin/$tool done echo "$(cat $PROP bin/gem)" > bin/gem prop: | #!/bin/sh d="$(cd "$(dirname "$0")"/.. && pwd)" export RUBYLIB="$d/lib" if [ -z "$GEM_PATH" ]; then export GEM_PATH="$d" else export GEM_PATH="$d:$GEM_PATH" fi exec ruby "$0" "$@" working-directory: ${{prefix}} # no longer needed - rm -rf {{prefix}}/gems # the bundler code figures out the “gem path” for itself by checking for this directory structure # for some reason we are not installed in a gem-compatible way and # `GEM_PATH` is not used here (but it is later) # FIXME this stuff is messy, ideally we’d do much less stuff since it breaks easily with new releases - run: ln -s bin exe working-directory: ${{prefix}} # clean up empty, unused directory - rmdir {{prefix}}/plugins test: env: vRUBY: ${{deps.ruby-lang.org.version.marketing}}.0 script: # for debug - gem env - | gem install awesome_print --verbose ruby -e 'require "rubygems"' -e 'require "awesome_print"' -e'ap $LOAD_PATH' - | gem install hexapdf --verbose if [ -w /usr/local/lib/ruby/ ]; then v="$(/usr/local/bin/hexapdf version | cut -d' ' -f2)" test -d /usr/local/lib/ruby/gems/$vRUBY/gems/hexapdf-$v else v="$(~/.local/bin/hexapdf version | cut -d' ' -f2)" test -d ~/.gem/ruby/$vRUBY/gems/hexapdf-$v fi # test for https://github.com/pkgxdev/pantry/issues/4010 - run: | mv $FIXTURE Gemfile GEM_HOME=$HOME/.bundler bundle install --path vendor/bundle fixture: | source 'https://rubygems.org' gem 'warbler', platforms: :jruby # verifies that our bundler can be used as a gem - run: rm -rf {{deps.ruby-lang.org.prefix}}/lib/ruby/gems/*/bundler* rm -rf {{deps.ruby-lang.org.prefix}}/lib/ruby/gems/*/rubygems* GEM_HOME=$HOME/.bundler ruby $FIXTURE fixture: content: | require 'bundler/inline' gemfile do source 'https://rubygems.org' gem 'ruby-macho', '~> 3' end extname: rb provides: - bin/bundle - bin/bundler - bin/gem