<div dir="ltr"><div dir="ltr"><br></div><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Sat, Mar 16, 2024 at 3:29 PM Sergio Had <<a href="mailto:vital.had@gmail.com">vital.had@gmail.com</a>> wrote:</div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-style:solid;border-left-color:rgb(204,204,204);padding-left:1ex"><div style="line-break:after-white-space"><div><blockquote type="cite"><div>On Mar 17, 2024, at 12:57 AM, Austin Ziegler <<a href="mailto:halostatue@gmail.com" target="_blank">halostatue@gmail.com</a>> wrote:</div><div><div dir="ltr">I am most definitely a Ruby expert, but I have yet to run any version of Ruby from MacPorts (because I use `ruby-build` and `mise` to build versions of Ruby that I require), and I almost exclusively install Ruby packages via `gem install`.</div></div></blockquote><div>You could perhaps try sudo port install ruby33 or whatever needed?</div><div>I have no idea what is going on with archaic versions, but Ruby 3.1+ through ruby-devel (3.4) should work on every system.</div></div></div></blockquote><div><br></div><div>I could, but I think you misunderstand: as someone who has done a lot of Ruby development and have responsibility for a couple of 100M+ downloaded gems (both mime-types and diff-lcs are mine), I *choose* not to use system Ruby installations, including those of MacPorts. Much of it has to do with why systems like chruby, rbenv, and rvm exist — Debian maintainers made an absolute hash of Ruby packaging in the early 2000s and often frequently did a poor job of packaging the few gems that they did.</div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-style:solid;border-left-color:rgb(204,204,204);padding-left:1ex"><div style="line-break:after-white-space"><div><blockquote type="cite"><div dir="ltr"><div>Many gemspecs contain information about the minimum Ruby that they require to run (mime-types 3 requires Ruby 2+, <a href="https://github.com/mime-types/ruby-mime-types/blob/main/mime-types.gemspec#L20" target="_blank">https://github.com/mime-types/ruby-mime-types/blob/main/mime-types.gemspec#L20</a>; diff-lcs advertises compatibility with Ruby 1.8+; app_identity advertises Ruby 2.7+, but not Ruby 4, <a href="https://github.com/KineticCafe/app_identity/blob/8afdd1caaab8d18032f60416eb62add88d308ee0/ruby/app_identity.gemspec#L21" target="_blank">https://github.com/KineticCafe/app_identity/blob/8afdd1caaab8d18032f60416eb62add88d308ee0/ruby/app_identity.gemspec#L21</a>).</div></div></blockquote><div>What I mean is that gemspec files often require a version of some another gem using ~> instead of >= like <a href="https://rubygems.org/gems/t" target="_blank">https://rubygems.org/gems/t</a></div><div>That prevents gems from running if a dependency is newer. For example, rb-launchy is at 3.0.0: <a href="https://rubygems.org/gems/launchy" target="_blank">https://rubygems.org/gems/launchy</a></div><div>Then I need to do something like this: <a href="https://github.com/macports/macports-ports/blob/c778ebc838a41e5761b76e7c6bc5a7ec3c256ab2/ruby/rb-t/Portfile#L30-L33" target="_blank">https://github.com/macports/macports-ports/blob/c778ebc838a41e5761b76e7c6bc5a7ec3c256ab2/ruby/rb-t/Portfile#L30-L33</a></div><div>Problem is that this is quite painful to deal with for every relevant case.</div></div></div></blockquote><div><br></div><div>While not all Ruby gems follow strong semver, what you are doing here is inadvisable at best. Ruby *permits* (through RubyGems) the installation of multiple versions of the same gems—and as Ruby versions are released, more of the standard library is being shifted into "default gems", meaning that applications can choose to use later versions that may have new features or possible bug fixes that are not included in the shipped version of Ruby.</div><div><br></div><div>Ruby packages would be much better served by installing gems *as gems* (this can be done offline with `gem install --local foo-version.gem` once downloaded) than trying to repackage all of the gems as ports with only a single version available. I have (extremely vague) plans at some point for mime-types 4 and diff-lcs 2 that will drop support for any version of Ruby less than 3.0, but that will not stop mime-types 3 and diff-lcs 1 from working on older versions of Ruby.</div><div><br></div><div>I reiterate that Ruby application ports (like sup or t) should *probably* be set up more like Go or Rust ports and that a tool like `go2port` or `cargo2port` (`gemspec2port, bundler2port`) which ultimately downloads the gemfiles and uses `gem install --local …` will be better than blindly modifying the *intentional* use of `~> 3.0` or installing `rb33-launch 3.0`.</div><div><br></div><div>-a</div></div><span class="gmail_signature_prefix">-- </span><br><div dir="ltr" class="gmail_signature">Austin Ziegler • <a href="mailto:halostatue@gmail.com" target="_blank">halostatue@gmail.com</a> • <a href="mailto:austin@halostatue.ca" target="_blank">austin@halostatue.ca</a><br><a href="http://www.halostatue.ca/" target="_blank">http://www.halostatue.ca/</a> • <a href="http://twitter.com/halostatue" target="_blank">http://twitter.com/halostatue</a></div></div>