Lion にバージョンアップしたら [2011-03-10-1] の方法でビルド出来なく
なってしまいました。

Macports とか Homebrew の情報はあったのですが、「ソースからビルド」
の情報は見つけられなかったので、ここにまとめます。

パッチは 3 つ必要でした。

  1. patch-no-pie.diff
  2. patch-src_unexmacosx.c.diff
  3. patch-fix-title-bar.diff

1 と 2 がビルドを通すために必要です。パッチを当てないとこんなエラー
ログを吐いてビルドに失敗します。

Dumping under the name emacs
unexec: unrecognized section name in __DATA segment
--- List of All Regions ---
   address     size prot maxp
--- List of Regions to be Dumped ---
   address     size prot maxp
--- Header Information ---
Magic = 0xfeedfacf
CPUType = 16777223
CPUSubType = -2147483645
FileType = 0x2
NCmds = 20
SizeOfCmds = 3464
Flags = 0x00200085
Highest address of load commands in input file: 0x5f4000
Lowest offset of all sections in __TEXT segment:   0x14b0
--- List of Load Commands in Input File ---
# cmd              cmdsize name                address     size
0 LC_SEGMENT_64          72 __PAGEZERO                0 0x100000000
1 LC_SEGMENT_64         712 __TEXT           0x100000000 0x1d3000
                           __text           0x1000014b0 0x18e9aa
                           __stubs          0x10018fe5a    0x61e
                           __stub_helper    0x100190478    0xa44
                           __const          0x100190ec0    0x9b4
                           __cstring        0x100191878  0x17266
                           __gcc_except_tab 0x1001a8ae0     0x40
                           __unwind_info    0x1001a8b20   0x1d98
                           __eh_frame       0x1001aa8b8  0x28740
2 LC_SEGMENT_64        1512 __DATA           0x1001d3000 0x367000
                           __program_vars   0x1001d3000     0x28
                           __nl_symbol_ptr  0x1001d3028     0x10
                           __got            0x1001d3038    0x1a0
                           __la_symbol_ptr  0x1001d31d8    0x828
                           __objc_classlist 0x1001d3a00     0x70
                           __objc_protolist 0x1001d3a70     0x10
                           __objc_imageinfo 0x1001d3a80      0x8
                           __objc_const     0x1001d3a88   0x21d0
                           __objc_selrefs   0x1001d5c58    0xe38
                           __objc_msgrefs   0x1001d6a90     0xf0
                           __objc_classrefs 0x1001d6b80    0x1f0
                           __objc_superrefs 0x1001d6d70     0x60
                           __objc_data      0x1001d6dd0    0x460
                           __data           0x1001d7240 0x2f5f18
                           __const          0x1004cd160   0x2020
                           __cfstring       0x1004cf180    0x640
                           __bss            0x1004cf7c0  0x59518
                           __common         0x100528ce0  0x10959
3 LC_SEGMENT_64          72 __LINKEDIT       0x10053a000  0xba000
4 LC_DYLD_INFO_ONLY      48
5 LC_SYMTAB              24
6 LC_DYSYMTAB            80
7 LC_LOAD_DYLINKER       32
8 LC_UUID                24
9 unknown                16
10 LC_UNIXTHREAD         184
11 LC_LOAD_DYLIB          88
12 LC_LOAD_DYLIB          56
13 LC_LOAD_DYLIB          56
14 LC_LOAD_DYLIB          56
15 LC_LOAD_DYLIB         104
16 LC_LOAD_DYLIB         104
17 LC_LOAD_DYLIB         112
18 LC_LOAD_DYLIB          96
19 unknown                16
0x7fa2024fc080 (sz:   0x3f2d/  0x3f30)
0x7fa202400000 (sz:  0xfc07f/ 0xfc080)
0x7fa2026fc080 (sz:   0x3f2c/  0x3f30)
0x7fa202600000 (sz:  0xfc07f/ 0xfc080)
0x7fa2038fc080 (sz:   0x3f2d/  0x3f30)
0x7fa203800000 (sz:  0xfc060/ 0xfc080)
0x7fa2025fc080 (sz:   0x3f2c/  0x3f30)
0x7fa202500000 (sz:  0xfc07e/ 0xfc080)
0x7fa203cfc080 (sz:   0x3f2c/  0x3f30)
0x7fa203c00000 (sz:   0x639f/ 0xfc080)
0x7fa204ff8000 (sz:    0x138/  0x7fa8)
0x7fa204800000 (sz:  0x10dbe/0x7f8000)
0x7fa2037f8000 (sz:   0x728a/  0x7fa8)
0x7fa203000000 (sz: 0x725fff/0x7f8000)
0x1093f1000 (sz:        0/  0x1000)
--- Load Commands written to Output File ---
Writing segment __PAGEZERO       @        0 (       0/0x100000000 @          0)
Writing segment __TEXT           @        0 (0x1d3000/0x1d3000 @ 0x100000000)
Writing segment __DATA           @ 0x1d3000 (0x367000/0x367000 @ 0x1001d3000)
        section __program_vars   at 0x1d3000 - 0x1d3028 (sz:     0x28)
        section __nl_symbol_ptr  at 0x1d3028 - 0x1d3038 (sz:     0x10)
make[1]: *** [bootstrap-emacs] Error 1
make: *** [src] Error 2

3 を当てなくてもビルドは通りますが、下の図のようにタイトルバーが消
えるので、サイズ変更や移動が出来なくなります。実質使えませんね。

画像

必要なパッチが揃ったら、あとは簡単です。[2011-03-10-1] のビルド手順
を Lion 対応版にしたものが以下になります。

% wget http://ftp.gnu.org/pub/gnu/emacs/emacs-23.3.tar.bz2
% tar xjf emacs-23.3.tar.bz2
% cd emacs-23.3
% patch -p0 < ../patch-no-pie.diff
% patch -p1 < ../patch-src_unexmacosx.c.diff
% patch -p0 < ../patch-fix-title-bar.diff
% mkdir ../work; cd ../work
% ../emacs-23.3/configure --with-ns --without-x 2>&1 | tee ../emacs-23.3_configure.log
% cp config.log ../emacs-23.3_config.log
% make 2>&1 | tee ../emacs-23.3_make.log
% make GZIP_PROG="" install 2>&1 | tee ../emacs-23.3_make-install.log
% cp -r nextstep/Emacs.app /Applications/Emacs-23.3.app

※1 patch-fix-title-bar.diff のパッチ当ては失敗すると思いますが、
src/Changelog なので無視して良いです。
※2 $CC, $CFLAGS, $LDFLAGS は設定する必要はありません。
※3 使用した gcc は /usr/bin/gcc です。私は /Developer/usr/bin に
パスを通していません。どんな時に必要なんでしょう?

参考情報:
#30268 (emacs-app @23.3 fails to build on Lion (“unexec: cannot write section __data”)) – MacPorts
Library/Formula/emacs.rb at master from mxcl/homebrew - GitHub

追記(2011-08-01):
よく落ちるので Homebrew の Emacs を使うことにしました。何かパッ
チが足りないのかも。。。↓こちらをご参考下さい。
[brew][lion] OS X Lionにhomebrewでemacsとかをインストール - SOSOG
Homebrew の使い方は [2011-07-26-1] にまとめています。