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