From: halostatue@... Date: 2021-04-06T23:58:31+00:00 Subject: [ruby-core:103260] [Ruby master Bug#17777] 2.6.7 fails to build on macOS: implicit declaration of function 'rb_native_mutex_destroy' is invalid in C99 Issue #17777 has been updated by austin (Austin Ziegler). Digging a bit deeper in to this second item; it looks like we���re doing `USE_HEADER_HACKS`, which means we���re loading `` and using the compiler that came with Big Sur (based on Xcode 12), I see the following: ```c #if FFI_LEGACY_CLOSURE_API FFI_AVAILABLE_APPLE_2019 FFI_API ffi_status ffi_prep_closure (ffi_closure*, ffi_cif *, void (*fun)(ffi_cif*,void*,void**,void*), void *user_data) #if defined(__GNUC__) && (((__GNUC__ * 100) + __GNUC_MINOR__) >= 405) __attribute__((deprecated ("use ffi_prep_closure_loc instead"))) #elif defined(__GNUC__) && __GNUC__ >= 3 __attribute__((deprecated)) #endif ; #endif ``` However, it looks like the 2.7 version of `fiddle` does a little more investigation: ```diff --- ext/fiddle/extconf.rb 2021-04-05 07:48:34.000000000 -0400 +++ ../ruby-2.7.3/ext/fiddle/extconf.rb 2021-04-05 08:39:38.000000000 -0400 @@ -13,7 +13,7 @@ if have_header(ffi_header = 'ffi.h') true elsif have_header(ffi_header = 'ffi/ffi.h') - $defs.push(format('-DUSE_HEADER_HACKS')) + $defs.push('-DUSE_HEADER_HACKS') true end and (have_library('ffi') || have_library('libffi')) end or @@ -114,8 +114,17 @@ if ver ver = ver.gsub(/-rc\d+/, '') # If ver contains rc version, just ignored. - ver = (ver.split('.') + [0,0])[0,3] + ver = (ver.split('.').map(&:to_i) + [0,0])[0,3] $defs.push(%{-DRUBY_LIBFFI_MODVERSION=#{ '%d%03d%03d' % ver }}) + warn "libffi_version: #{ver.join('.')}" +end + +case +when $mswin, $mingw, (ver && (ver <=> [3, 2]) >= 0) + $defs << "-DUSE_FFI_CLOSURE_ALLOC=1" +when (ver && (ver <=> [3, 2]) < 0) +else + have_func('ffi_closure_alloc', ffi_header) end have_header 'sys/mman.h' @@ -142,7 +151,7 @@ if /^\#define\s+SIZEOF_#{type}\s+(SIZEOF_(.+)|\d+)/ =~ config if size = $2 and size != 'VOIDP' size = types.fetch(size) {size} - $defs << format("-DTYPE_%s=TYPE_%s", signed||type, size) + $defs << "-DTYPE_#{signed||type}=TYPE_#{size}" end if signed check_signedness(type.downcase, "stddef.h") ``` This is from 229c041f057. ---------------------------------------- Bug #17777: 2.6.7 fails to build on macOS: implicit declaration of function 'rb_native_mutex_destroy' is invalid in C99 https://bugs.ruby-lang.org/issues/17777#change-91343 * Author: Eregon (Benoit Daloze) * Status: Open * Priority: Normal * ruby -v: 2.6.7 * Backport: 2.6: REQUIRED, 2.7: DONTNEED, 3.0: DONTNEED ---------------------------------------- https://github.com/ruby/ruby-builder/runs/2271346109?check_suite_focus=true#step:14:11253 ``` vm.c:2295:9: error: implicit declaration of function 'rb_native_mutex_destroy' is invalid in C99 ``` There is also a warning below that might be worth solving: ``` vm.c:2489:34: warning: expression does not compute the number of elements in this array; element type is 'const int', not 'VALUE' (aka 'unsigned long') [-Wsizeof-array-div] sizeof(ec->machine.regs) / sizeof(VALUE)); ~~~~~~~~~~~~~~~~ ^ vm.c:2489:34: note: place parentheses around the 'sizeof(VALUE)' expression to silence this warning ``` -- https://bugs.ruby-lang.org/ Unsubscribe: