ruby / fiddle

A libffi wrapper for Ruby.

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

cannot update gem (from 1.9.25) on macOS Catalina

escogido opened this issue · comments

macOS Catalina, version 10.15.7. gem update fiddle produces the following:

compiling function.c
function.c:285:22: error: implicit declaration of function 'ffi_prep_cif_var' is invalid in C99 [-Werror,-Wimplicit-function-declaration]
            result = ffi_prep_cif_var(args.cif,
                     ^
function.c:285:22: note: did you mean 'ffi_prep_cif'?
/Library/Developer/CommandLineTools/SDKs/MacOSX10.14.sdk/usr/include/ffi/ffi.h:312:1: note: 'ffi_prep_cif' declared here
ffi_prep_cif(
^
1 error generated.
make: *** [function.o] Error 1

make failed, exit code 2

any help?

How did you build your Ruby?

Could you show the output of xcodebuild -version?

Could you also show full log?

[2020-12-07 15:42:16] ~ $ gem update fiddle
Updating installed gems
Updating fiddle
Building native extensions. This could take a while...
ERROR:  Error installing fiddle:
	ERROR: Failed to build gem native extension.

    current directory: /Users/yaroslav/.rvm/gems/ruby-2.6.3/gems/fiddle-1.0.3/ext/fiddle
/Users/yaroslav/.rvm/rubies/ruby-2.6.3/bin/ruby -I /Users/yaroslav/.rvm/rubies/ruby-2.6.3/lib/ruby/site_ruby/2.6.0 -r ./siteconf20201207-71505-11gs0ii.rb extconf.rb
checking for ffi.h... yes
checking for -lffi... yes
libffi_version: 2.1.0
checking for ffi_prep_cif_var() in ffi.h... yes
checking for sys/mman.h... yes
checking for dlfcn.h... yes
checking for -ldl... yes
checking for dlopen()... yes
checking for dlclose()... yes
checking for dlsym()... yes
checking for dlerror()... yes
checking for FFI_STDCALL in ffi.h... no
checking signedness of size_t... unsigned
creating Makefile

current directory: /Users/yaroslav/.rvm/gems/ruby-2.6.3/gems/fiddle-1.0.3/ext/fiddle
make "DESTDIR=" clean

current directory: /Users/yaroslav/.rvm/gems/ruby-2.6.3/gems/fiddle-1.0.3/ext/fiddle
make "DESTDIR="
compiling closure.c
compiling conversions.c
compiling fiddle.c
compiling function.c
function.c:285:22: error: implicit declaration of function 'ffi_prep_cif_var' is invalid in C99 [-Werror,-Wimplicit-function-declaration]
            result = ffi_prep_cif_var(args.cif,
                     ^
function.c:285:22: note: did you mean 'ffi_prep_cif'?
/Library/Developer/CommandLineTools/SDKs/MacOSX10.14.sdk/usr/include/ffi/ffi.h:312:1: note: 'ffi_prep_cif' declared here
ffi_prep_cif(
^
1 error generated.
make: *** [function.o] Error 1

make failed, exit code 2

Gem files will remain installed in /Users/yaroslav/.rvm/gems/ruby-2.6.3/gems/fiddle-1.0.3 for inspection.
Results logged to /Users/yaroslav/.rvm/gems/ruby-2.6.3/extensions/x86_64-darwin-18/2.6.0/fiddle-1.0.3/gem_make.out
Gems updated: fiddle
[2020-12-07 15:42:27] ~ $ xcodebuild -version
Xcode 12.2
Build version 12B45b

Could you also show the following:

  • /Users/yaroslav/.rvm/gems/ruby-2.6.3/extensions/x86_64-darwin-18/2.6.0/fiddle-1.0.3/gem_make.out
  • /Users/yaroslav/.rvm/gems/ruby-2.6.3/gems/fiddle-1.0.3/ext/fiddle/Makefile
[2020-12-10 00:49:12] ~ $ cat /Users/yaroslav/.rvm/gems/ruby-2.6.3/extensions/x86_64-darwin-18/2.6.0/fiddle-1.0.3/gem_make.out
current directory: /Users/yaroslav/.rvm/gems/ruby-2.6.3/gems/fiddle-1.0.3/ext/fiddle
/Users/yaroslav/.rvm/rubies/ruby-2.6.3/bin/ruby -I /Users/yaroslav/.rvm/rubies/ruby-2.6.3/lib/ruby/site_ruby/2.6.0 -r ./siteconf20201207-71505-11gs0ii.rb extconf.rb
checking for ffi.h... yes
checking for -lffi... yes
libffi_version: 2.1.0
checking for ffi_prep_cif_var() in ffi.h... yes
checking for sys/mman.h... yes
checking for dlfcn.h... yes
checking for -ldl... yes
checking for dlopen()... yes
checking for dlclose()... yes
checking for dlsym()... yes
checking for dlerror()... yes
checking for FFI_STDCALL in ffi.h... no
checking signedness of size_t... unsigned
creating Makefile

current directory: /Users/yaroslav/.rvm/gems/ruby-2.6.3/gems/fiddle-1.0.3/ext/fiddle
make "DESTDIR=" clean

current directory: /Users/yaroslav/.rvm/gems/ruby-2.6.3/gems/fiddle-1.0.3/ext/fiddle
make "DESTDIR="
compiling closure.c
compiling conversions.c
compiling fiddle.c
compiling function.c
function.c:285:22: error: implicit declaration of function 'ffi_prep_cif_var' is invalid in C99 [-Werror,-Wimplicit-function-declaration]
            result = ffi_prep_cif_var(args.cif,
                     ^
function.c:285:22: note: did you mean 'ffi_prep_cif'?
/Library/Developer/CommandLineTools/SDKs/MacOSX10.14.sdk/usr/include/ffi/ffi.h:312:1: note: 'ffi_prep_cif' declared here
ffi_prep_cif(
^
1 error generated.
make: *** [function.o] Error 1

make failed, exit code 2
[2020-12-10 00:49:13] ~ $ cat /Users/yaroslav/.rvm/gems/ruby-2.6.3/gems/fiddle-1.0.3/ext/fiddle/Makefile

SHELL = /bin/sh

# V=0 quiet, V=1 verbose.  other values don't work.
V = 0
Q1 = $(V:1=)
Q = $(Q1:0=@)
ECHO1 = $(V:1=@ :)
ECHO = $(ECHO1:0=@ echo)
NULLCMD = :

#### Start of system configuration section. ####

srcdir = .
topdir = /Users/yaroslav/.rvm/rubies/ruby-2.6.3/include/ruby-2.6.0
hdrdir = $(topdir)
arch_hdrdir = /Users/yaroslav/.rvm/rubies/ruby-2.6.3/include/ruby-2.6.0/x86_64-darwin18
PATH_SEPARATOR = :
VPATH = $(srcdir):$(arch_hdrdir)/ruby:$(hdrdir)/ruby
prefix = $(DESTDIR)/Users/yaroslav/.rvm/rubies/ruby-2.6.3
rubysitearchprefix = $(rubylibprefix)/$(sitearch)
rubyarchprefix = $(rubylibprefix)/$(arch)
rubylibprefix = $(libdir)/$(RUBY_BASE_NAME)
exec_prefix = $(prefix)
vendorarchhdrdir = $(vendorhdrdir)/$(sitearch)
sitearchhdrdir = $(sitehdrdir)/$(sitearch)
rubyarchhdrdir = $(rubyhdrdir)/$(arch)
vendorhdrdir = $(rubyhdrdir)/vendor_ruby
sitehdrdir = $(rubyhdrdir)/site_ruby
rubyhdrdir = $(includedir)/$(RUBY_VERSION_NAME)
vendorarchdir = $(vendorlibdir)/$(sitearch)
vendorlibdir = $(vendordir)/$(ruby_version)
vendordir = $(rubylibprefix)/vendor_ruby
sitearchdir = $(DESTDIR)./.gem.20201207-71505-13argxi
sitelibdir = $(DESTDIR)./.gem.20201207-71505-13argxi
sitedir = $(rubylibprefix)/site_ruby
rubyarchdir = $(rubylibdir)/$(arch)
rubylibdir = $(rubylibprefix)/$(ruby_version)
sitearchincludedir = $(includedir)/$(sitearch)
archincludedir = $(includedir)/$(arch)
sitearchlibdir = $(libdir)/$(sitearch)
archlibdir = $(libdir)/$(arch)
ridir = $(datarootdir)/$(RI_BASE_NAME)
mandir = $(datarootdir)/man
localedir = $(datarootdir)/locale
libdir = $(exec_prefix)/lib
psdir = $(docdir)
pdfdir = $(docdir)
dvidir = $(docdir)
htmldir = $(docdir)
infodir = $(datarootdir)/info
docdir = $(datarootdir)/doc/$(PACKAGE)
oldincludedir = $(SDKROOT)/usr/include
includedir = $(prefix)/include
localstatedir = $(prefix)/var
sharedstatedir = $(prefix)/com
sysconfdir = $(prefix)/etc
datadir = $(datarootdir)
datarootdir = $(prefix)/share
libexecdir = $(exec_prefix)/libexec
sbindir = $(exec_prefix)/sbin
bindir = $(exec_prefix)/bin
archdir = $(rubyarchdir)


CC_WRAPPER =
CC = gcc
CXX = g++
LIBRUBY = $(LIBRUBY_SO)
LIBRUBY_A = lib$(RUBY_SO_NAME)-static.a
LIBRUBYARG_SHARED = -l$(RUBY_SO_NAME)
LIBRUBYARG_STATIC = -l$(RUBY_SO_NAME)-static -framework Security -framework Foundation $(MAINLIBS)
empty =
OUTFLAG = -o $(empty)
COUTFLAG = -o $(empty)
CSRCFLAG = $(empty)

RUBY_EXTCONF_H =
cflags   = $(optflags) $(debugflags) $(warnflags)
cxxflags = $(optflags) $(debugflags) $(warnflags)
optflags = -O3
debugflags = -ggdb3
warnflags = -Wall -Wextra -Wdeclaration-after-statement -Wdeprecated-declarations -Wdivision-by-zero -Wimplicit-function-declaration -Wimplicit-int -Wpointer-arith -Wshorten-64-to-32 -Wwrite-strings -Wmissing-noreturn -Wno-constant-logical-operand -Wno-long-long -Wno-missing-field-initializers -Wno-overlength-strings -Wno-parentheses-equality -Wno-self-assign -Wno-tautological-compare -Wno-unused-parameter -Wno-unused-value -Wunused-variable -Wextra-tokens
cppflags =
CCDLFLAGS = -fno-common
CFLAGS   = $(CCDLFLAGS) $(cflags)  -fno-common -pipe  $(ARCH_FLAG)
INCFLAGS = -I. -I$(arch_hdrdir) -I$(hdrdir)/ruby/backward -I$(hdrdir) -I$(srcdir) -I/Library/Developer/CommandLineTools/SDKs/MacOSX10.14.sdk/usr/include/ffi -I$(top_srcdir)
DEFS     =
CPPFLAGS = -DHAVE_FFI_H -DRUBY_LIBFFI_MODVERSION=2001000 -DHAVE_FFI_PREP_CIF_VAR -DHAVE_SYS_MMAN_H -DHAVE_DLFCN_H -DHAVE_DLOPEN -DHAVE_DLCLOSE -DHAVE_DLSYM -DHAVE_DLERROR -DSIGNEDNESS_OF_SIZE_T=+1 -I/usr/local/opt/icu4c/include -I/usr/local/opt/libyaml/include -I/usr/local/opt/libksba/include -I/usr/local/opt/readline/include -I/usr/local/opt/zlib/include -I/usr/local/opt/openssl@1.1/include -D_XOPEN_SOURCE -D_DARWIN_C_SOURCE -D_DARWIN_UNLIMITED_SELECT -D_REENTRANT $(DEFS) $(cppflags)
CXXFLAGS = $(CCDLFLAGS) $(cxxflags)  $(ARCH_FLAG)
ldflags  = -L. -L/usr/local/opt/icu4c/lib -fstack-protector-strong -L/usr/local/lib -L/usr/local/opt/libyaml/lib -L/usr/local/opt/libksba/lib -L/usr/local/opt/readline/lib -L/usr/local/opt/zlib/lib -L/usr/local/opt/openssl@1.1/lib
dldflags = -L/usr/local/opt/icu4c/lib -Wl,-undefined,dynamic_lookup -Wl,-multiply_defined,suppress -L/usr/local/opt/libyaml/lib -L/usr/local/opt/libksba/lib -L/usr/local/opt/readline/lib -L/usr/local/opt/zlib/lib -L/usr/local/opt/openssl@1.1/lib
ARCH_FLAG =
DLDFLAGS = $(ldflags) $(dldflags) $(ARCH_FLAG)
LDSHARED = $(CC) -dynamic -bundle
LDSHAREDXX = $(CXX) -dynamic -bundle
AR = libtool -static
EXEEXT =

RUBY_INSTALL_NAME = $(RUBY_BASE_NAME)
RUBY_SO_NAME = ruby.2.6
RUBYW_INSTALL_NAME =
RUBY_VERSION_NAME = $(RUBY_BASE_NAME)-$(ruby_version)
RUBYW_BASE_NAME = rubyw
RUBY_BASE_NAME = ruby

arch = x86_64-darwin18
sitearch = $(arch)
ruby_version = 2.6.0
ruby = $(bindir)/$(RUBY_BASE_NAME)
RUBY = $(ruby)
ruby_headers = $(hdrdir)/ruby.h $(hdrdir)/ruby/backward.h $(hdrdir)/ruby/ruby.h $(hdrdir)/ruby/defines.h $(hdrdir)/ruby/missing.h $(hdrdir)/ruby/intern.h $(hdrdir)/ruby/st.h $(hdrdir)/ruby/subst.h $(arch_hdrdir)/ruby/config.h

RM = rm -f
RM_RF = $(RUBY) -run -e rm -- -rf
RMDIRS = rmdir -p
MAKEDIRS = /usr/local/opt/coreutils/bin/gmkdir -p
INSTALL = /usr/local/opt/coreutils/bin/ginstall -c
INSTALL_PROG = $(INSTALL) -m 0755
INSTALL_DATA = $(INSTALL) -m 644
COPY = cp
TOUCH = exit >

#### End of system configuration section. ####

preload =
libpath = . $(libdir) /usr/local/opt/libyaml/lib /usr/local/opt/libksba/lib /usr/local/opt/readline/lib /usr/local/opt/zlib/lib /usr/local/opt/openssl@1.1/lib
LIBPATH =  -L. -L$(libdir) -L/usr/local/opt/libyaml/lib -L/usr/local/opt/libksba/lib -L/usr/local/opt/readline/lib -L/usr/local/opt/zlib/lib -L/usr/local/opt/openssl@1.1/lib
DEFFILE =

CLEANFILES = mkmf.log
DISTCLEANFILES =
DISTCLEANDIRS =

extout =
extout_prefix =
target_prefix =
LOCAL_LIBS =
LIBS = $(LIBRUBYARG_SHARED) -ldl -lffi  -lffi
ORIG_SRCS = closure.c conversions.c fiddle.c function.c handle.c pinned.c pointer.c
SRCS = $(ORIG_SRCS)
OBJS = closure.o conversions.o fiddle.o function.o handle.o pinned.o pointer.o
HDRS = $(srcdir)/fiddle.h $(srcdir)/conversions.h $(srcdir)/closure.h $(srcdir)/function.h
LOCAL_HDRS =
TARGET = fiddle
TARGET_NAME = fiddle
TARGET_ENTRY = Init_$(TARGET_NAME)
DLLIB = $(TARGET).bundle
EXTSTATIC =
STATIC_LIB =

TIMESTAMP_DIR = .
BINDIR        = $(bindir)
RUBYCOMMONDIR = $(sitedir)$(target_prefix)
RUBYLIBDIR    = $(sitelibdir)$(target_prefix)
RUBYARCHDIR   = $(sitearchdir)$(target_prefix)
HDRDIR        = $(rubyhdrdir)/ruby$(target_prefix)
ARCHHDRDIR    = $(rubyhdrdir)/$(arch)/ruby$(target_prefix)
TARGET_SO_DIR =
TARGET_SO     = $(TARGET_SO_DIR)$(DLLIB)
CLEANLIBS     = $(TARGET_SO)
CLEANOBJS     = *.o  *.bak
LIBFFI_CLEAN = none

all:    $(DLLIB)
static: $(STATIC_LIB)
.PHONY: all install static install-so install-rb
.PHONY: clean clean-so clean-static clean-rb

clean-static::
clean-rb-default::
clean-rb::
clean-so::
clean: clean-so clean-static clean-rb-default clean-rb
		-$(Q)$(RM) $(CLEANLIBS) $(CLEANOBJS) $(CLEANFILES) .*.time

distclean-rb-default::
distclean-rb::
distclean-so::
distclean-static::
distclean: clean distclean-so distclean-static distclean-rb-default distclean-rb
		-$(Q)$(RM) Makefile $(RUBY_EXTCONF_H) conftest.* mkmf.log
		-$(Q)$(RM) core ruby$(EXEEXT) *~ $(DISTCLEANFILES)
		-$(Q)$(RMDIRS) $(DISTCLEANDIRS) 2> /dev/null || true

realclean: distclean
install: install-so install-rb

install-so: $(DLLIB) $(TIMESTAMP_DIR)/.sitearchdir.time
	$(INSTALL_PROG) $(DLLIB) $(RUBYARCHDIR)
clean-static::
	-$(Q)$(RM) $(STATIC_LIB)
install-rb: pre-install-rb do-install-rb install-rb-default
install-rb-default: pre-install-rb-default do-install-rb-default
pre-install-rb: Makefile
pre-install-rb-default: Makefile
do-install-rb:
do-install-rb-default:
pre-install-rb-default:
	@$(NULLCMD)
$(TIMESTAMP_DIR)/.sitearchdir.time:
	$(Q) $(MAKEDIRS) $(@D) $(RUBYARCHDIR)
	$(Q) $(TOUCH) $@

site-install: site-install-so site-install-rb
site-install-so: install-so
site-install-rb: install-rb

.SUFFIXES: .c .m .cc .mm .cxx .cpp .o .S

.cc.o:
	$(ECHO) compiling $(<)
	$(Q) $(CXX) $(INCFLAGS) $(CPPFLAGS) $(CXXFLAGS) $(COUTFLAG)$@ -c $(CSRCFLAG)$<

.cc.S:
	$(ECHO) translating $(<)
	$(Q) $(CXX) $(INCFLAGS) $(CPPFLAGS) $(CXXFLAGS) $(COUTFLAG)$@ -S $(CSRCFLAG)$<

.mm.o:
	$(ECHO) compiling $(<)
	$(Q) $(CXX) $(INCFLAGS) $(CPPFLAGS) $(CXXFLAGS) $(COUTFLAG)$@ -c $(CSRCFLAG)$<

.mm.S:
	$(ECHO) translating $(<)
	$(Q) $(CXX) $(INCFLAGS) $(CPPFLAGS) $(CXXFLAGS) $(COUTFLAG)$@ -S $(CSRCFLAG)$<

.cxx.o:
	$(ECHO) compiling $(<)
	$(Q) $(CXX) $(INCFLAGS) $(CPPFLAGS) $(CXXFLAGS) $(COUTFLAG)$@ -c $(CSRCFLAG)$<

.cxx.S:
	$(ECHO) translating $(<)
	$(Q) $(CXX) $(INCFLAGS) $(CPPFLAGS) $(CXXFLAGS) $(COUTFLAG)$@ -S $(CSRCFLAG)$<

.cpp.o:
	$(ECHO) compiling $(<)
	$(Q) $(CXX) $(INCFLAGS) $(CPPFLAGS) $(CXXFLAGS) $(COUTFLAG)$@ -c $(CSRCFLAG)$<

.cpp.S:
	$(ECHO) translating $(<)
	$(Q) $(CXX) $(INCFLAGS) $(CPPFLAGS) $(CXXFLAGS) $(COUTFLAG)$@ -S $(CSRCFLAG)$<

.c.o:
	$(ECHO) compiling $(<)
	$(Q) $(CC) $(INCFLAGS) $(CPPFLAGS) $(CFLAGS) $(COUTFLAG)$@ -c $(CSRCFLAG)$<

.c.S:
	$(ECHO) translating $(<)
	$(Q) $(CC) $(INCFLAGS) $(CPPFLAGS) $(CFLAGS) $(COUTFLAG)$@ -S $(CSRCFLAG)$<

.m.o:
	$(ECHO) compiling $(<)
	$(Q) $(CC) $(INCFLAGS) $(CPPFLAGS) $(CFLAGS) $(COUTFLAG)$@ -c $(CSRCFLAG)$<

.m.S:
	$(ECHO) translating $(<)
	$(Q) $(CC) $(INCFLAGS) $(CPPFLAGS) $(CFLAGS) $(COUTFLAG)$@ -S $(CSRCFLAG)$<

$(TARGET_SO): $(OBJS) Makefile
	$(ECHO) linking shared-object $(DLLIB)
	-$(Q)$(RM) $(@)
	$(Q) $(LDSHARED) -o $@ $(OBJS) $(LIBPATH) $(DLDFLAGS) $(LOCAL_LIBS) $(LIBS)
	$(Q) $(POSTLINK)



###
PWD =

CONFIGURE_LIBFFI = \
	$(LIBFFI_CONFIGURE) --disable-shared \
		--host=$(LIBFFI_ARCH) --enable-builddir=$(arch) \
		CC="$(CC)" CFLAGS="$(LIBFFI_CFLAGS)" \
		LD="$(LD)" LDFLAGS="$(LIBFFI_LDFLAGS)"

$(STATIC_LIB) $(RUBYARCHDIR)/$(DLLIB) $(DLLIB): $(LIBFFI_A)

$(OBJS): $(FFI_H)

.PHONY: .FORCE hdr

.FORCE:

hdr: $(FFI_H)

configure-libffi build-libffi: .FORCE
configure-libffi \
$(LIBFFI_DIR)/include/ffi.h \
$(LIBFFI_DIR)/include/ffitarget.h \
$(LIBFFI_DIR)/fficonfig.h \
$(LIBFFI_DIR)/Makefile:
	$(Q) $(MAKEDIRS) $(LIBFFI_DIR)
	$(Q) $(CONFIGURE_LIBFFI)

build-libffi $(LIBFFI_A):
	$(Q) $(SUBMAKE_PRE) $(MAKE) $(SUBMAKE_ARG)

clean-none:
clean-libffi:
	$(Q) $(SUBMAKE_PRE) $(MAKE) $(SUBMAKE_ARG) clean

distclean-none:
distclean-libffi:
	$(Q) $(SUBMAKE_PRE) $(MAKE) $(SUBMAKE_ARG) distclean
	$(Q) $(RM) $(LIBFFI_DIR)/local.exp
	$(Q) $(RUBY) -rfileutils -e "FileUtils.rmdir(Dir.glob(ARGV[0]+'/**/{,.*/}'), :parents=>true)" $(LIBFFI_DIR)

realclean-none:
realclean-libffi:
	$(Q) $(RMALL) $(LIBFFI_DIR)

.PHONY: clean-libffi distclean-libffi realclean-libffi
.PHONY: clean-none distclean-none realclean-none

clean: clean-$(LIBFFI_CLEAN)
distclean: distclean-$(LIBFFI_CLEAN)
realclean: realclean-$(LIBFFI_CLEAN)

.PHONY: configure configure-libffi

closure.o: closure.c
closure.o: closure.h
closure.o: conversions.h
closure.o: fiddle.h
closure.o: function.h
conversions.o: closure.h
conversions.o: conversions.c
conversions.o: conversions.h
conversions.o: fiddle.h
conversions.o: function.h
fiddle.o: closure.h
fiddle.o: conversions.h
fiddle.o: fiddle.c
fiddle.o: fiddle.h
fiddle.o: function.h
function.o: closure.h
function.o: conversions.h
function.o: fiddle.h
function.o: function.c
function.o: function.h
handle.o: closure.h
handle.o: conversions.h
handle.o: fiddle.h
handle.o: function.h
handle.o: handle.c
pointer.o: closure.h
pointer.o: conversions.h
pointer.o: fiddle.h
pointer.o: function.h
pointer.o: pointer.c

Thanks.
#56 will solve this.

Could you try the following?

git clone https://github.com/ruby/fiddle.git
cd fiddle
gem build fiddle.gemspec
gem install ./fiddle-1.0.4.gem

tried both 1.0.4 and 1.0.5, unfortunately no luck with either

[2020-12-10 20:15:12] ~ $ git clone https://github.com/ruby/fiddle.git
Cloning into 'fiddle'...
remote: Enumerating objects: 70, done.
remote: Counting objects: 100% (70/70), done.
remote: Compressing objects: 100% (50/50), done.
remote: Total 2065 (delta 22), reused 40 (delta 14), pack-reused 1995
Receiving objects: 100% (2065/2065), 461.14 KiB | 320.00 KiB/s, done.
Resolving deltas: 100% (946/946), done.
[2020-12-10 20:15:23] ~ $ cd fiddle
[2020-12-10 20:15:25] ~/fiddle $ gem build fiddle.gemspec
WARNING:  description and summary are identical
WARNING:  open-ended dependency on bundler (>= 0, development) is not recommended
  use a bounded requirement, such as '~> x.y'
WARNING:  open-ended dependency on rake (>= 0, development) is not recommended
  use a bounded requirement, such as '~> x.y'
WARNING:  open-ended dependency on rake-compiler (>= 0, development) is not recommended
  use a bounded requirement, such as '~> x.y'
WARNING:  See http://guides.rubygems.org/specification-reference/ for help
  Successfully built RubyGem
  Name: fiddle
  Version: 1.0.5
  File: fiddle-1.0.5.gem
[2020-12-10 20:15:29] ~/fiddle $ gem install ./fiddle-1.0.4.gem
ERROR:  Could not find a valid gem './fiddle-1.0.4.gem' (>= 0) in any repository
[2020-12-10 20:15:44] ~/fiddle $ gem install ./fiddle-1.0.5.gem
Building native extensions. This could take a while...
ERROR:  Error installing ./fiddle-1.0.5.gem:
	ERROR: Failed to build gem native extension.

    current directory: /Users/yaroslav/.rvm/gems/ruby-2.6.3/gems/fiddle-1.0.5/ext/fiddle
/Users/yaroslav/.rvm/rubies/ruby-2.6.3/bin/ruby -I /Users/yaroslav/.rvm/rubies/ruby-2.6.3/lib/ruby/site_ruby/2.6.0 -r ./siteconf20201210-82204-128nze9.rb extconf.rb
checking for ffi.h... yes
checking for -lffi... yes
libffi_version: 2.1.0
checking for ffi_prep_cif_var() in ffi.h... yes
checking for sys/mman.h... yes
checking for dlfcn.h... yes
checking for -ldl... yes
checking for dlopen()... yes
checking for dlclose()... yes
checking for dlsym()... yes
checking for dlerror()... yes
checking for FFI_STDCALL in ffi.h... no
checking signedness of size_t... unsigned
checking for ruby/memory_view.h... no
creating Makefile

current directory: /Users/yaroslav/.rvm/gems/ruby-2.6.3/gems/fiddle-1.0.5/ext/fiddle
make "DESTDIR=" clean

current directory: /Users/yaroslav/.rvm/gems/ruby-2.6.3/gems/fiddle-1.0.5/ext/fiddle
make "DESTDIR="
compiling closure.c
compiling conversions.c
compiling fiddle.c
compiling function.c
function.c:298:22: error: implicit declaration of function 'ffi_prep_cif_var' is invalid in C99 [-Werror,-Wimplicit-function-declaration]
            result = ffi_prep_cif_var(args.cif,
                     ^
function.c:298:22: note: did you mean 'ffi_prep_cif'?
/Library/Developer/CommandLineTools/SDKs/MacOSX10.14.sdk/usr/include/ffi/ffi.h:312:1: note: 'ffi_prep_cif' declared here
ffi_prep_cif(
^
1 error generated.
make: *** [function.o] Error 1

make failed, exit code 2

Gem files will remain installed in /Users/yaroslav/.rvm/gems/ruby-2.6.3/gems/fiddle-1.0.5 for inspection.
Results logged to /Users/yaroslav/.rvm/gems/ruby-2.6.3/extensions/x86_64-darwin-18/2.6.0/fiddle-1.0.5/gem_make.out

I've fixed this.
This is a libffi.pc problem provided by Homebrew: Homebrew/brew#10079

I believe I am getting a similar, if not the same, error on an M1 Monterey machine. Here is my gem_make.out
gem_make.txt

It seems that you use Ruby 2.6. But Ruby 2.6 reached EOL. Could you try more newer Ruby?

Thanks. It got sorted after I installed XCODE from the app store. Don't know how, but I'll take it.