distributable: url: https://cache.ruby-lang.org/pub/ruby/{{version.marketing}}/ruby-{{version}}.tar.xz strip-components: 1 versions: # ruby have *some* releases, but historically only have tags # so if we want to build older releases we can only scan tags github: ruby/ruby/tags dependencies: openssl.org: ^1.1 pyyaml.org: ^0.2 zlib.net: ^1 build: dependencies: freedesktop.org/pkg-config: ^0.29 gnu.org/gettext: ^0.21 gnu.org/patch: '*' gnu.org/bison: ^3 gnu.org/autoconf: '*' rust-lang.org: ^1 # required to build YJIT linux: ruby-lang.org: ^3 # ruby requires ruby to build # ^^ only linux because we got issues on darwin currently and darwin provides ruby (for now) script: - patch -p1 -F5 < props/mkconfig.rb.diff - ./configure $ARGS # clang17 doesn't like [[maybe_unused]] on types # fix cribbed from https://github.com/ruby/ruby/pull/4603/commits/fbdff085ef3c8a56e0a33404e8795879e3167549 - run: sed -i -e 's/elif RBIMPL_HAS_C_ATTRIBUTE(maybe_unused)/elif RBIMPL_HAS_C_ATTRIBUTE(maybe_unused) \&\& (__STDC_VERSION__ >= 202000L)/' maybe_unused.h if: linux working-directory: include/ruby/internal/attr - make --jobs {{hw.concurrency}} install # we provide these as `rubygems.org` - run: rm -f bundle bundler gem working-directory: ${{prefix}}/bin - fix-shebangs.ts ${{prefix}}/bin/* # ruby itself provides the gems for these and we don’t want that # we want to pkg them ourselves as part of rubygems.org # to ensure the user gets a good ruby experience rubygems is marked as # a companion which in most use means gems are automatically added to the # pkgenv. Ruby behaves well if gems isn't around but the user may get # unexpected errors in scenarios where they constructed an pkgenv manually - working-directory: ${{prefix}}/lib/ruby/{{version.marketing}}.0 run: | for x in bundler rubygems bundler.rb rubygems.rb; do if test -d $x; then rm -rf $x else rm -f $x fi done rm -rf ../gems/3.2.0/gems/bundler-*.*.* - run: | rm -rf share/ri rm -rf share/doc rm -rf lib/ruby/site_ruby rm -rf lib/ruby/vendor_ruby working-directory: ${{prefix}} # weirdly files get put here and we can't figure out how to stop it - run: | if test -d pkgconfig; then rm -rf pkgconfig; fi mv *-{{hw.platform}}*/* . rmdir *-{{hw.platform}}* working-directory: ${{prefix}}/lib - run: sed -i.bak -e 's|$(DESTDIR){{prefix}}|$(topdir)|g' -e 's|CONFIG\["topdir"\] = .*|CONFIG\["topdir"\] = TOPDIR|g' rbconfig.rb working-directory: ${{prefix}}/lib/ruby/{{version.marketing}}.0 env: ARGS: - --prefix="{{prefix}}" - --enable-load-relative # makes us relocatable - --without-gmp - --with-rubyarchprefix={{prefix}}/lib/ruby # no need for architecture specific crap - --with-rubyhdrdir={{prefix}}/include # ^^ - --with-rubyarchhdrdir={{prefix}}/include # ^^ - --disable-multiarch # ^^ - --with-vendordir=no # is empty so don’t pollute - --with-vendorarchdir=no # ^^ - --with-sitedir=no # ^^ - --with-sitearchdir=no # ^^ - --enable-yjit # https://github.com/pkgxdev/pantry/issues/3538 test: dependencies: rubygems.org: '*' # is a companion __however__ brewkit doesn’t add companions to the test env automatically script: - ruby -e 'puts "Hello World!"' # “The terminfo database could not be found.” # all platforms but only happens in the test harness # ie. you can run this locally and it will work # - echo 'puts 1' | irb # tests the libraries that come with Ruby can be utilized - run: ruby $FIXTURE fixture: content: | require 'date' puts Date.today extname: rb # tests the gems that come with Ruby can be utilized - run: ruby $FIXTURE fixture: content: | require 'matrix' matrix = Matrix[[1, 2], [3, 4]] transpose_matrix = matrix.transpose determinant = matrix.determinant puts "Original matrix:\n#{matrix}" puts "Transposed matrix:\n#{transpose_matrix}" puts "Determinant of the matrix: #{determinant}" extname: rb - run: ruby --yjit $FIXTURE if: ^3.1 fixture: content: | def fib(n) return n if n <= 1 fib(n-1) + fib(n-2) end puts fib(35) extname: rb provides: - bin/erb - bin/irb - bin/rake - bin/rdoc - bin/ri - bin/ruby interprets: extensions: rb args: ruby companions: rubygems.org: '*'