Bug #20151
closedCan't build Ruby 3.1 on FreeBSD 14.0
Description
I couldn't install Ruby 3.1.3 on FreeBSD 14.0.
compiling util.c
util.c:255: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:124:21: note: expanded from macro 'ruby_qsort'
# define ruby_qsort qsort_r
^
/usr/include/stdlib.h:356:5: note: expanded from macro 'qsort_r'
__generic(arg5, int (*)(void *, const void *, const void *), \
^
/usr/include/sys/cdefs.h:322:2: note: expanded from macro '__generic'
_Generic(expr, t: yes, default: no)
^
1 error generated.
*** Error code 1
Stop.
Compiler version is here:
FreeBSD clang version 16.0.6 (https://github.com/llvm/llvm-project.git llvmorg-16.0.6-0-g7cbf1a259152)
I could install Ruby 3.2.2.
Updated by shyouhei (Shyouhei Urabe) 10 months ago
This has to be related: https://github.com/freebsd/freebsd-src/commit/af3c78886fd8d4ca5eebdbe581a459a6f6d29d6a
Because ruby_qsort
is now a macro that ultimately expands to a _Generic
, which is an expression, which cannot exist at the toplevel.
We already have a sane qsort_r
implementation in that environment. We don't have to reinvent the wheel. I guess reaching at util.c:255 is already something wrong.
Updated by taq (Eustaquio Rangel) 9 months ago
shyouhei (Shyouhei Urabe) wrote in #note-1:
This has to be related: https://github.com/freebsd/freebsd-src/commit/af3c78886fd8d4ca5eebdbe581a459a6f6d29d6a
Because
ruby_qsort
is now a macro that ultimately expands to a_Generic
, which is an expression, which cannot exist at the toplevel.We already have a sane
qsort_r
implementation in that environment. We don't have to reinvent the wheel. I guess reaching at util.c:255 is already something wrong.
I beg your pardon, but based on this, we'll need at least 3.2.0 to run on FreeBSD?
Updated by nobu (Nobuyoshi Nakada) 9 months ago
- Related to Bug #18997: Don't define ruby_qsort when POSIX qsort_r is available added
Updated by hsbt (Hiroshi SHIBATA) 9 months ago
- Backport changed from 3.0: UNKNOWN, 3.1: UNKNOWN, 3.2: UNKNOWN, 3.3: UNKNOWN to 3.0: DONTNEED, 3.1: REQUIRED, 3.2: DONTNEED, 3.3: DONTNEED
@nobu (Nobuyoshi Nakada) found to fix this with https://github.com/ruby/ruby/commit/cfc564ac4049
Updated by hsbt (Hiroshi SHIBATA) 6 months ago
- Status changed from Open to Closed
- Backport changed from 3.0: DONTNEED, 3.1: REQUIRED, 3.2: DONTNEED, 3.3: DONTNEED to 3.0: DONTNEED, 3.1: DONE, 3.2: DONTNEED, 3.3: DONTNEED
I fixed this at https://github.com/ruby/ruby/pull/10814