ruby / curses

Ruby binding for curses, ncurses, and PDCurses. Formerly part of the ruby standard library.
Other
297 stars 34 forks source link

Does not compile and cannot be installed on macOS (Apple Silicon) #85

Closed pusewicz closed 7 months ago

pusewicz commented 8 months ago

Trying to install the gem as per documentation. Tried Rubies 3.3, 3.2, 3.1.

$ gem install curses -- --use-system-libraries --with-ncurses-dir=/opt/homebrew/opt/ncurses
Fetching curses-1.4.4.gem
Building native extensions with: '--use-system-libraries --with-ncurses-dir=/opt/homebrew/opt/ncurses'
This could take a while...
ERROR:  Error installing curses:
    ERROR: Failed to build gem native extension.

    current directory: /Users/piotr/.gem/ruby/3.1.3/gems/curses-1.4.4/ext/curses
/Users/piotr/.rubies/ruby-3.1.3/bin/ruby -I /Users/piotr/.rubies/ruby-3.1.3/lib/ruby/3.1.0 extconf.rb --use-system-libraries --with-ncurses-dir\=/opt/homebrew/opt/ncurses
checking for tgetent() in -ltinfow... no
checking for tgetent() in -ltinfo... no
checking for tgetent() in -ltermcap... yes
checking for ncursesw/curses.h... yes
checking for initscr() in -lncursesw... yes
header: ncursesw/curses.h
library: ncursesw
checking for beep()... yes
checking for bkgd()... yes
checking for bkgdset()... yes
checking for curs_set()... yes
checking for deleteln()... yes
checking for doupdate()... yes
checking for flash()... yes
checking for getbkgd()... yes
checking for getnstr()... yes
checking for init()... no
checking for init in ncursesw/curses.h... no
checking for isendwin()... yes
checking for keyname()... yes
checking for keypad()... yes
checking for resizeterm()... yes
checking for scrl()... yes
checking for set()... no
checking for set in ncursesw/curses.h... no
checking for setscrreg()... yes
checking for ungetch()... yes
checking for addnwstr()... yes
checking for wattroff()... yes
checking for wattron()... yes
checking for wattrset()... yes
checking for wbkgd()... yes
checking for wbkgdset()... yes
checking for wdeleteln()... yes
checking for wgetnstr()... yes
checking for wresize()... yes
checking for wscrl()... yes
checking for wsetscrreg()... yes
checking for werase()... yes
checking for redrawwin()... yes
checking for waddnwstr()... yes
checking for mvderwin()... yes
checking for derwin()... yes
checking for touchwin()... yes
checking for untouchwin()... yes
checking for wtouchln()... yes
checking for is_linetouched()... yes
checking for is_wintouched()... yes
checking for def_prog_mode()... yes
checking for reset_prog_mode()... yes
checking for timeout()... yes
checking for wtimeout()... yes
checking for nodelay()... yes
checking for init_color()... yes
checking for wcolor_set()... yes
checking for use_default_colors()... yes
checking for assume_default_colors()... yes
checking for newpad()... yes
checking for unget_wch()... yes
checking for get_wch()... yes
checking for wget_wch()... yes
checking for PDC_get_key_modifiers()... no
checking for PDC_get_key_modifiers in ncursesw/curses.h... no
checking for convertible type of chtype... unsigned int
checking for _XOPEN_SOURCE_EXTENDED... yes
checking for ESCDELAY in ncursesw/curses.h... yes
checking for TABSIZE in ncursesw/curses.h... yes
checking for COLORS in ncursesw/curses.h... yes
checking for COLOR_PAIRS in ncursesw/curses.h... yes
checking for function curses_version in ncursesw/curses.h... yes
checking for variable curses_version in ncursesw/curses.h... no
checking for ncursesw/menu.h... yes
checking for new_menu() in -lmenuw... yes
checking for ncursesw/form.h... yes
checking for new_form() in -lformw... yes
checking for form_driver_w()... yes
checking for sizeof(WINDOW) is available... yes
checking for sizeof(MEVENT) is available... yes
checking for sizeof(ITEM) is available... yes
checking for sizeof(MENU) is available... yes
checking for sizeof(FIELD) is available... yes
checking for sizeof(FORM) is available... yes
creating extconf.h
creating Makefile

current directory: /Users/piotr/.gem/ruby/3.1.3/gems/curses-1.4.4/ext/curses
make DESTDIR\= sitearchdir\=./.gem.20240313-99458-tl51wo sitelibdir\=./.gem.20240313-99458-tl51wo clean

current directory: /Users/piotr/.gem/ruby/3.1.3/gems/curses-1.4.4/ext/curses
make DESTDIR\= sitearchdir\=./.gem.20240313-99458-tl51wo sitelibdir\=./.gem.20240313-99458-tl51wo
compiling curses.c
curses.c:3072:1: warning: function 'no_item' could be declared with attribute 'noreturn' [-Wmissing-noreturn]
{
^
curses.c:3270:1: warning: function 'no_menu' could be declared with attribute 'noreturn' [-Wmissing-noreturn]
{
^
curses.c:5103:5: error: incompatible function pointer types passing 'VALUE (VALUE, VALUE)' (aka 'unsigned long (unsigned long, unsigned long)') to parameter of type 'VALUE (*)(VALUE)' (aka 'unsigned long (*)(unsigned long)') [-Wincompatible-function-pointer-types]
    rb_define_method(cItem, "opts", item_opts_m, 0);
    ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/Users/piotr/.rubies/ruby-3.1.3/include/ruby-3.1.0/ruby/internal/anyargs.h:287:135: note: expanded from macro 'rb_define_method'
#define rb_define_method(klass, mid, func, arity)           RBIMPL_ANYARGS_DISPATCH_rb_define_method((arity), (func))((klass), (mid), (func), (arity))
                                                                                                                                      ^~~~~~
/Users/piotr/.rubies/ruby-3.1.3/include/ruby-3.1.0/ruby/internal/anyargs.h:276:1: note: passing argument to parameter here
RBIMPL_ANYARGS_DECL(rb_define_method, VALUE, const char *)
^
/Users/piotr/.rubies/ruby-3.1.3/include/ruby-3.1.0/ruby/internal/anyargs.h:254:72: note: expanded from macro 'RBIMPL_ANYARGS_DECL'
RBIMPL_ANYARGS_ATTRSET(sym) static void sym ## _00(__VA_ARGS__, VALUE(*)(VALUE), int); \
                                                                       ^
curses.c:5124:5: error: incompatible function pointer types passing 'VALUE (VALUE, VALUE)' (aka 'unsigned long (unsigned long, unsigned long)') to parameter of type 'VALUE (*)(VALUE)' (aka 'unsigned long (*)(unsigned long)') [-Wincompatible-function-pointer-types]
    rb_define_method(cMenu, "fore", menu_get_fore, 0);
    ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/Users/piotr/.rubies/ruby-3.1.3/include/ruby-3.1.0/ruby/internal/anyargs.h:287:135: note: expanded from macro 'rb_define_method'
#define rb_define_method(klass, mid, func, arity)           RBIMPL_ANYARGS_DISPATCH_rb_define_method((arity), (func))((klass), (mid), (func), (arity))
                                                                                                                                      ^~~~~~
/Users/piotr/.rubies/ruby-3.1.3/include/ruby-3.1.0/ruby/internal/anyargs.h:276:1: note: passing argument to parameter here
RBIMPL_ANYARGS_DECL(rb_define_method, VALUE, const char *)
^
/Users/piotr/.rubies/ruby-3.1.3/include/ruby-3.1.0/ruby/internal/anyargs.h:254:72: note: expanded from macro 'RBIMPL_ANYARGS_DECL'
RBIMPL_ANYARGS_ATTRSET(sym) static void sym ## _00(__VA_ARGS__, VALUE(*)(VALUE), int); \
                                                                       ^
curses.c:5126:5: error: incompatible function pointer types passing 'VALUE (VALUE, VALUE)' (aka 'unsigned long (unsigned long, unsigned long)') to parameter of type 'VALUE (*)(VALUE)' (aka 'unsigned long (*)(unsigned long)') [-Wincompatible-function-pointer-types]
    rb_define_method(cMenu, "back", menu_get_back, 0);
    ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/Users/piotr/.rubies/ruby-3.1.3/include/ruby-3.1.0/ruby/internal/anyargs.h:287:135: note: expanded from macro 'rb_define_method'
#define rb_define_method(klass, mid, func, arity)           RBIMPL_ANYARGS_DISPATCH_rb_define_method((arity), (func))((klass), (mid), (func), (arity))
                                                                                                                                      ^~~~~~
/Users/piotr/.rubies/ruby-3.1.3/include/ruby-3.1.0/ruby/internal/anyargs.h:276:1: note: passing argument to parameter here
RBIMPL_ANYARGS_DECL(rb_define_method, VALUE, const char *)
^
/Users/piotr/.rubies/ruby-3.1.3/include/ruby-3.1.0/ruby/internal/anyargs.h:254:72: note: expanded from macro 'RBIMPL_ANYARGS_DECL'
RBIMPL_ANYARGS_ATTRSET(sym) static void sym ## _00(__VA_ARGS__, VALUE(*)(VALUE), int); \
                                                                       ^
curses.c:5130:5: error: incompatible function pointer types passing 'VALUE (VALUE, VALUE)' (aka 'unsigned long (unsigned long, unsigned long)') to parameter of type 'VALUE (*)(VALUE)' (aka 'unsigned long (*)(unsigned long)') [-Wincompatible-function-pointer-types]
    rb_define_method(cMenu, "opts", menu_opts_m, 0);
    ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/Users/piotr/.rubies/ruby-3.1.3/include/ruby-3.1.0/ruby/internal/anyargs.h:287:135: note: expanded from macro 'rb_define_method'
#define rb_define_method(klass, mid, func, arity)           RBIMPL_ANYARGS_DISPATCH_rb_define_method((arity), (func))((klass), (mid), (func), (arity))
                                                                                                                                      ^~~~~~
/Users/piotr/.rubies/ruby-3.1.3/include/ruby-3.1.0/ruby/internal/anyargs.h:276:1: note: passing argument to parameter here
RBIMPL_ANYARGS_DECL(rb_define_method, VALUE, const char *)
^
/Users/piotr/.rubies/ruby-3.1.3/include/ruby-3.1.0/ruby/internal/anyargs.h:254:72: note: expanded from macro 'RBIMPL_ANYARGS_DECL'
RBIMPL_ANYARGS_ATTRSET(sym) static void sym ## _00(__VA_ARGS__, VALUE(*)(VALUE), int); \
                                                                       ^
2 warnings and 4 errors generated.
make: *** [curses.o] Error 1

make failed, exit code 2

Gem files will remain installed in /Users/piotr/.gem/ruby/3.1.3/gems/curses-1.4.4 for inspection.
Results logged to /Users/piotr/.gem/ruby/3.1.3/extensions/arm64-darwin-22/3.1.0-static/curses-1.4.4/gem_make.out
hsbt commented 8 months ago

I could reproduce it.

But I'm not sure why It only happens with gem install curses. Because I couldn't reproduce it with cd ext/curses; ruby extconf.rb; make.

pusewicz commented 8 months ago

@hsbt Yes, same here. I was able to compile it just fine with manual invocation like you also did.

kateinoigakukun commented 8 months ago

Hmm, I can't reproduce it on my end. Could you share your rbconfig.rb if you don't mind? You can find the file by find ~/.rubies/ruby-3.3.0/ -name rbconfig.rb.

pusewicz commented 8 months ago
# encoding: ascii-8bit
# frozen-string-literal: false
#
# The module storing Ruby interpreter configurations on building.
#
# This file was created by mkconfig.rb when ruby was built.  It contains
# build information for ruby which is used e.g. by mkmf to build
# compatible native extensions.  Any changes made to this file will be
# lost the next time ruby is built.

module RbConfig
  RUBY_VERSION.start_with?("3.3.") or
    raise "ruby lib version (3.3.0) doesn't match executable version (#{RUBY_VERSION})"

  # Ruby installed directory.
  TOPDIR = File.dirname(__FILE__).chomp!("/lib/ruby/3.3.0/arm64-darwin23")
  # DESTDIR on make install.
  DESTDIR = '' unless defined? DESTDIR
  # The hash configurations stored.
  CONFIG = {}
  CONFIG["DESTDIR"] = DESTDIR
  CONFIG["MAJOR"] = "3"
  CONFIG["MINOR"] = "3"
  CONFIG["TEENY"] = "0"
  CONFIG["PATCHLEVEL"] = "0"
  CONFIG["INSTALL"] = '/opt/homebrew/bin/ginstall -c'
  CONFIG["EXEEXT"] = ""
  CONFIG["prefix"] = (TOPDIR || DESTDIR + "/Users/piotr/.rubies/ruby-3.3.0")
  CONFIG["ruby_install_name"] = "$(RUBY_BASE_NAME)"
  CONFIG["RUBY_INSTALL_NAME"] = "$(RUBY_BASE_NAME)"
  CONFIG["RUBY_SO_NAME"] = "$(RUBY_BASE_NAME).$(RUBY_API_VERSION)"
  CONFIG["exec"] = "exec"
  CONFIG["ruby_pc"] = "ruby-3.3.pc"
  CONFIG["CC_WRAPPER"] = ""
  CONFIG["PACKAGE"] = "ruby"
  CONFIG["BUILTIN_TRANSSRCS"] = " enc/trans/newline.c"
  CONFIG["MKMF_VERBOSE"] = "0"
  CONFIG["MANTYPE"] = "doc"
  CONFIG["vendorarchhdrdir"] = "$(vendorhdrdir)/$(sitearch)"
  CONFIG["sitearchhdrdir"] = "$(sitehdrdir)/$(sitearch)"
  CONFIG["rubyarchhdrdir"] = "$(rubyhdrdir)/$(arch)"
  CONFIG["vendorhdrdir"] = "$(rubyhdrdir)/vendor_ruby"
  CONFIG["sitehdrdir"] = "$(rubyhdrdir)/site_ruby"
  CONFIG["rubyhdrdir"] = "$(includedir)/$(RUBY_VERSION_NAME)"
  CONFIG["RUBY_SEARCH_PATH"] = ""
  CONFIG["UNIVERSAL_INTS"] = ""
  CONFIG["UNIVERSAL_ARCHNAMES"] = ""
  CONFIG["configure_args"] = " '--prefix=/Users/piotr/.rubies/ruby-3.3.0' '--with-opt-dir=/opt/homebrew/opt/readline:/opt/homebrew/opt/libyaml:/opt/homebrew/opt/gdbm' '--with-openssl-dir=/opt/homebrew/opt/openssl@3'"
  CONFIG["CONFIGURE"] = "configure"
  CONFIG["vendorarchdir"] = "$(vendorlibdir)/$(sitearch)"
  CONFIG["vendorlibdir"] = "$(vendordir)/$(ruby_version)"
  CONFIG["vendordir"] = "$(rubylibprefix)/vendor_ruby"
  CONFIG["sitearchdir"] = "$(sitelibdir)/$(sitearch)"
  CONFIG["sitelibdir"] = "$(sitedir)/$(ruby_version)"
  CONFIG["sitedir"] = "$(rubylibprefix)/site_ruby"
  CONFIG["rubyarchdir"] = "$(rubylibdir)/$(arch)"
  CONFIG["rubylibdir"] = "$(rubylibprefix)/$(ruby_version)"
  CONFIG["ruby_version"] = "3.3.0"
  CONFIG["sitearch"] = "$(arch)"
  CONFIG["arch"] = "arm64-darwin23"
  CONFIG["sitearchincludedir"] = "$(includedir)/$(sitearch)"
  CONFIG["archincludedir"] = "$(includedir)/$(arch)"
  CONFIG["sitearchlibdir"] = "$(libdir)/$(sitearch)"
  CONFIG["archlibdir"] = "$(libdir)/$(arch)"
  CONFIG["libdirname"] = "libdir"
  CONFIG["RUBY_EXEC_PREFIX"] = "/Users/piotr/.rubies/ruby-3.3.0"
  CONFIG["RUBY_LIB_VERSION"] = ""
  CONFIG["RUBY_LIB_VERSION_STYLE"] = "3\t/* full */"
  CONFIG["RI_BASE_NAME"] = "ri"
  CONFIG["ridir"] = "$(datarootdir)/$(RI_BASE_NAME)"
  CONFIG["rubysitearchprefix"] = "$(rubylibprefix)/$(sitearch)"
  CONFIG["rubyarchprefix"] = "$(rubylibprefix)/$(arch)"
  CONFIG["MAKEFILES"] = "Makefile GNUmakefile"
  CONFIG["USE_LLVM_WINDRES"] = ""
  CONFIG["PLATFORM_DIR"] = ""
  CONFIG["COROUTINE_TYPE"] = "arm64"
  CONFIG["THREAD_MODEL"] = "pthread"
  CONFIG["SYMBOL_PREFIX"] = "_"
  CONFIG["EXPORT_PREFIX"] = ""
  CONFIG["COMMON_HEADERS"] = ""
  CONFIG["COMMON_MACROS"] = ""
  CONFIG["COMMON_LIBS"] = ""
  CONFIG["MAINLIBS"] = "-lgmp -ldl -lobjc -lpthread "
  CONFIG["ENABLE_SHARED"] = "no"
  CONFIG["DLDSHARED"] = "$(CC) -dynamiclib"
  CONFIG["DLDLIBS"] = ""
  CONFIG["SOLIBS"] = "$(MAINLIBS)"
  CONFIG["LIBRUBYARG_SHARED"] = ""
  CONFIG["LIBRUBYARG_STATIC"] = "-l$(RUBY_SO_NAME)-static -framework CoreFoundation $(MAINLIBS)"
  CONFIG["LIBRUBYARG"] = "$(LIBRUBYARG_STATIC)"
  CONFIG["LIBRUBY"] = "$(LIBRUBY_A)"
  CONFIG["LIBRUBY_ALIASES"] = "lib$(RUBY_SO_NAME).$(SOEXT)"
  CONFIG["LIBRUBY_SONAME"] = "lib$(RUBY_SO_NAME).$(SOEXT).$(RUBY_API_VERSION)"
  CONFIG["LIBRUBY_SO"] = "lib$(RUBY_SO_NAME).$(SOEXT).$(RUBY_PROGRAM_VERSION)"
  CONFIG["LIBRUBY_A"] = "lib$(RUBY_SO_NAME)-static.a"
  CONFIG["RUBYW_INSTALL_NAME"] = ""
  CONFIG["rubyw_install_name"] = ""
  CONFIG["EXTDLDFLAGS"] = "-bundle_loader '$(BUILTRUBY)'"
  CONFIG["EXTLDFLAGS"] = ""
  CONFIG["strict_warnflags"] = ""
  CONFIG["warnflags"] = "-Wall -Wextra -Wextra-tokens -Wdeprecated-declarations -Wdivision-by-zero -Wdiv-by-zero -Wimplicit-function-declaration -Wimplicit-int -Wpointer-arith -Wshorten-64-to-32 -Wwrite-strings -Wold-style-definition -Wmissing-noreturn -Wno-cast-function-type -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 -Wmisleading-indentation -Wundef"
  CONFIG["debugflags"] = "-ggdb3"
  CONFIG["optflags"] = "-O3 -fno-fast-math"
  CONFIG["NULLCMD"] = ":"
  CONFIG["ENABLE_DEBUG_ENV"] = ""
  CONFIG["DLNOBJ"] = "dln.o"
  CONFIG["RJIT_SUPPORT"] = "yes"
  CONFIG["YJIT_OBJ"] = "yjit.$(OBJEXT)"
  CONFIG["YJIT_LIBS"] = "yjit/target/release/libyjit.a"
  CONFIG["CARGO_BUILD_ARGS"] = ""
  CONFIG["YJIT_SUPPORT"] = "yes"
  CONFIG["CARGO"] = ""
  CONFIG["RUSTC"] = "rustc"
  CONFIG["INSTALL_STATIC_LIBRARY"] = "yes"
  CONFIG["EXECUTABLE_EXTS"] = ""
  CONFIG["ARCHFILE"] = ""
  CONFIG["LIBRUBY_RELATIVE"] = "no"
  CONFIG["EXTOUT"] = ".ext"
  CONFIG["PREP"] = "miniruby$(EXEEXT)"
  CONFIG["CROSS_COMPILING"] = "no"
  CONFIG["TEST_RUNNABLE"] = "yes"
  CONFIG["rubylibprefix"] = "$(libdir)/$(RUBY_BASE_NAME)"
  CONFIG["setup"] = "Setup"
  CONFIG["SOEXT"] = "dylib"
  CONFIG["TRY_LINK"] = ""
  CONFIG["PRELOADENV"] = "DYLD_INSERT_LIBRARIES"
  CONFIG["LIBPATHENV"] = "DYLD_LIBRARY_PATH"
  CONFIG["RPATHFLAG"] = ""
  CONFIG["LIBPATHFLAG"] = " -L%s"
  CONFIG["LINK_SO"] = "\n$(POSTLINK)"
  CONFIG["ADDITIONAL_DLDFLAGS"] = ""
  CONFIG["ENCSTATIC"] = ""
  CONFIG["EXTSTATIC"] = ""
  CONFIG["ASMEXT"] = "S"
  CONFIG["LIBEXT"] = "a"
  CONFIG["DLEXT"] = "bundle"
  CONFIG["LDSHAREDXX"] = "$(CXX) -dynamic -bundle"
  CONFIG["LDSHARED"] = "$(CC) -dynamic -bundle"
  CONFIG["CCDLFLAGS"] = "-fno-common"
  CONFIG["STATIC"] = ""
  CONFIG["ARCH_FLAG"] = "-arch arm64"
  CONFIG["DLDFLAGS"] = "-L/opt/homebrew/opt/readline/lib -L/opt/homebrew/opt/libyaml/lib -L/opt/homebrew/opt/gdbm/lib -Wl,-undefined,dynamic_lookup"
  CONFIG["ALLOCA"] = ""
  CONFIG["EGREP"] = "/usr/bin/grep -E"
  CONFIG["GREP"] = "/usr/bin/grep"
  CONFIG["dsymutil"] = "dsymutil"
  CONFIG["codesign"] = "codesign"
  CONFIG["cleanlibs"] = "$(TARGET_SO).dSYM"
  CONFIG["POSTLINK"] = "dsymutil $@ 2>/dev/null; { test -z '$(RUBY_CODESIGN)' || codesign -s '$(RUBY_CODESIGN)' -f $@; }"
  CONFIG["incflags"] = "-I/opt/homebrew/opt/readline/include -I/opt/homebrew/opt/libyaml/include -I/opt/homebrew/opt/gdbm/include"
  CONFIG["WERRORFLAG"] = "-Werror"
  CONFIG["RUBY_DEVEL"] = ""
  CONFIG["CHDIR"] = "cd -P"
  CONFIG["RMALL"] = "rm -fr"
  CONFIG["RMDIRS"] = "rmdir -p"
  CONFIG["RMDIR"] = "rmdir"
  CONFIG["CP"] = "cp"
  CONFIG["RM"] = "rm -f"
  CONFIG["PKG_CONFIG"] = "pkg-config"
  CONFIG["DOXYGEN"] = ""
  CONFIG["DOT"] = ""
  CONFIG["MKDIR_P"] = "/opt/homebrew/bin/gmkdir -p"
  CONFIG["INSTALL_DATA"] = "$(INSTALL) -m 644"
  CONFIG["INSTALL_SCRIPT"] = "$(INSTALL)"
  CONFIG["INSTALL_PROGRAM"] = "$(INSTALL)"
  CONFIG["SET_MAKE"] = ""
  CONFIG["LN_S"] = "ln -s"
  CONFIG["DLLWRAP"] = ""
  CONFIG["WINDRES"] = ""
  CONFIG["ASFLAGS"] = ""
  CONFIG["ARFLAGS"] = "rcu "
  CONFIG["try_header"] = ""
  CONFIG["CC_VERSION_MESSAGE"] = "Apple clang version 15.0.0 (clang-1500.1.0.2.5)\nTarget: arm64-apple-darwin23.2.0\nThread model: posix\nInstalledDir: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin"
  CONFIG["CC_VERSION"] = "$(CC) --version"
  CONFIG["CSRCFLAG"] = ""
  CONFIG["COUTFLAG"] = "-o "
  CONFIG["OUTFLAG"] = "-o "
  CONFIG["CPPOUTFILE"] = "-o conftest.i"
  CONFIG["GNU_LD"] = "no"
  CONFIG["GCC"] = "yes"
  CONFIG["CPP"] = "$(CC) -E"
  CONFIG["CXXFLAGS"] = "-fdeclspec"
  CONFIG["OBJEXT"] = "o"
  CONFIG["CPPFLAGS"] = "-D_XOPEN_SOURCE -D_DARWIN_C_SOURCE -D_DARWIN_UNLIMITED_SELECT -D_REENTRANT $(DEFS) $(cppflags)"
  CONFIG["LDFLAGS"] = "-L. -fstack-protector-strong -L/opt/homebrew/opt/readline/lib -L/opt/homebrew/opt/libyaml/lib -L/opt/homebrew/opt/gdbm/lib"
  CONFIG["CFLAGS"] = "$(cflags) -pipe"
  CONFIG["STRIP"] = "strip -A -n"
  CONFIG["RANLIB"] = "ranlib"
  CONFIG["OBJDUMP"] = "objdump"
  CONFIG["OBJCOPY"] = ":"
  CONFIG["NM"] = "/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/nm --no-llvm-bc"
  CONFIG["LD"] = "ld"
  CONFIG["CXX"] = "clang++"
  CONFIG["AS"] = "as"
  CONFIG["AR"] = "/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/ar"
  CONFIG["CC"] = "clang"
  CONFIG["wasmoptflags"] = ""
  CONFIG["WASMOPT"] = ""
  CONFIG["target_os"] = "darwin23"
  CONFIG["target_vendor"] = "apple"
  CONFIG["target_cpu"] = "arm64"
  CONFIG["target"] = "$(target_cpu)-$(target_vendor)-$(target_os)"
  CONFIG["host_os"] = "$(target_os)"
  CONFIG["host_vendor"] = "$(target_vendor)"
  CONFIG["host_cpu"] = "$(target_cpu)"
  CONFIG["host"] = "$(target)"
  CONFIG["build_os"] = "darwin23.2.0"
  CONFIG["build_vendor"] = "apple"
  CONFIG["build_cpu"] = "aarch64"
  CONFIG["build"] = "aarch64-apple-darwin23.2.0"
  CONFIG["RUBY_VERSION_NAME"] = "$(RUBY_BASE_NAME)-$(ruby_version)"
  CONFIG["RUBYW_BASE_NAME"] = "rubyw"
  CONFIG["RUBY_BASE_NAME"] = "ruby"
  CONFIG["RUBY_PROGRAM_VERSION"] = "$(MAJOR).$(MINOR).$(TEENY)"
  CONFIG["RUBY_API_VERSION"] = "$(MAJOR).$(MINOR)"
  CONFIG["HAVE_GIT"] = "yes"
  CONFIG["GIT"] = "git"
  CONFIG["cxxflags"] = ""
  CONFIG["cppflags"] = ""
  CONFIG["cflags"] = "-fdeclspec $(optflags) $(debugflags) $(warnflags)"
  CONFIG["MAKEDIRS"] = "/opt/homebrew/bin/gmkdir -p"
  CONFIG["target_alias"] = ""
  CONFIG["host_alias"] = "$(target_alias)"
  CONFIG["build_alias"] = ""
  CONFIG["LIBS"] = "-lpthread "
  CONFIG["ECHO_T"] = ""
  CONFIG["ECHO_N"] = ""
  CONFIG["ECHO_C"] = "\\\\c"
  CONFIG["DEFS"] = ""
  CONFIG["mandir"] = "$(datarootdir)/man"
  CONFIG["localedir"] = "$(datarootdir)/locale"
  CONFIG["libdir"] = "$(exec_prefix)/lib"
  CONFIG["psdir"] = "$(docdir)"
  CONFIG["pdfdir"] = "$(docdir)"
  CONFIG["dvidir"] = "$(docdir)"
  CONFIG["htmldir"] = "$(docdir)"
  CONFIG["infodir"] = "$(datarootdir)/info"
  CONFIG["docdir"] = "$(datarootdir)/doc/$(PACKAGE)"
  CONFIG["oldincludedir"] = "/usr/include"
  CONFIG["includedir"] = "$(SDKROOT)""$(prefix)/include"
  CONFIG["runstatedir"] = "$(localstatedir)/run"
  CONFIG["localstatedir"] = "$(prefix)/var"
  CONFIG["sharedstatedir"] = "$(prefix)/com"
  CONFIG["sysconfdir"] = "$(prefix)/etc"
  CONFIG["datadir"] = "$(datarootdir)"
  CONFIG["datarootdir"] = "$(prefix)/share"
  CONFIG["libexecdir"] = "$(exec_prefix)/libexec"
  CONFIG["sbindir"] = "$(exec_prefix)/sbin"
  CONFIG["bindir"] = "$(exec_prefix)/bin"
  CONFIG["exec_prefix"] = "$(prefix)"
  CONFIG["PACKAGE_URL"] = ""
  CONFIG["PACKAGE_BUGREPORT"] = ""
  CONFIG["PACKAGE_STRING"] = ""
  CONFIG["PACKAGE_VERSION"] = ""
  CONFIG["PACKAGE_TARNAME"] = ""
  CONFIG["PACKAGE_NAME"] = ""
  CONFIG["PATH_SEPARATOR"] = ":"
  CONFIG["SHELL"] = "/bin/sh"
  CONFIG["UNICODE_VERSION"] = "15.0.0"
  CONFIG["UNICODE_EMOJI_VERSION"] = "15.0"
  CONFIG["SDKROOT"] = ""
  CONFIG["platform"] = "$(arch)"
  CONFIG["archdir"] = "$(rubyarchdir)"
  CONFIG["topdir"] = File.dirname(__FILE__)
  # Almost same with CONFIG. MAKEFILE_CONFIG has other variable
  # reference like below.
  #
  #   MAKEFILE_CONFIG["bindir"] = "$(exec_prefix)/bin"
  #
  # The values of this constant is used for creating Makefile.
  #
  #   require 'rbconfig'
  #
  #   print <<-END_OF_MAKEFILE
  #   prefix = #{RbConfig::MAKEFILE_CONFIG['prefix']}
  #   exec_prefix = #{RbConfig::MAKEFILE_CONFIG['exec_prefix']}
  #   bindir = #{RbConfig::MAKEFILE_CONFIG['bindir']}
  #   END_OF_MAKEFILE
  #
  #   => prefix = /usr/local
  #      exec_prefix = $(prefix)
  #      bindir = $(exec_prefix)/bin  MAKEFILE_CONFIG = {}
  #
  # RbConfig.expand is used for resolving references like above in rbconfig.
  #
  #   require 'rbconfig'
  #   p RbConfig.expand(RbConfig::MAKEFILE_CONFIG["bindir"])
  #   # => "/usr/local/bin"
  MAKEFILE_CONFIG = {}
  CONFIG.each{|k,v| MAKEFILE_CONFIG[k] = v.dup}

  # call-seq:
  #
  #   RbConfig.expand(val)         -> string
  #   RbConfig.expand(val, config) -> string
  #
  # expands variable with given +val+ value.
  #
  #   RbConfig.expand("$(bindir)") # => /home/foobar/all-ruby/ruby19x/bin
  def RbConfig::expand(val, config = CONFIG)
    newval = val.gsub(/\$\$|\$\(([^()]+)\)|\$\{([^{}]+)\}/) {
      var = $&
      if !(v = $1 || $2)
    '$'
      elsif key = config[v = v[/\A[^:]+(?=(?::(.*?)=(.*))?\z)/]]
    pat, sub = $1, $2
    config[v] = false
    config[v] = RbConfig::expand(key, config)
    key = key.gsub(/#{Regexp.quote(pat)}(?=\s|\z)/n) {sub} if pat
    key
      else
    var
      end
    }
    val.replace(newval) unless newval == val
    val
  end
  CONFIG.each_value do |val|
    RbConfig::expand(val)
  end

  # call-seq:
  #
  #   RbConfig.fire_update!(key, val)               -> array
  #   RbConfig.fire_update!(key, val, mkconf, conf) -> array
  #
  # updates +key+ in +mkconf+ with +val+, and all values depending on
  # the +key+ in +mkconf+.
  #
  #   RbConfig::MAKEFILE_CONFIG.values_at("CC", "LDSHARED") # => ["gcc", "$(CC) -shared"]
  #   RbConfig::CONFIG.values_at("CC", "LDSHARED")          # => ["gcc", "gcc -shared"]
  #   RbConfig.fire_update!("CC", "gcc-8")                  # => ["CC", "LDSHARED"]
  #   RbConfig::MAKEFILE_CONFIG.values_at("CC", "LDSHARED") # => ["gcc-8", "$(CC) -shared"]
  #   RbConfig::CONFIG.values_at("CC", "LDSHARED")          # => ["gcc-8", "gcc-8 -shared"]
  #
  # returns updated keys list, or +nil+ if nothing changed.
  def RbConfig.fire_update!(key, val, mkconf = MAKEFILE_CONFIG, conf = CONFIG) # :nodoc:
    return if mkconf[key] == val
    mkconf[key] = val
    keys = [key]
    deps = []
    begin
      re = Regexp.new("\\$\\((?:%1$s)\\)|\\$\\{(?:%1$s)\\}" % keys.join('|'))
      deps |= keys
      keys.clear
      mkconf.each {|k,v| keys << k if re =~ v}
    end until keys.empty?
    deps.each {|k| conf[k] = mkconf[k].dup}
    deps.each {|k| expand(conf[k])}
    deps
  end

  # call-seq:
  #
  #   RbConfig.ruby -> path
  #
  # returns the absolute pathname of the ruby command.
  def RbConfig.ruby
    File.join(
      RbConfig::CONFIG["bindir"],
      RbConfig::CONFIG["ruby_install_name"] + RbConfig::CONFIG["EXEEXT"]
    )
  end
end
CROSS_COMPILING = nil unless defined? CROSS_COMPILING
kateinoigakukun commented 8 months ago

Thanks! I'll try on darwin23 later

pusewicz commented 8 months ago

@kateinoigakukun Can I help with anything?

kateinoigakukun commented 8 months ago

@pusewicz Hmm, I couldn't reproduce the issue even with the macOS 14.4.1 and Ruby 3.3.0 installed via rbenv. Could you share brew list if you don't mind?

pusewicz commented 8 months ago

@kateinoigakukun Here you go.

abseil
act
aom
asciinema
astyle
at-spi2-core
atk
autoconf
automake
bash
bash-language-server
bat
bchunk
bdw-gc
berkeley-db
berkeley-db@5
bison
black
boost
brotli
c-ares
ca-certificates
cairo
capstone
cffi
cfitsio
cgif
chruby
chruby-fish
cmake
confuse
coreutils
crystal
cscope
curl
dashing
dbus
direnv
dive
docbook
docbook-xsl
double-conversion
dtc
e2fsprogs
exa
exercism
fd
fftw
fish
flac
fluid-synth
fmt
fontconfig
freetype
fribidi
fzf
gcc
gdbm
gdk-pixbuf
gel
genext2fs
gettext
gflags
gh
ghostscript
giflib
git
git-lfs
github-markdown-toc
glances
glib
glog
glslang
gmp
gnu-getopt
gnupg
gnutls
go
gobject-introspection
gopls
gpgme
graphite2
gsettings-desktop-schemas
gtk+3
guile
hadolint
harfbuzz
hdf5
hicolor-icon-theme
highway
hiredis
htop
hub
hunspell
hwloc
icu4c
imagemagick
imagemagick@6
imath
irssi
isl
jansson
jasper
jbig2dec
jpeg
jpeg-turbo
jpeg-xl
jq
jsoncpp
kakoune
kompose
krb5
kubernetes-cli
lame
lazydocker
libaec
libarchive
libassuan
libb2
libcbor
libde265
libdicom
libepoxy
libevent
libexif
libffi
libfido2
libftdi
libgcrypt
libgit2
libgit2@1.6
libgosu
libgpg-error
libgsf
libheif
libice
libidn
libidn2
libimagequant
libksba
liblqr
libmagic
libmatio
libmpc
libnghttp2
libogg
libomp
libpng
libpthread-stubs
libraw
libressl
librsvg
libslirp
libsm
libsndfile
libsodium
libspng
libssh
libssh2
libtasn1
libtermkey
libtiff
libtool
libunistring
libusb
libuv
libvmaf
libvorbis
libvterm
libx11
libxau
libxcb
libxdmcp
libxext
libxfixes
libxi
libxml2
libxmu
libxrender
libxt
libxtst
libyaml
libzip
little-cms2
llvm
llvm@14
llvm@15
llvm@16
lsd
ltex-ls
lua
lua-language-server
luajit
luajit-openresty
luv
lz4
lzo
m4
macos-term-size
macvim
mad
mas
meson
midnight-commander
miniupnpc
mkcert
molten-vk
mozjpeg
mpdecimal
mpfr
mpg123
mruby
msgpack
mypy
mysql-client@5.7
mysql@5.7
ncurses
ne
neofetch
nettle
nim
ninja
node
node@16
npth
nspr
nss
nushell
nvi
oniguruma
open-mpi
openal-soft
openexr
openjdk
openjpeg
openldap
openslide
openssl@1.1
openssl@3
opus
opusfile
orc
p11-kit
pango
pcre
pcre2
perl
pinentry
pixman
pkg-config
pkgx
pmix
poppler
popt
portaudio
postgresql@15
prettier
proselint
protobuf
protobuf@21
pycparser
pydocstyle
python-attrs
python-click
python-dateutil
python-idna
python-lsp-server
python-magic
python-packaging
python-pathspec
python-platformdirs
python-setuptools
python@3.10
python@3.11
python@3.12
python@3.9
pyyaml
qemu
readline
ripgrep
rsync
rtmpdump
ruby
ruby-install
ruby@3.0
ruby@3.1
ruby@3.2
rubyfmt
ruff
rust
s-lang
s3cmd
screen
screenresolution
sdl2
sevenzip
shared-mime-info
shellcheck
six
smartmontools
snappy
solargraph
sops
spirv-tools
sql-language-server
sqlite
starship
stylelint
swift
swift-format
swig
tailscale
tailwindcss-language-server
tcpflow
telnet
termbox
terminal-notifier
tilt
tmux
tproxy
tree-sitter
typescript
typescript-language-server
u-boot-tools
unbound
unibilium
unixodbc
utf8proc
uthash
vale
vapor
vde
vim
vint
vips
volta
webp
wget
wxwidgets
x265
xmlto
xorgproto
xxhash
xz
yadm
yaml-language-server
yamlfmt
yamllint
yarn
yq
z
z3
zlib
zoxide
zstd
1password-cli
acorn
altair-graphql-client
audacity
autodesk-fusion
autodesk-fusion360
backblaze
balenaetcher
bambu-studio
caffeine
dash
ddpm
diffusionbee
discord
docker
dosbox-x
dotnet-sdk
drivedx
elgato-camera-hub
font-envy-code-r
font-iosevka
font-iosevka-nerd-font
font-iosevka-term-nerd-font
font-powerline-symbols
github
gnucash
gog-galaxy
google-chrome
google-chrome-beta
google-chrome-canary
google-cloud-sdk
gpg-suite
imageoptim
istat-menus
itch
iterm2
keycastr
kitty
lapce
linear-linear
logi-options-plus
logitech-options
macvim
messenger
microsoft-edge
namebench
ngrok
notational-velocity
notion
obs
onyx
openra
openttd
postman
proxyman
querious
rar
slack
soulseek
soundsource
telegram
textmate
the-unarchiver
tiled
transmission
tuple
visual-studio-code
whatsapp
xscreensaver
zoom
zsa-wally
marat-y commented 8 months ago

Any update on this one? I've started having same issue after pristine'ing my bundle :(

macOS 14.4.1 ruby 3.2.0 via asdf

saurav-dagar commented 7 months ago

Facing same issue with macOS 14.4.1 Ruby version ruby-3.1.3 [ arm64 ] via rvm

Any workaround here?

pusewicz commented 7 months ago

I was able to work around this using instructions from https://github.com/grpc/grpc/issues/35148#issuecomment-1866434142.

AfraidKnot commented 7 months ago

Using a comment or two down from the same grpc post, I've gotten the following to work.

gem install curses -- --with-cflags=-Wno-error=incompatible-function-pointer-types

If you want to use ncurses, assuming you have already installed it with brew, then the following will work.

gem install curses -- --use-system-libraries --with-ncurses-dir=/usr/local/opt/ncurses --with-cflags=-Wno-error=incompatible-function-pointer-types

hsbt commented 7 months ago

@AfraidKnot Thanks. I could install with your instruction.

$ gem install curses -- --with-cflags=-Wno-error=incompatible-function-pointer-types
Building native extensions with: '--with-cflags=-Wno-error=incompatible-function-pointer-types'
Successfully installed curses-1.4.4
1 gem installed
kateinoigakukun commented 7 months ago

It seems like https://github.com/ruby/curses/commit/13e00d07c3aaed83d5f138cf268cc33c9f025d0e already fixed the issue. So having a new gem release would solve the "gem install" issue.

shugo commented 7 months ago

@pusewicz I've released curses-1.4.5.gem. Could you try it?

pusewicz commented 7 months ago

@shugo It seems to be working for now.

shugo commented 7 months ago

@pusewicz Thanks for your confirmation!