homebrewでneovimを--HEADでインストールできない時
結論
結論だけ知りたい方用
brew install utf8proc --HEAD && brew install neovim --HEAD
あとがき
使っているプラグインなどが理由でneovimのnightlyパージョンを使いたいことはあると思います
今回自分もneovimのnightlyをつかいたい!となりました
自分はパッケージマネージャにhomebrewを使っているので
brew uninstall neovim
brew install neovim --HEAD
とした所以下のようなエラーに出会しました
Last 15 lines from /Users/a/Library/Logs/Homebrew/neovim/20.cmake:
| ~~~~ ^
/tmp/neovim-20241022-65154-c3oibl/src/nvim/mbyte.c:488:41: error: no member named 'ambiguous_width' in 'struct
utf8proc_property_struct'
488 | if (p_emoji && c >= 0x1f000 && !prop->ambiguous_width && prop_is_emojilike(prop)) {
| ~~~~ ^
/tmp/neovim-20241022-65154-c3oibl/src/nvim/mbyte.c:1352:15: error: no member named 'ambiguous_width' in 'struct
utf8proc_property_struct'
1352 | if (prop->ambiguous_width || prop_is_emojilike(prop)) {
| ~~~~ ^
3 errors generated.
🫠
エラーメッセージを読んでみる
エラーメッセージの最後にこのような記述があります
3 errors generated
どうやら3つエラーが発生したようですが,それぞれどんなエラーが発生しているのでしょうか
Last 15 lines from /Users/a/Library/Logs/Homebrew/neovim/20.cmake:
| ~~~~ ^
cmakeを実行中にエラーが発生したようです
/tmp/neovim-20241022-65154-c3oibl/src/nvim/mbyte.c:488:41: error: no member named 'ambiguous_width' in 'struct
utf8proc_property_struct'
488 | if (p_emoji && c >= 0x1f000 && !prop->ambiguous_width && prop_is_emojilike(prop)) {
| ~~~~ ^
utf8proc_property_struct
という構造体にambiguous_width
が定義されてないよとのこと
/tmp/neovim-20241022-65154-c3oibl/src/nvim/mbyte.c:1352:15: error: no member named 'ambiguous_width' in 'struct
utf8proc_property_struct'
1352 | if (prop->ambiguous_width || prop_is_emojilike(prop)) {
| ~~~~ ^
2番目と同じですね
上記の3つのエラーを読んでみると,どうやらneovimリポジトリのsrc/nvim/mbyte.c
ファイルに原因がありそうです
neovimリポジトリ を覗いてみる
github上のでは,ソースコードを見てみましょう
utf8proc.h
というファイルが読み込まれています
エラーの原因となっていたutf8proc_property_struct
はutf8procというライブラリで定義されているっぽいですね
utf8procとネットで検索してみるとgithubでソースコード
が公開されています
utf8procのリポジトリまで行くと分かるのですが,最新のコミットメッセージは以下のようになっています
properties: add "ambiguous_width" property for ambiguous East Asian Width
Some characters have their width defined as "Ambiguous" in UAX#11.
These are typically rendered as single-width by modern monospace fonts,
and utf8proc correctly returns charwidth==1 for these.However some applications might need to support older CJK fonts where
characters which where two-byte in legacy encodings were rendered as
double-width. An example of this is the 'ambiwidth' option of vim
and neovim which supports rendering in terminals using such wideness
rules.Add an 'ambiguous_width' property to utf8proc_property_t for such characters.
このコミットがされたのは今年の8/31でした 一方utf8proc安定版の最新リリースはちょうど一年前の昨日になっています
段々と問題の輪郭が見えてきました そもそもhomebrewは依存関係を自動で解決してくれるツールでした ユーザが何も指定しなかった場合,homebrewは安定版をインストールします
一方で,依存するパッケージに関しては,ユーザがバージョンを指定する方法は提供されていません 常に最新の安定版がインストールされます
つまり今回の場合,utf8procを事前に--HEAD指定して入れておけば問題解決となります
おわり
Discussion