かつて Universal Binary というのは PowerPC と i386 の実行形式を一つにまとめる方式として重宝していましたが、Snow Leopard が出た今、むしろ i386 と x86_64 をまとめる用途が増えそうです。
というわけで、それを MacPorts でやる方法。
ちなみに以下は MacPorts 1.8.1 for Leopardの例です。Snow Leopard ではどうなっているのか報告してもらえると助かります。
実に簡単です。
/opt/local/etc/macports/macports.confを、以下の通り編集するだけです。
--- macports.conf.default 2009-09-29 07:03:39.000000000 +0900 +++ macports.conf 2009-10-02 04:27:10.000000000 +0900 @@ -96,7 +96,7 @@ # Options for Universal Binaries (+universal variant) # machine architectures -universal_archs i386 ppc +universal_archs i386 x86_64 # Options for generated startup items # startupitem_type may be "default", "systemstarter", "launchd", or "none";
あとは普通に+universalを variant として指定すれば、 i386 と x86_64 の双方をサポートしたportが出来ます。
これのきっかけは、手元の Perl を 5.10.1 に入れ替えたこと。 5.10.1 から、Mac OS X でも -Duse64bitall を普通に使えるようになったのですが、その際に perl は x86_64 になります。この場合、当然 XS とそれに link する libraries も x86_64 対応していなければなりません。/usr/lib 以下はほとんど Universal Binary なのですが、例えば GMP など、その下にない libraries は MacPorts でインストールしておくと駱駝というわけです。ちなみに perl は
sh Configure -DDEBUGGING -Doptimize='-g -pipe -Os' \ -Dusethreads -Dusemultiplicity -Duse64bitall -des
と Configure しました。
以前
で示したような方法も不要で、sudo port -v install gmp +universal で問題なくインストール出来ました。
Enjoy!
Dan the MacPorts User
P.S. 1.8.1のインストーラーが勝手にdot fileにpathを追加するのはちょっと許しがたい。30秒ほどあわててしまった。
ところで、
# MACOSX_DEPLOYMENT_TARGET
universal_target 10.5
# the SDK "sysroot" to use
universal_sysroot /Developer/SDKs/MacOSX10.5.sdk
は変えなくてもOK?