メモが見つかったので思い出しつつ書いてみる。
fontawesome
メンテナンスしてくれ〜、と言われたプロジェクトで bundle install を叩いたら、掲題の通り oj がない事が原因で fontawesome のインストールが失敗した。
当時のログ的には (ちょっと長いけど) こう。
Installing font-awesome-sass 6.5.2 Gem::Ext::BuildError: ERROR: Failed to build gem native extension. current directory: /Users/donbulinux/Workspace/example_project/vendor/bundle/ruby/3.2.0/gems/oj-3.7.12/ext/oj /Users/donbulinux/.anyenv/envs/rbenv/versions/3.2.4/bin/ruby extconf.rb >>>>> Creating Makefile for ruby version 3.2.4 on arm64-darwin24 <<<<< checking for rb_time_timespec()... yes checking for rb_ivar_count()... yes checking for rb_ivar_foreach()... yes checking for stpcpy()... yes checking for rb_data_object_wrap()... yes creating Makefile current directory: /Users/donbulinux/Workspace/example_project/vendor/bundle/ruby/3.2.0/gems/oj-3.7.12/ext/oj make DESTDIR\= sitearchdir\=./.gem.20250819-15351-41c8x0 sitelibdir\=./.gem.20250819-15351-41c8x0 clean current directory: /Users/donbulinux/Workspace/example_project/vendor/bundle/ruby/3.2.0/gems/oj-3.7.12/ext/oj make DESTDIR\= sitearchdir\=./.gem.20250819-15351-41c8x0 sitelibdir\=./.gem.20250819-15351-41c8x0 compiling cache8.c compiling circarray.c compiling code.c compiling compat.c compiling custom.c custom.c:357:23: error: incompatible function pointer types passing 'int (VALUE, VALUE, Out)' (aka 'int (unsigned long, unsigned long, struct _out *)') to parameter of type 'int (*)(VALUE, VALUE, VALUE)' (aka 'int (*)(unsigned long, unsigned long, unsigned long)') [-Wincompatible-function-pointer-types] 357 | rb_hash_foreach(obj, hash_cb, (VALUE)out); | ^~~~~~~ /Users/donbulinux/.anyenv/envs/rbenv/versions/3.2.4/include/ruby-3.2.0/ruby/internal/intern/hash.h:83:40: note: passing argument to parameter 'func' here 83 | void rb_hash_foreach(VALUE hash, int (*func)(VALUE key, VALUE val, VALUE arg), VALUE arg); | ^ custom.c:664:26: error: incompatible function pointer types passing 'int (ID, VALUE, Out)' (aka 'int (unsigned long, unsigned long, struct _out *)') to parameter of type 'int (*)(ID, VALUE, st_data_t)' (aka 'int (*)(unsigned long, unsigned long, unsigned long)') [-Wincompatible-function-pointer-types] 664 | rb_ivar_foreach(obj, dump_attr_cb, (VALUE)out); | ^~~~~~~~~~~~ /Users/donbulinux/.anyenv/envs/rbenv/versions/3.2.4/include/ruby-3.2.0/ruby/internal/intern/variable.h:263:39: note: passing argument to parameter 'func' here 263 | void rb_ivar_foreach(VALUE obj, int (*func)(ID name, VALUE val, st_data_t arg), st_data_t arg); | ^ 2 errors generated. make: *** [custom.o] Error 1 make failed, exit code 2 Gem files will remain installed in /Users/donbulinux/Workspace/example_project/vendor/bundle/ruby/3.2.0/gems/oj-3.7.12 for inspection. Results logged to /Users/donbulinux/Workspace/example_project/vendor/bundle/ruby/3.2.0/extensions/arm64-darwin-24/3.2.0/oj-3.7.12/gem_make.out /Users/donbulinux/.anyenv/envs/rbenv/versions/3.2.4/lib/ruby/3.2.0/rubygems/ext/builder.rb:119:in `run' /Users/donbulinux/.anyenv/envs/rbenv/versions/3.2.4/lib/ruby/3.2.0/rubygems/ext/builder.rb:53:in `block in make' /Users/donbulinux/.anyenv/envs/rbenv/versions/3.2.4/lib/ruby/3.2.0/rubygems/ext/builder.rb:45:in `each' /Users/donbulinux/.anyenv/envs/rbenv/versions/3.2.4/lib/ruby/3.2.0/rubygems/ext/builder.rb:45:in `make' /Users/donbulinux/.anyenv/envs/rbenv/versions/3.2.4/lib/ruby/3.2.0/rubygems/ext/ext_conf_builder.rb:42:in `build' /Users/donbulinux/.anyenv/envs/rbenv/versions/3.2.4/lib/ruby/3.2.0/rubygems/ext/builder.rb:187:in `build_extension' /Users/donbulinux/.anyenv/envs/rbenv/versions/3.2.4/lib/ruby/3.2.0/rubygems/ext/builder.rb:221:in `block in build_extensions' /Users/donbulinux/.anyenv/envs/rbenv/versions/3.2.4/lib/ruby/3.2.0/rubygems/ext/builder.rb:218:in `each' /Users/donbulinux/.anyenv/envs/rbenv/versions/3.2.4/lib/ruby/3.2.0/rubygems/ext/builder.rb:218:in `build_extensions' /Users/donbulinux/.anyenv/envs/rbenv/versions/3.2.4/lib/ruby/3.2.0/rubygems/installer.rb:846:in `build_extensions' /Users/donbulinux/.anyenv/envs/rbenv/versions/3.2.4/lib/ruby/gems/3.2.0/gems/bundler-2.4.10/lib/bundler/rubygems_gem_installer.rb:72:in `build_extensions' /Users/donbulinux/.anyenv/envs/rbenv/versions/3.2.4/lib/ruby/gems/3.2.0/gems/bundler-2.4.10/lib/bundler/rubygems_gem_installer.rb:28:in `install' /Users/donbulinux/.anyenv/envs/rbenv/versions/3.2.4/lib/ruby/gems/3.2.0/gems/bundler-2.4.10/lib/bundler/source/rubygems.rb:200:in `install' /Users/donbulinux/.anyenv/envs/rbenv/versions/3.2.4/lib/ruby/gems/3.2.0/gems/bundler-2.4.10/lib/bundler/installer/gem_installer.rb:54:in `install' /Users/donbulinux/.anyenv/envs/rbenv/versions/3.2.4/lib/ruby/gems/3.2.0/gems/bundler-2.4.10/lib/bundler/installer/gem_installer.rb:16:in `install_from_spec' /Users/donbulinux/.anyenv/envs/rbenv/versions/3.2.4/lib/ruby/gems/3.2.0/gems/bundler-2.4.10/lib/bundler/installer/parallel_installer.rb:156:in `do_install' /Users/donbulinux/.anyenv/envs/rbenv/versions/3.2.4/lib/ruby/gems/3.2.0/gems/bundler-2.4.10/lib/bundler/installer/parallel_installer.rb:147:in `block in worker_pool' /Users/donbulinux/.anyenv/envs/rbenv/versions/3.2.4/lib/ruby/gems/3.2.0/gems/bundler-2.4.10/lib/bundler/worker.rb:62:in `apply_func' /Users/donbulinux/.anyenv/envs/rbenv/versions/3.2.4/lib/ruby/gems/3.2.0/gems/bundler-2.4.10/lib/bundler/worker.rb:57:in `block in process_queue' /Users/donbulinux/.anyenv/envs/rbenv/versions/3.2.4/lib/ruby/gems/3.2.0/gems/bundler-2.4.10/lib/bundler/worker.rb:54:in `loop' /Users/donbulinux/.anyenv/envs/rbenv/versions/3.2.4/lib/ruby/gems/3.2.0/gems/bundler-2.4.10/lib/bundler/worker.rb:54:in `process_queue' /Users/donbulinux/.anyenv/envs/rbenv/versions/3.2.4/lib/ruby/gems/3.2.0/gems/bundler-2.4.10/lib/bundler/worker.rb:90:in `block (2 levels) in create_threads' An error occurred while installing oj (3.7.12), and Bundler cannot continue. In Gemfile: oj
oj がない
TimeMachine バックアップで環境移行した直後だったので「あ〜これ Xcode 周りか?」と思い込んで検索した所、「xcode-select --install したら治った」という書き込みを見つけたので、なにも考えずに意気揚々と実行する。
❯ sudo xcode-select --install Password: xcode-select: note: Command line tools are already installed. Use "Software Update" in System Settings or the softwareupdate command line interface to install updates
あへぇ?! 移行元の環境で利用していたヤツが認識されている。
どうもこれは rm で消してしまって大丈夫らしいのでざくっと消して、再インストールする。
❯ sudo rm -rf /Library/Developer/CommandLineTools ❯ xcode-select --install xcode-select: note: install requested for command line developer tools ❯ xcode-select -p /Applications/Xcode.app/Contents/Developer
--install 叩くと GUI 側にポップアップ出る事を毎回忘れており、「なんで動かないんじゃ?」 と何回もコマンド叩くなどしていた。
とはいえこれでスッと認識されるでしょう!
An error occurred while installing oj (3.7.12), and Bundler cannot continue. In Gemfile: oj
ナンデ!
oj が無いっていってんじゃんヨ
fontawesome のインストール失敗しているなら、依存している oj そのものがまずインストール失敗してんじゃない? ということにようやく気付き gem_make.out などと真面目に向き合った所、どうもそのようだった。
で、「これは bundle オプションで warning を回避しろ」とのことだったので、素直に以下の通りにする。
❯ bundle config build.oj --with-cflags="-Wno-error=incompatible-function-pointer-types"
成功しました
Installing font-awesome-sass 6.5.2 Bundle complete!
という具合でした。 面倒くさがらずに最初からエラーログと向き合え、という話でしたね。
やだー! エラーログ見て一発でわかんない時の徒労感すごいんだもん!(じたばた
おまけ
bundle config を叩いた時に replace のお知らせが出てきてなんじゃらほい、と思った所、以前なんらかの弾みで以下を実行していたようでした。
❯ bundle config build.oj --with-cflags=-Wno-implicit-function-declaration
なぜ……? とりあえず今回の oj に関しては cflags はこちらが必要ではない、という具合なのでこれで。