Emacs HEAD のコンパイルとインストールを行う.
環境変数を設定する.
$ export AUTOCONF_VERSION="2.71"
$ export AUTOMAKE_VERSION="1.16"
$ export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib/gcc/x86_64-unknown-openbsd7.4/11.2.0
ソースコードを最新のものにアップデートし, コンパイルとインストールを実行する.
$ ./autogen.sh
$ ./configure \
'CFLAGS=-I/usr/include -I/usr/X11R6/include -I/usr/local/include' \
'LDFLAGS=-L/usr/lib -L/usr/X11R6/lib -L/usr/local/lib -lgccjit' \
--prefix=/usr/local \
--mandir=/usr/local/share/man \
--infodir=/usr/local/info \
--with-x-toolkit=athena \
--with-imagemagick \
--with-xaw3d \
--with-x \
--without-xim \
--with-xpm=ifavailable \
--with-native-compilation
$ git pull
$ gmake bootstrap
$ gmake check
# gmake install
コンパイルは問題無く終了したが, インストール後に実行してみると起動時に,
Error in post-command-hook (ccc-update-buffer-local-frame-params): (void-function facemenu-color-equal)
というエラーが出る.
少し調べると, SKK の Emacs Lisp ソース 'ccc.el' 内で使用されている facemenu-color-equal という関数が定義されていない.
幸いなことに, このエラーについては,
(void-function facemenu-color-equal) in Emacs-28 #188 Facemenu require error in Emacs-28 #189Use faces instead of facemenu for Emacs 28 #1948に経緯が記載されている.
・ facemenu-color-equal という関数は Emacs ソースに含まれる facemenu.el 内で定義されている.
・ Emacs ソース内の NEWS.28 ファイルに, Emacs28 から facemenu.el はプリロードされなくなったという記述がある.
** facemenu.el is no longer preloaded.
・ したがって SKK が init.el から読み込まれる時には facemenu-color-equal という関数が未定義状態であるため, 上記のエラーが出る.
・ 暫定的な対処としては, init.el 内に
(require 'facemenu)
という記述を追加すればよい.
・ このエラーへの恒久的な対処として, すでに開発版の SKK 自体が facemenu.el に依存しないように変更されている.
以上のことから, このエラーを回避するためには, 上記の暫定的な措置を行うか, 最新版の
SKK をインストールすればいいことになる.
今回は, 最新版の SKK をインストールすることにより対応した.
これで最初のエラーは出力されなくなったが, 今度は起動時に
Wrong number of arguments: sit-for, 3
というエラーが出力されてしまう.
sit-for 関数の引数が間違って 3 個使用されているという内容である. この関数は Emacs が再描画するまでの時間を指定する.
調べてみると init.el 内で読み込んでいる key-chord.el というパッケージに
(sit-for delay 0 'no-redisplay)
というコードが含まれている. 引数が 3 個である (なお, 自分の環境では読み込まれているこれ以外の sit-for 関数には全て 1 個または 2 個の引数が指定されている).
さらに
Emacs Lisp Manual を見ると,
For instance, in old versions of Emacs the sit-for function accepted three arguments, like this
(sit-for seconds milliseconds nodisp)
However, calling sit-for this way is considered obsolete.
Function: sit-for seconds &optional nodisp
とある.
つまり, 古いバージョンの Emacs では sit-for 関数は seconds, milliseconds, およびオプションの nodisp という 3 個の引数を指定する定義になっていたものが, 新しいバージョンの Emacs では
(sit-for seconds &optional nodisp)
という 1 個あるいは 2 個の引数を指定する定義に変更されている.
実際に Emacs30 に含まれる NEWS ファイルの中には,
** The obsolete calling convention of 'sit-for' has been removed.
That convention was: '(sit-for SECONDS MILLISEC &optional NODISP)'.
という記述があり, 2 個または 3 個の引数をとる sit-for 関数は削除されて, 1 個あるいは 2 個の引数を指定するようになっていることがわかる.
そこで key-chord.el 内の 3 変数の sit-for 関数の呼び出し部分を
(sit-for delay 0 'no-redisplay)
から
(sit-for (+ delay 0) 'no-redisplay)
に変更した.
これで Emacs が問題無く起動するようになる.
M-x emacs-version
This is GNU Emacs 30.0.50 (build 1, x86_64-unknown-openbsd7.4,
X toolkit, cairo version 1.18.0, Xaw3d scroll bars) of 2023-11-03