なんとかビルド出来ました。こりゃEmacs人口が減るわけだ。。

Emacs-24.3の頃からクラッシュする問題に悩まされていたんです。

そんな中見つけたのがMew-jaのこの情報

素の Emacs は、Mac では不安定です。山本さんのパッチを当てて使うと、ほ
とんど落ちなくなります。

    ftp://ftp.math.s.chiba-u.ac.jp/emacs/

–かず

そこで今回からこのパッチ(experimental/hackers-onlyパッチ)を使うことにしました。

Emacs24 のインストールと新機能 : 紹介マニア

インラインパッチ(IMEパッチ)は当たらなくなるので、ac-mozc.el +
mozc_emacs_helperを使うことにしました。というかインラインパッチの
最新はどこに。。(2015-01-04追記: もういらないみたいです。→ [2015-01-04-1] )

mozc-emacs-helperをインストールするhomebrewを書いた|Act as Professional

最終的なビルド手順はこちら。前述の紹介マニアのやり方ほぼそのままです。

デフォルトでは/usr/local以下に一部インストールされてしまうので、
configureに–prefixオプションを指定し、~/opt以下に変更しています。
この辺はご自由に。パッチなしのビルドではなぜ必要ないかは調べていません。

$ curl -LO http://ftp.gnu.org/pub/gnu/emacs/emacs-24.4.tar.xz
$ curl -LO ftp://ftp.math.s.chiba-u.ac.jp/emacs/emacs-24.4-mac-5.2.tar.gz
$ tar xfJ emacs-24.4.tar.xz
$ tar xfz emacs-24.4-mac-5.2.tar.gz
$ cd emacs-24.4
$ patch -p 0 < ../emacs-24.4-mac-5.2/patch-mac
$ cp -r ../emacs-24.4-mac-5.2/mac mac
$ cp ../emacs-24.4-mac-5.2/src/* src
$ cp ../emacs-24.4-mac-5.2/lisp/term/mac-win.el lisp/term
$ cp nextstep/Cocoa/Emacs.base/Contents/Resources/Emacs.icns mac/Emacs.app/Contents/Resources/Emacs.icns
$ ./configure --prefix=$HOME/opt/emacs-24.4 --with-mac --without-x
$ make
$ make GZIP_PROG='' install # *.elを圧縮したくないので
$ cp -r mac/Emacs.app ~/Applications

※ この手順だとemacsclientやetagsは~/opt/emacs-24.4/bin以下にイン
ストールされます。適宜ご利用ください。

⌘キーとOptionキーが入れ替わってしまったので、下記設定を追加しました。

(setq mac-command-modifier 'super)
(setq mac-option-modifier 'meta)

あと、libxml2絡みで無駄にハマったので、以下に残しておきます。

libxml2がらみでコンパイルエラーが発生

Homebrewでpkg-configを入れていると、configureがlibxml2のCFLAGSの判
別に失敗し、コンパイルエラーが発生する。

gcc -c  -Demacs  -I. -I. -I../lib -I./../lib    -fconstant-cfstrings    -DMAGICKCORE_HDRI_ENABLE=0 -DMAGICKCORE_QUANTUM_DEPTH=16 -DMAGICKCORE_HDRI_ENABLE=0 -DMAGICKCORE_QUANTUM_DEPTH=16 -I/usr/local/Cellar/imagemagick/6.8.9-8/include/ImageMagick-6  -I/usr/include/libxml2          -MMD -MF deps/xml.d -MP   -Wno-switch -Wno-tautological-constant-out-of-range-compare -Wno-pointer-sign  -g3 -O2  xml.c
xml.c:23:10: fatal error: 'libxml/tree.h' file not found
#include <libxml/tree.h>
         ^
1 error generated.
make[1]: *** [xml.o] Error 1
make: *** [src] Error 2

configureの14922行目のこの行が原因。

LIBXML2_CFLAGS=`"$PKG_CONFIG" --cflags "libxml-2.0 > 2.6.17" 2>&5` &&

おまえか!

$ pkg-config --cflags "libxml-2.0 > 2.6.17"
-I/usr/include/libxml2
# => 存在しないディレクトリ

configure前に適切なCFLAGSをセットするか、configureに–without-xml2
オプションを付ければ良い。

今回は前者を採用した。libxml2は使いたかったので。

export CFLAGS=`xml2-config --cflags`
# => -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.10.sdk/usr/include/libxml2がセットされる

bug-gnu-emacs 18779 では

ln -s /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.10.sdk/usr/include /usr/include
していたが、Yosemiteで/usr/includeが存在してよいかは分からない。

ここまで書いてこんな記事を見つけた。

Mavericksにしたら/usr/includeが消失していた件 - とあるぼっちの生存報告

あれ、Mavericksもそうだったん?
xcode-select --installって今も必要なのかな?やってみるか。

/usr/includeが出来ました!/(^o^)\

結論: xcode-select --installしていればハマらなかった。

追記(2014-11-03):
configureに–prefixオプションを指定しないと、一部/usr/local以下に
インストールされてしまうので修正しました。

追記(2014-12-30):
experimental/hackers-onlyパッチが5.2に更新されていたので、手順をアッ
プデートしました。
あと、experimental/hackers-onlyパッチを当てると、emacsclientがなく
なるのは間違いでした。今回の手順だと~/opt/emacs-24.4/bin以下にイン
ストールされるので、こちらも修正しました。