MacPorts と Universal Binary
Universal Binary をビルドしたい場合、ライブラリも Universal Binary でないといけない、……らしい*1。なので、MacPorts でインストールするライブラリも Universal Binary のやつにしたい。
まず分かったのは、「univeral
」バリアントを入れればいいということ。で、sudo port install
のたびに +universal
を付けるのは面倒なので /opt/local/etc/macports/variants.conf にこう書いておく、というのも分かった:
+universal
ところが、これだけだと、"-arch ppc -arch i386
" な*2 Universal Binary になってしまう。どうせなら*3、"-arch ppc -arch i386 -arch ppc64 -arch x86_64
" な Universal Binary にしたい。
『MacPorts Guide』には、macports.conf の「universal_archs
」で「ppc i386 ppc64 x86_64
」を指定しなさい、みたく書いてあるが、やってみたところ効果なし。どうやら割と最近入った機能らしく、1.6.0 にはまだ入っていないっぽい。
途方に暮れて*4「grep -FR -- '-arch' /opt/local
」としたところ、/opt/local/share/macports/Tcl/port1.0/portconfigure.tcl なるものを発見。で、恐る恐る修正:
--- portconfigure.tcl.bak +++ portconfigure.tcl @@ -87,10 +87,10 @@ } options configure.universal_args configure.universal_cflags configure.universal_cppflags configure.universal_cxxflags configure.universal_ldflags configure.universal_env default configure.universal_args --disable-dependency-tracking -default configure.universal_cflags {"-isysroot $sysroot -arch i386 -arch ppc"} +default configure.universal_cflags {"-isysroot $sysroot -arch i386 -arch ppc -arch x86_64 -arch ppc64"} default configure.universal_cppflags {} -default configure.universal_cxxflags {"-isysroot $sysroot -arch i386 -arch ppc"} -default configure.universal_ldflags {"-arch i386 -arch ppc"} +default configure.universal_cxxflags {"-isysroot $sysroot -arch i386 -arch ppc -arch x86_64 -arch ppc64"} +default configure.universal_ldflags {"-arch i386 -arch ppc -arch x86_64 -arch ppc64"} # Select a distinct compiler (C, C preprocessor, C++) options configure.ccache configure.distcc configure.cc configure.cxx configure.cpp configure.objc configure.f77 configure.f90 configure.fc configure.javac configure.compiler
こんなんでいいのかなぁ、と自分でも疑問に思いつつ、どうやら問題ない様子。