恥は/dev/nullへ by 初心者

プログラミング素人がのろのろと学んだことをつづっています♪

Debian11でVim9.0をビルドしてみる

これまでDebianリポジトリからaptでインストールしたVimを使っていましたが、Versionが8.2でした。そこで、Vim9.0を使うためにビルドすることにしました。しかし、Vimのビルドは初めてなので、やり方を調べることから始めました。

作業は、vim-jpに記載されている説明とconfigure --help を見ながら行い、疑問があったらその都度ネット検索しました。

vim-jp » Linuxでのビルド方法


目次


ビルドに必要なものをインストール

まずはビルドに必要なツールや拡張(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

なお、vim-jpに以下のアドバイスが載っていました。

git cloneを実行した後にソースが更新された場合は、以下のコマンドで最新のソースを取得できます。

$ git pull


必ずしも必要ではありませんが、私はGvimでインライン入力をする時に気になることがあり、この段階でソースコードの一部を修正しています(手順は以下の記事のとおり)。
Gvimのインライン入力で困ったこと - 恥は/dev/nullへ by 初心者


コンパイルとインストール

vim/srcディレクトリに移動します。

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オプション例は最終形で、その前には若干の失敗(?)もありました。

最初にビルドしたVimDebianリポジトリから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-devlibreadline-devもインストールされました。