macOS VenturaにEmacsをソースコードからインストール
Macbook Pro 14インチ 2021が10月頭くらいから調子悪くて
macOSを再インストールしても変わらなかったので初期化してMontereyをインストールしてから13.0 Venturaにアップデートした
それでVenturaでEmacsをインストールしたときの記録です
emacsclientを使ったりEmacs.appを使ったりしたいのでソースからインストールしてます
macOS: Ventura 13.0
Emacs: 28.2
Emacs Patch: 9.1
参考
ほとんどこの記事のスクリプトでインストールしました。
https://note.com/5mingame2/n/na26256d3e1db
作業手順
1. 実行環境の用意
- Xcodeのインストール、インストール後に起動してCommand line toolsもインストールする
- Homebrewのインストール
- Homebrewで色々インストールする
- 作業場所を作成
~/src
を作業ルートにしたいので$ mkdir ~/src && cd ~/src
HomebrewではいろいろインストールしてるのでどれがEmacsのインストールに必要かわからないので全部転載
% brew list
==> Formulae
aom gnutls libogg libxrender rubberband
autoconf graphite2 libpng little-cms2 ruby-build
bdw-gc guile libpthread-stubs lz4 sdl2
brotli harfbuzz librist lzo snappy
ca-certificates highway libsamplerate m4 speex
cairo icu4c libsndfile mbedtls srt
cjson imath libsodium mpfr swift-format
cmocka isl libsoxr nettle swiftlint
curl jansson libssh2 opencore-amr tesseract
dav1d jpeg-turbo libtasn1 openexr texinfo
ffmpeg jpeg-xl libtiff openjpeg theora
flac lame libtool openldap unbound
fontconfig leptonica libunistring openssl@1.1 webp
freetype libarchive libvidstab opus wget
frei0r libass libvmaf p11-kit x264
fribidi libb2 libvorbis pcre2 x265
gcc libbluray libvpx pixman xorgproto
gettext libevent libx11 pkg-config xvid
giflib libgccjit libxau rav1e xz
git libidn2 libxcb rbenv zeromq
glib libmpc libxdmcp readline zimg
gmp libnghttp2 libxext rtmpdump zstd
おそらく下記でいけるのかな、たぶん。問題があったら↑の内容をいろいろインストールしてください。
brew install gcc libgccjit textinfo
2. ソースコードをダウンロード
https://www.gnu.org/software/emacs/download.html
公式から28.2最新ソースコードをダウンロード
ftp://ftp.math.s.chiba-u.ac.jp/emacs/
千葉大学からパッチのダウンロード、Emacs 28.2用は9.1でした
Finderで コマンド+K
でアクセス
3. 準備
https://note.com/5mingame2/n/na26256d3e1db
参考にしたソースコードのバージョン指定を修正
下記を ~/src/emacs_build.sh
として保存
ソースコードの解凍はコメントアウトしている
#!/bin/bash
EMACS_VER=28.2
MACPORT_VER=9.1
# tar xvfz emacs-${EMACS_VER}.tar.gz
tar xvfz emacs-${EMACS_VER}-mac-${MACPORT_VER}.tar.gz
cd emacs-${EMACS_VER}
patch -p 1 < ../emacs-${EMACS_VER}-mac-${MACPORT_VER}/patch-mac
cp -r ../emacs-${EMACS_VER}-mac-${MACPORT_VER}/mac mac
cp ../emacs-${EMACS_VER}-mac-${MACPORT_VER}/src/* src
cp ../emacs-${EMACS_VER}-mac-${MACPORT_VER}/lisp/term/mac-win.el lisp/term
cp nextstep/Cocoa/Emacs.base/Contents/Resources/Emacs.icns mac/Emacs.app/Contents/Resources/Emacs.icns
installprefix=`pwd`/build
app_dir=$installprefix/Emacs.app/Contents/Resources
compver=x86_64-apple-darwin`uname -r`
# LIBXML2 for Catalina
MACSDK=`xcrun --show-sdk-path`
export LIBXML2_CFLAGS="-I${MACSDK}/usr/include/libxml2"
export LIBXML2_LIBS="-lxml2"
set -e
./autogen.sh
./configure --without-x --without-dbus --without-xpm CC=clang CFLAGS='-Os' --enable-mac-app=$installprefix --prefix=$installprefix --enable-mac-self-contained --with-native-compilation
make
make install
set +e
echo 'Done! Find your Emacs.app at '$installprefix'.'
4. コンパイルの前に
1度インストールしてEmacs.appを実行したら
ld: warning: -undefined dynamic_lookup may not work with chained fixups
というエラーが起きた。
参考
https://fu7mu4.hatenablog.com/entry/2022/11/03/224336
https://github.com/emacs-mirror/emacs/commit/97b928ce09d6034ebcb541fb548e5d4862302add
ということで、
ソースコードを解凍しgithubの修正を直接行った。
~/src/emacs-28.2/lisp/emacs-lisp/comp.el
のファイル内検索 native-comp-driver-options
して修正
- (defcustom native-comp-driver-options nil
+ (defcustom native-comp-driver-options (when (eq system-type 'darwin)
+ '("-Wl,-w"))
5. コンパイル
$ cd ~/src/emacs-28.2
$ sh ./emacs_build.sh
あとは実行完了を待つ
成功すると ~/src/emacs-28.2/build/Emacs.app
ができあがるので /Applications
にコピーを作成
6. emacsclient
emacsclientは ~/bin
に設置したいのでフォルダ作成してからシンボリックリンクを作成
$ mkdir ~/bin
$ ln -s /Applications/Emacs.app/Contents/MacOS/bin/emacsclient ~/bin/
補足
今回作業場所を ~/src
にしたり ~/bin
にemacsclientを設置しているのは
以前に /usr/local/(src|bin)
などを使っていたらHomebrewに文句を言われた気がしたからです
なのでホームディレクトリ配下にしました
もちろんパスも追加しています
# .zshrc
export PATH=$HOME/bin:$PATH