macports-logo

かつて 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秒ほどあわててしまった。