未来の自分への備忘録、そして見知らぬ誰かへの参考情報
GNU Emacs の公式サイトでは apt-get を使ったインストールを記載しているが、これだと 2021/11/19 時点では Emacs 26.3 までしかインストールされない。macOS のバイナリーは最新版である 27.2-3 で公開されているし、Linux でも最新版を使いたかったから最新版をインストールする方法を調べた。しかし、いくらぐぐってもぐぐり方が悪いのか微妙に古い情報しか出てこないので、自力でソースビルドしてみることにした。で、どうせ忘れるだろうから備忘録として残しておくことにした。
Emacs のソースコードを git clone してくる。
GitHub 上だとここにミラーリポジトリがある。本家の方は git://git.sv.gnu.org/emacs.git なので好きな方から git clone
したらいい。
$ git clone git@github.com:emacs-mirror/emacs.git emacs
あとは INSTALL に従うだけ…のはずが、世の中そんなに甘くない
インストール手順は INSTALL に書いてあるので、それに従えばできるはず。なのだが、世の中そんなに甘くない。GitHub 上の BASIC INSTALLATION では emacs-VERSION.tar.xz を wget
してきているが、 git clone
しているので少し手順が違う*1。
$ cd <yourpath>/emacs $ git fetch origin emacs-28 $ ./autogen.sh $ ./configure --with-x-toolkit=gtk3 --with-xpm=ifavailable --with-jpeg=ifavailable --with-gif=ifavailable --with-tiff=ifavailable --with-gnutls=ifavailable $ make $ src/emacs -Q $ make check $ sudo make install $ make clean
必要なライブラリが既に揃っているならばこれで大丈夫なはず*2。個人的にハマったところを以下に紹介する。
X toolkit が見つからないと怒られる
$ ./configure (中略) checking for libXaw... configure: error: No X toolkit could be found. If you are sure you want Emacs compiled without an X toolkit, pass --with-x-toolkit=no to configure. Otherwise, install the development libraries for the toolkit that you want to use (e.g. Gtk+) and re-run configure.
X toolkit が見つからないと怒られた。--with-x-toolkit=no
オプションを付けたら無視できそうに思えたのでこのオプションを付けて実行してみた。
$ ./configure --with-x-toolkit=no (中略) checking for gif_lib.h... no configure: error: The following required libraries were not found: libXpm libjpeg libpng libgif/libungif libtiff gnutls Maybe some development libraries/packages are missing? To build anyway, give: --with-xpm=ifavailable --with-jpeg=ifavailable --with-png=ifavailable --with-gif=ifavailable --with-tiff=ifavailable --with-gnutls=ifavailable as options to configure.
で、画像を表示するためのライブラリがなさそうに思えたので「やっぱり X toolkit って必要なんじゃね?」と思った*3。なので再度 --with-w-toolkit
を指定して実行してみることにした。
GTK が見つからないと怒られる
$ ./configure (中略) checking for libXaw... configure: error: No X toolkit could be found. If you are sure you want Emacs compiled without an X toolkit, pass --with-x-toolkit=no to configure. Otherwise, install the development libraries for the toolkit that you want to use (e.g. Gtk+) and re-run configure.
再掲。libXaw なるものをチェックして「X toolkit を見つけられない」と言っているように読めるので、本当に libXaw なるものがインストールされていないのか確認した。
$ apt search libxaw ソート中... 完了 全文検索... 完了 libxaw-doc/focal 2:1.0.13-1 all X11 Athena Widget library (documentation) libxaw3dxft6/focal 2.9.1.4-3.2 amd64 An extended version of Xaw3d with support for UTF8 libxaw3dxft8/focal 1.6.2e-2 amd64 Extended version of Xaw3d with support for UTF8 libxaw3dxft8-dev/focal 1.6.2e-2 amd64 Extended version of Xaw3d with support for UTF8 (Development files) libxaw7/focal,now 2:1.0.13-1 amd64 [インストール済み、自動] X11 Athena Widget library libxaw7-dbg/focal 2:1.0.13-1 amd64 X11 Athena Widget library (debug package) libxaw7-dev/focal 2:1.0.13-1 amd64 X11 Athena Widget library (development headers) xaw3dg/focal 1.5+E-18.3 amd64 Xaw3d ウィジェットセット xpaint-dev/focal 2.9.1.4-3.2 amd64 X 用のシンプルなペイントプログラム (開発用ファイル)
libxaw7 なるものがインストール済みなのでこれを --with-w-toolkit
に指定したら行けそうな気がしたので試してみた。
$ ./configure --with-x-toolkit=libxaw7 (中略) configure: error: '--with-x-toolkit=libxaw7' is invalid; this option's value should be 'yes', 'no', 'lucid', 'athena', 'motif', 'gtk', 'gtk2' or 'gtk3'. 'yes' and 'gtk' are synonyms. 'athena' and 'lucid' are synonyms.
指定できる値は決まっているらしい。一体どれを指定したら良いのか分からなかったのでぐぐる。
こちらのサイトを参考にさせてもらった。
オプションを渡さなければ、GTK3 が使われる。--with-x-toolkit=gtk3 相当ですな。Ubuntu のデスクトップ環境で指定しているテーマが適用される。
なので恐らく --with-w-toolkit=gtk3
で俺が欲しいものが作られそうな気がしたので採用した。
$ ./configure --with-x-toolkit=gtk3 (中略) checking for gtk+-3.0 >= 3.10 glib-2.0 >= 2.37.5... no configure: error: No package 'gtk+-3.0' found No package 'glib-2.0' found
エラーメッセージが変わった。どうやら gtk+-3.0 と glib-2.0 なるものが見つからないらしい。apt search
で確認する。
$ apt search gtk+-3.0 ソート中... 完了 全文検索... 完了 gir1.2-gtk-3.0/focal-updates,now 3.24.20-0ubuntu1 amd64 [インストール済み、自動] GTK graphical user interface library -- gir bindings gir1.2-spiceclientgtk-3.0/focal 0.37-2fakesync1 amd64 GTK3 widget for SPICE clients (GObject-Introspection) gnome-accessibility-themes/focal 3.28-1ubuntu1 all High Contrast GTK+ 2 theme and icons gnome-themes-extra/focal 3.28-1ubuntu1 amd64 Adwaita GTK+ 2 theme — engine gnome-themes-extra-data/focal 3.28-1ubuntu1 all Adwaita GTK+ 2 theme — common files libgtk-3-0/focal-updates,now 3.24.20-0ubuntu1 amd64 [インストール済み、自動] GTK graphical user interface library libspice-client-gtk-3.0-5/focal 0.37-2fakesync1 amd64 GTK3 widget for SPICE clients (runtime library) libspice-client-gtk-3.0-dev/focal 0.37-2fakesync1 amd64 GTK3 widget for SPICE clients (development files)
libgtk-3-0 なるものがインストールされてそう。
$ apt search glib-2.0 ソート中... 完了 全文検索... 完了 gir1.2-glib-2.0/focal-updates,now 1.64.1-1~ubuntu20.04.1 amd64 [インストール済み] GLib、GObject、Gio、GModule 用 Introspection データ gir1.2-spiceclientglib-2.0/focal 0.37-2fakesync1 amd64 Spice サーバと通信する GObject (GObject イントロスペクション) libqt5glib-2.0-0/focal 1.2.0-5 amd64 C++ bindings library for GLib and GObject with a Qt-style API - Qt 5 build librust-glib-sys-dev/focal 0.9.0-3 amd64 FFI bindings to libglib-2.0 - Rust source code libspice-client-glib-2.0-8/focal 0.37-2fakesync1 amd64 GObject for communicating with Spice servers (runtime library) libspice-client-glib-2.0-dev/focal 0.37-2fakesync1 amd64 GObject for communicating with Spice servers (development files)
gir1.2-glib-2.0 なるものがインストールされてそう。
つまるところ gtk+-3.0 と glib-2.0 はインストールされていると思っていた。ここがハマりポイントでめっちゃハマった。
apt-file コマンドを使う
どこかで makeinfo が見つからなくて手動でインストールする*4ためにいろいろ調べてたらこのサイトに行き着いた。
$ sudo apt install apt-file $ sudo apt-file search gtk+-3.0 libgtk-3-dev: /usr/lib/x86_64-linux-gnu/pkgconfig/gtk+-3.0.pc valac-0.48-vapi: /usr/share/vala-0.48/vapi/gtk+-3.0.deps valac-0.48-vapi: /usr/share/vala-0.48/vapi/gtk+-3.0.vapi
どうやらインストールされていると思っていた gtk+-3.0 はインストールされていなかったようだ。
$ sudo apt install libgtk-3-dev
これをやってようやく先に進めた。
JPEG とか GIF を表示してくれそうなライブラリが見つからないと怒られる
$ ./configure --with-x-toolkit=gtk3 (中略) checking for gif_lib.h... no configure: error: The following required libraries were not found: libXpm libjpeg libgif/libungif libtiff gnutls Maybe some development libraries/packages are missing? To build anyway, give: --with-xpm=ifavailable --with-jpeg=ifavailable --with-gif=ifavailable --with-tiff=ifavailable --with-gnutls=ifavailable as options to configure.
libXpm libjpeg libgif/libungif libtiff gnutls
こいつらが見つからないらしい。
Maybe some development libraries/packages are missing?
こうおっしゃっているしこれらのオプションをつけて実行してみよう。
$ ./configure --with-x-toolkit=gtk3 --with-xpm=ifavailable --with-jpeg=ifavailable --with-gif=ifavailable --with-tiff=ifavailable --with-gnutls=ifavailable
なんか行けたっぽい。
まとめ
以前 macOS が Big Sur くらいになったあたりで Downloads ディレクトリなどファイルアクセス権限をもらわないといけないディレクトリに Emacs からアクセスできなくなった。それを気軽に ruby-jp の emacs チャンネルで
「このアクセスできないやつ、みんなどうやって解決してるんですか?」
と聞いたら、ほとんどの人の回答が
「ソースビルドでインストールしているから、その現象に遭遇したことがない」
というものだった。Stable 版のパッケージが反映されるのも時差があるので、最新版を早く使いたければソースビルドが正しいのだろう。
勢い余って 28.0 をインストールしたが、そこはご愛嬌で。
あと ./configure --help
を実行するとオプションの説明がちゃんと書かれているからちゃんと読もう。