Yeah I know, it's very old. But unfortunately i needed to use this ruby version for running errbit. (the self hosted error handler)
Trying to install install an older ruby-version on FreeBSD results in the following error (is found in the ruby-build log file )
util.c:236:1: error: expected identifier or '('
ruby_qsort(void* base, const size_t nel, const size_t size, cmpfunc_t *cmp, void *d)
^
./include/ruby/util.h:59:21: note: expanded from macro 'ruby_qsort'
-# define ruby_qsort qsort_r
This is an issue in the ruby code compiling on FreeBSD 14. The issue is mentioned for ruby 3.1 See: https://bugs.ruby-lang.org/issues/20151.
Problem is that the solution isn't backported. There isn't a ruby 2.7.9.
Quick Solution
Create the file ./rbenv/plugins/ruby-build/share/ruby-build/2.7.8-freebsd-14
, with the following content
install_package "openssl-1.1.1w" "https://www.openssl.org/source/openssl-1.1.1w.tar.gz#cf3098950cb4d853ad95c0841f1f9c6d3dc102dccfcacd521d93925208b76ac8" openssl --if needs_openssl:1.0.1-1.x.x
install_package "ruby-2.7.8" "https://www.blommersit.nl/downloads/ruby-build/ruby-2.7.8-freebsd-14.tgz#58beea1e9e954efb2e7c27a3dcf5817d739049b50ae718c78d4fffe9a1e11c0b" warn_eol enable_shared standard
And install it:
rbenv install 2.7.8-freebsd-14
Further changes to run errbit:
- remove the ruby-version from the Gemfile
- change .ruby-version file to match
2.7.8-freebsd-14
bundle update puma
to a later version (issue with nio4r)
Details
The issue happens because util.c
file contains some q_sort function logic, which resolves incorrectly in FreeBSD 14.
The source contains the following patch (Note this is not a correct solution for all platforms, but a quick hack to make it work in FreeBSD 14).
Around line 222 a few defines are undefined
#undef HAVE_BSD_QSORT_R
#undef HAVE_QSORT_S
The patched ruby version is here for download: