アキレスと亀

一日一歩。一日一膳。光合成で生きていきたいお気持ちが強い。

Mac OS 11で、Vimコンパイル時にclientserver機能が有効化されない

概要

  • vim-tex利用のために、clientserver機能を有効化したVimをインストールを試みていた
  • Homebrewではclientserver機能を有効化できないため、ソースからコンパイルの必要がある
  • Mac OS 11.1でコンパイルを試みたところ、Huge versionをインストールしているにも関わらずclientserver機能が有効化されない
  • コンパイル時にX11ライブラリのヘッダを見つけられないことが原因のため、読み込めるようにコンパイルオプションを変更し解決

詳細

問題

clientserver機能を有効化したVimコンパイルを試みた。
下記のビルドスクリプトを作成し実行したところ、コンパイルは正常に完了するが、clientserver機能が有効化されなかった。

#!/bin/sh

vim_repo_dir=vim

if [ ! -e $vim_repo_dir ]; then
  git clone https://github.com/vim/vim.git
fi

cd $vim_repo_dir
git pull
make distclean
./configure \
  --with-features=huge \
  --disable-darwin \
  --enable-python3interp \
  --enable-luainterp \
  --enable-gui \
make
sudo make install

コンパイルされたVimの詳細は、以下の通り。
HugeバージョンのVimでは、clientserver機能がサポートされることになっている。(参考: https://vim-jp.org/vimdoc-ja/various.html#+feature-list)

user@host% vim --version                                           [/opt/vim]
VIM - Vi IMproved 8.2 (2019 Dec 12, compiled Jan 17 2021 16:49:41)
macOS version w/o darwin feat. - x86_64
Included patches: 1-2366
Compiled by user@host
Huge version without GUI.  Features included (+) or not (-):
+acl               -farsi             +mouse_sgr         +tag_binary
+arabic            +file_in_path      -mouse_sysmouse    -tag_old_static
+autocmd           +find_in_path      +mouse_urxvt       -tag_any_white
+autochdir         +float             +mouse_xterm       -tcl
-autoservername    +folding           +multi_byte        +termguicolors
-balloon_eval      -footer            +multi_lang        +terminal
+balloon_eval_term +fork()            -mzscheme          +terminfo
-browse            +gettext           +netbeans_intg     +termresponse
++builtin_terms    -hangul_input      +num64             +textobjects
+byte_offset       +iconv             +packages          +textprop
+channel           +insert_expand     +path_extra        +timers
+cindent           +ipv6              -perl              +title
-clientserver      +job               +persistent_undo   -toolbar
-clipboard         +jumplist          +popupwin          +user_commands
+cmdline_compl     +keymap            +postscript        +vartabs
+cmdline_hist      +lambda            +printer           +vertsplit
+cmdline_info      +langmap           +profile           +virtualedit
+comments          +libcall           -python            +visual
+conceal           +linebreak         +python3           +visualextra
+cryptv            +lispindent        +quickfix          +viminfo
-cscope            +listcmds          +reltime           +vreplace
+cursorbind        +localmap          +rightleft         +wildignore
+cursorshape       -lua               -ruby              +wildmenu
+dialog_con        +menu              +scrollbind        +windows
+diff              +mksession         +signs             +writebackup
+digraphs          +modify_fname      +smartindent       -X11
-dnd               +mouse             -sound             -xfontset
-ebcdic            -mouseshape        +spell             -xim
+emacs_tags        +mouse_dec         +startuptime       -xpm
+eval              -mouse_gpm         +statusline        -xsmp
+ex_extra          -mouse_jsbterm     -sun_workshop      -xterm_clipboard
+extra_search      +mouse_netterm     +syntax            -xterm_save
   system vimrc file: "$VIM/vimrc"
     user vimrc file: "$HOME/.vimrc"
 2nd user vimrc file: "~/.vim/vimrc"
      user exrc file: "$HOME/.exrc"
       defaults file: "$VIMRUNTIME/defaults.vim"
  fall-back for $VIM: "/usr/local/share/vim"
Compilation: gcc -c -I. -Iproto -DHAVE_CONFIG_H -DMACOS_X -g -O2 -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=1
Linking: gcc -L/usr/local/lib -o vim -lm -lncurses -liconv -lintl -L/usr/local/var/pyenv/versions/3.7.4/lib/python3.7/config-3.7m-darwin -lpython3.7m -framework CoreFoundation

デバッグ

とりあえずコンパイル時のログを確認する。
Vimコンパイルログは、vim/src/auto/config.logで確認できる。
確認していくと、怪しい行を発見した。

   646 conftest.c:32:10: fatal error: 'X11/Xlib.h' file not found
   647 #include <X11/Xlib.h>
   648          ^~~~~~~~~~~~
   649 1 error generated.

上記ログは、X11に関するヘッダーファイルが読み込めていないことを示している。
また前述のVimのバージョン情報を確認すると、X11機能が有効化されていなかった。

UnixにてVimのclientserver機能はX11によって実現されている。
したがってX11機能が有効化されていないと、clientserver機能も有効化されない。

ヘッダファイルが見つかっていないことが原因のようなので、ヘッダファイルの場所を確認する。

$ find / -name "Xlib.h" | grep Xlib.h
/opt/X11/include/X11/Xlib.h
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/Tk.framework/Versions/8.5/Headers/X11/Xlib.h
/System/Volumes/Data/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/Tk.framework/Versions/8.5/Headers/X11/Xlib.h
/System/Volumes/Data/opt/X11/include/X11/Xlib.h

vim/src/auto/configureを参照し、コンパイル時の設定を確認する。
X11で検索すると、ヘッダーファイル参照に使用するためのパスのリストを発見した。

   8273 # Standard set of common directories for X headers.
   8274 # Check X11 before X11Rn because it is often a symlink to the current release.
   8275 ac_x_header_dirs='
   8276 /usr/X11/include
   8277 /usr/X11R7/include
   8278 /usr/X11R6/include
   8279 /usr/X11R5/include
   8280 /usr/X11R4/include
   8281 
   8282 /usr/include/X11
   8283 /usr/include/X11R7
   8284 /usr/include/X11R6
   8285 /usr/include/X11R5
   8286 /usr/include/X11R4
   8287 
   8288 /usr/local/X11/include
   8289 /usr/local/X11R7/include
   8290 /usr/local/X11R6/include
   8291 /usr/local/X11R5/include
   8292 /usr/local/X11R4/include
   8293 
   8294 /usr/local/include/X11
   8295 /usr/local/include/X11R7
   8296 /usr/local/include/X11R6
   8297 /usr/local/include/X11R5
   8298 /usr/local/include/X11R4
   8299 
   8300 /usr/X386/include
   8301 /usr/x386/include
   8302 /usr/XFree86/include/X11
   8303 
   8304 /usr/include
   8305 /usr/local/include
   8306 /usr/unsupported/include
   8307 /usr/athena/include
   8308 /usr/local/x11r5/include
   8309 /usr/lpp/Xamples/include
   8310 
   8311 /usr/openwin/include
   8312 /usr/openwin/share/include'

先ほど確認したヘッダーファイルが存在するディレクトリのパスがリストに含まれていないことが確認できる。

解決策

コンパイル時にX11/Xlib.hが含まれるディレクトリを参照可能にすれば良い。

diff --git a/src/auto/configure b/src/auto/configure
index bbfaafcad..6cfa04138 100755
--- a/src/auto/configure
+++ b/src/auto/configure
@@ -8308,6 +8308,8 @@ ac_x_header_dirs='
 /usr/local/x11r5/include
 /usr/lpp/Xamples/include

+/opt/X11/include
+
 /usr/openwin/include
 /usr/openwin/share/include'

コンパイルしてみると、X11もclientserver機能も有効化されていることが確認できる。

user@host% vim --version                                                                                  [/opt/vim]
VIM - Vi IMproved 8.2 (2019 Dec 12, compiled Jan 17 2021 17:25:52)
macOS version w/o darwin feat. - x86_64
Included patches: 1-2366
Compiled by user@host
Huge version with X11-Athena GUI.  Features included (+) or not (-):
+acl               -farsi             +mouse_sgr         +tag_binary
+arabic            +file_in_path      -mouse_sysmouse    -tag_old_static
+autocmd           +find_in_path      +mouse_urxvt       -tag_any_white
+autochdir         +float             +mouse_xterm       -tcl
-autoservername    +folding           +multi_byte        +termguicolors
+balloon_eval      -footer            +multi_lang        +terminal
+balloon_eval_term +fork()            -mzscheme          +terminfo
+browse            +gettext           +netbeans_intg     +termresponse
++builtin_terms    -hangul_input      +num64             +textobjects
+byte_offset       +iconv             +packages          +textprop
+channel           +insert_expand     +path_extra        +timers
+cindent           +ipv6              -perl              +title
+clientserver      +job               +persistent_undo   +toolbar
+clipboard         +jumplist          +popupwin          +user_commands
+cmdline_compl     +keymap            +postscript        +vartabs
+cmdline_hist      +lambda            +printer           +vertsplit
+cmdline_info      +langmap           +profile           +virtualedit
+comments          +libcall           -python            +visual
+conceal           +linebreak         +python3           +visualextra
+cryptv            +lispindent        +quickfix          +viminfo
-cscope            +listcmds          +reltime           +vreplace
+cursorbind        +localmap          +rightleft         +wildignore
+cursorshape       -lua               -ruby              +wildmenu
+dialog_con_gui    +menu              +scrollbind        +windows
+diff              +mksession         +signs             +writebackup
+digraphs          +modify_fname      +smartindent       +X11
-dnd               +mouse             -sound             +xfontset
-ebcdic            +mouseshape        +spell             +xim
+emacs_tags        +mouse_dec         +startuptime       +xpm
+eval              -mouse_gpm         +statusline        +xsmp_interact
+ex_extra          -mouse_jsbterm     -sun_workshop      +xterm_clipboard
+extra_search      +mouse_netterm     +syntax            -xterm_save
   system vimrc file: "$VIM/vimrc"
     user vimrc file: "$HOME/.vimrc"
 2nd user vimrc file: "~/.vim/vimrc"
      user exrc file: "$HOME/.exrc"
  system gvimrc file: "$VIM/gvimrc"
    user gvimrc file: "$HOME/.gvimrc"
2nd user gvimrc file: "~/.vim/gvimrc"
       defaults file: "$VIMRUNTIME/defaults.vim"
    system menu file: "$VIMRUNTIME/menu.vim"
  fall-back for $VIM: "/usr/local/share/vim"
Compilation: gcc -c -I. -Iproto -DHAVE_CONFIG_H -DFEAT_GUI_ATHENA -DMACOS_X -g -O2 -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=1 -I/opt/X11/include
Linking: gcc -L/opt/X11/lib -L/usr/local/lib -o vim -lXaw -lXmu -lXext -lXpm -lXt -lX11 -lSM -lICE -lm -lncurses -liconv -lintl -L/usr/local/var/pyenv/versions/3.7.4/lib/python3.7/config-3.7m-darwin -lpython3.7m -framework CoreFoundation