diff --git a/ext/fiddle/extconf.rb b/ext/fiddle/extconf.rb index f11afa2c..91c8dbb6 100644 --- a/ext/fiddle/extconf.rb +++ b/ext/fiddle/extconf.rb @@ -162,6 +162,16 @@ def enable_debug_build_flag(flags) $INCFLAGS << " -I" << libffi.include end +unless macro_defined?("FFI_GO_CLOSURES", cpp_include(ffi_header || 'ffi.h')) + # ffi.h in libffi 3.4.4 or earlier and the macOS SDK uses + # `#if FFI_GO_CLOSURES`, which warns with -Wundef on targets whose + # ffitarget.h does not define it. Newer libffi defines it in + # ffitarget.h unconditionally, where defining it on our side would be + # a macro redefinition (e.g. warning C4005 with MSVC). Fiddle does + # not use Go closures. + $defs.push('-DFFI_GO_CLOSURES=0') +end + if libffi_version # If libffi_version contains rc version, just ignored. libffi_version = libffi_version.gsub(/-rc\d+/, '') diff --git a/ext/fiddle/fiddle.h b/ext/fiddle/fiddle.h index 49cc6023..c0ab8a91 100644 --- a/ext/fiddle/fiddle.h +++ b/ext/fiddle/fiddle.h @@ -40,7 +40,6 @@ # endif #endif -#define FFI_GO_CLOSURES 0 /* fiddle does not use go closures */ #ifdef USE_HEADER_HACKS #include #else