Debian11でVim9.0をビルドしてみる
これまでDebianのリポジトリからaptでインストールしたVimを使っていましたが、Versionが8.2でした。そこで、Vim9.0を使うためにビルドすることにしました。しかし、Vimのビルドは初めてなので、やり方を調べることから始めました。
作業は、vim-jpに記載されている説明とconfigure --help を見ながら行い、疑問があったらその都度ネット検索しました。
vim-jp » Linuxでのビルド方法
目次
- ビルドに必要なものをインストール
- Vimのソースを取得する(and 必要に応じてコード修正)
- コンパイルとインストール
- configureをやり直す場合
- configureの内容
- sodium, sound, tclを有効にする
- LuaとLuaJITとlibncurses-dev
ビルドに必要なものをインストール
まずはビルドに必要なツールや拡張(Perl拡張とかLua拡張とか・・・)に必要なものをインストールしました。インストールしたものは以下のとおりです。
build-essential autoconf automake cproto gettext libtinfo-dev libacl1-dev libgpm-dev libxmu-dev libgtk-3-dev libxpm-dev libperl-dev python3-dev ruby-dev libncurses-dev # Lua拡張については以下のいずれかをインストール (Luaを使う場合) lua5.4 liblua5.4-dev (Luaの代わりにLuaJITを使う場合) luajit libluajit-5.1-dev # sodium、sound、tclを有効にするために次の3つもインストール libsodium-dev libcanberra-dev tcl-dev
Luaに関しては、ネット上にLuaJITの方が高速という話があったので、私はLuaJITを試すことにしました(後掲のconfigure実行例はLuaJITを使う前提となっています)。
libncurses-devについては、これがインストールされていない状態でconfigureを実行したら以下の文言が表示されたので、インストールしています。
checking for tgetent()... configure: error: NOT FOUND! You need to install a terminal library; for example ncurses. On Linux that would be the libncurses-dev package. Or specify the name of the library with --with-tlib.
<vim-jpからの引用>
build-dep コマンドを使わずに、パッケージを個別にインストールするには以下を実行します。
$ sudo apt install git gettext libtinfo-dev libacl1-dev libgpm-dev
.
GCC等のビルドツールをまだインストールしていない場合は以下も実行します。
$ sudo apt install build-essential
.
gvim (GTK2 GUI版)をビルドするには以下も追加で必要です。(GUI版は一般的にはGTK2またはGTK3を使うのがよいでしょう。)
$ sudo apt install libxmu-dev libgtk2.0-dev libxpm-dev
.
Perl, Python2,3, Ruby拡張を使うには以下も追加で必要です。
$ sudo apt install libperl-dev python-dev python3-dev ruby-dev
.
Lua拡張を使うには以下も追加で必要です。
$ sudo apt install lua5.2 liblua5.2-dev
.
LuaJITのLua拡張を使うには代わりに以下も追加で必要です。
$ sudo apt install luajit libluajit-5.1
.
ソースコードを修正する場合は、以下のパッケージも必要になることがあります。
$ sudo apt install autoconf automake cproto
vim-jpに記述されているもののうち、python-devは我が家のDebian環境に見当たりませんでした。
apt search python
の結果を眺めてみると
python2-dev python2.7-dev python3-dev python3.9-dev
の4つがありました。ここにpython-devが登場しなかったことと、python3-devがインストール済みだったことから、python-devは無視することにしました。
Vimのソースを取得する(and 必要に応じてコード修正)
Vimのソースをgitで取得します。
git clone https://github.com/vim/vim.git
git cloneを実行した後にソースが更新された場合は、以下のコマンドで最新のソースを取得できます。
$ git pull
必ずしも必要ではありませんが、私はGvimでインライン入力をする時に気になることがあり、この段階でソースコードの一部を修正しています(手順は以下の記事のとおり)。
Gvimのインライン入力で困ったこと - 恥は/dev/nullへ by 初心者
コンパイルとインストール
cd vim/src
configureを実行します。次の例では、ホームディレクトリの .localにインストールしようとしています。
それと、LuaJITを使うために --with-luajitオプションを含めています。LuaJITではなくLuaを使う場合、このオプションは不要です。
./configure --prefix=/home/hoge/.local --enable-multibyte --enable-cscope --enable-perlinterp --enable-python3interp --enable-rubyinterp --enable-luainterp --enable-fontset --enable-xim --enable-terminal --enable-fail-if-missing --with-luajit --with-x --enable-gui=gtk3 --enable-tclinterp
コンパイルしてインストールします。
make make install
ここまでで作業は終わりです。この後に続く文章は試行錯誤のメモです。
configureをやり直す場合
オプションを変更してからビルドし直す場合は「make reconfig」を実行するとvim-jpに書かれていたのですが、なぜか上手く行きませんでした。
画面を見ると「make distclean」を実行しなさいと表示されていたので、次のようにしたらビルドが上手く行きました。
make distclean ./configure --prefix=/home/hoge/.local --enable-multibyte --enable-cscope --enable-perlinterp --enable-python3interp --enable-rubyinterp --enable-luainterp --enable-fontset --enable-xim --enable-terminal --enable-fail-if-missing --with-luajit --with-x --enable-gui=gtk3 --enable-tclinterp make make install
configureの内容
configureのヘルプを見るには次のようにします。
./configure --help
オプションの一部について調べてみました。
--with-features=huge tiny, normal or huge (default: huge) --enable-multibyte Include multibyte editing support. --enable-gpm Use gpm (Linux mouse daemon). default=yes OPTS=yes/no/dynamic これもdefaultがyes --enable-cscope Include cscope interface --enable-gui=gtk3 X11 GUI. default=auto OPTS=auto/no/gtk2/gnome2/gtk3/motif/haiku/photon/carbon --enable-perlinterp --enable-tclinterp --enable-python3interp --enable-rubyinterp --enable-luainterp --with-luajit Link with LuaJIT instead of Lua. --enable-fontset Include X fontset output support. --enable-xim Include XIM input support. --enable-terminal Enable terminal emulation support. --enable-fail-if-missing Fail if dependencies on additional features specified on the command line are missing. --with-x use the X Window System
このうち
--with-features=huge --enable-gpm
の2つはconfigure実行時に指定しませんでした。--with-featuresはデフォルトで hugeになると書かれていますし、--enable-gpmもデフォルトでyesになると書かれているからです。ただ、将来的にデフォルト値が変更されても困るので、明示的に指定しておいて良い気もします。
なお、ネット上では --enable-acl というオプションを指定している例がありましたがconfigureのヘルプに --enable-acl は記載されておらず、--disable-acl だけが載っていました。もしかしたら以前は--enable-aclが存在していたのかもしれません。
なお、--enable-aclを指定せずにビルドしましたが「+acl」になっていました。
<--enable-multibyte>
--enable-multibyteが何なのか分かりませんでしたが、Vimのヘルプにマルチバイトサポートという項目がありました。「中国語、日本語、韓国語などの」という記載があったので、2バイト以上の文字を扱うことを指しているものと想像します。
<XXXinterp>
ヘルプに以下の記述がありました。
--enable-perlinterp=OPTS Include Perl interpreter. default=no OPTS=no/yes/dynamic --enable-python3interp=OPTS Include Python3 interpreter. default=no OPTS=no/yes/dynamic --enable-rubyinterp=OPTS Include Ruby interpreter. default=no OPTS=no/yes/dynamic --enable-luainterp=OPTS Include Lua interpreter. default=no OPTS=no/yes/dynamic
これを読んで「=OPTS」を指定する必要があるのかなと思いましたが、vim-jpのビルド例ではOPTSを指定していませんでした。そこで、指定せずにconfigureとmakeを実行しました。これで問題はありませんでした。
なお、--enable-tclinterpも「=OPTS」を指定せずにconfigureとmakeを実行して問題ありませんでした。
sodium, sound, tclを有効にする
上述したconfigureオプション例は最終形で、その前には若干の失敗(?)もありました。
最初にビルドしたVimとDebianのリポジトリからaptでインストールしたVimを比較したところ、aptでインストールしたVimでは以下の3つが「+」(有効)になっているものの、ビルドしたVimでは「-」(無効)となっていました。
sodium sound tcl
<sodium>
sodiumについては、configureが出力した内容に次の記述がありました。
checking --enable-libsodium argument... Defaulting to yes checking for libsodium... no; try installing libsodium-dev
この内容から、デフォルトでyesになるのでlibsodium-devをインストールするだけで良さそうです。
<sound>
configureのヘルプを見てもsoundに関するオプションが分かりませんでした。
しかし、ネット検索をしてみると「libcanberra」が関係していることが分かったので、libcanberra-devをインストールすることにしました。
<tcl>
configureのヘルプで--enable-tclinterpというオプションを見つけました。関係がありそうなパッケージをapt searchしてみたらtcl-devが見つかりました。
以上のことから「libsodium-dev」「libcanberra-dev」「tcl-dev」をインストールし、オプションに --enable-tclinterp を追加してconfigureすることにしました。
<作業内容>
sudo apt install libsodium-dev libcanberra-dev tcl-dev cd vim/src make distclean ./configure --prefix=/home/hoge/.local --enable-multibyte --enable-cscope --enable-perlinterp --enable-python3interp --enable-rubyinterp --enable-luainterp --enable-acl --enable-fontset --enable-xim --enable-terminal --enable-fail-if-missing --with-luajit --with-x --enable-gui=gtk3 --enable-tclinterp make make install
こうしてビルドし直したVimを調べたらsodium、sound、tclが有効になっていました。
LuaとLuaJITとlibncurses-dev
Luaを使う場合
Luaを使う場合、以下の2つを事前にインストールしておきます。
lua5.4 liblua5.4-dev
configureを実行する際、以下のオプションを使います
--enable-luainterp
Luaの代わりにLuaJITを使う場合
Luaの代わりにLuajitを使う場合、以下の2つを事前にインストールしておきます。
luajit libluajit-5.1-dev
configureを実行する際、以下のオプションを使います
--enable-luainterp --with-luajit
失敗談
LuaJITを使ってビルドした後、今度はLuaを使う想定でビルドし直してみました。そこで「LuaJITをアンインストール」→「configureを実行」としたら、以下のエラーが表示されました。
checking --with-luajit... yes checking for luajit... no checking if lua.h can be found in /usr/include... no checking if lua.h can be found in /usr/include/lua... no checking if lua.h can be found in /usr/include/moonjit-2.3... no configure: error: could not configure lua
エラー内容から分かるとおり、原因は--with-luajitオプションを付けたままconfigureを実行してしまったことです。
libncurses-dev
libncurses-devがインストールされていない状態でLuaをインストールしてみました。
sudo apt install lua5.4 liblua5.4-dev
を実行したら、次のように表示されました。
以下の追加パッケージがインストールされます: liblua5.4-0 libncurses-dev libreadline-dev 提案パッケージ: ncurses-doc readline-doc 以下のパッケージが新たにインストールされます: liblua5.4-0 liblua5.4-dev libncurses-dev libreadline-dev lua5.4
理由は分かりませんがlibncurses-devとlibreadline-devもインストールされました。