AR ホームベーカリー

オイラのアウトプット用ホームベーカリー!

fontawesome-6.5.2 インストール時に oj が無いと言われて怒られ続けた

メモが見つかったので思い出しつつ書いてみる。

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 はこちらが必要ではない、という具合なのでこれで。