結論
少し手を加える必要があったが問題ない。
レシピ
前準備
Readlineとロケール問題を回避したPythonをインストールする - 日々の御伽噺
Python2.6.4をreadlineと文字ロケール問題を回避してSnow Leopardに入れる - 日々の御伽噺
基本的な考えとして、Macportsで入れていたライブラリがHomebrewで入れたライブラリに置き換わると考えてもらえばOK。
readlineを入れる
brew install readline
brew link readline
これだけ。ちなみにreadlineは32bit・64bit両対応で入れてくれます。インストール後、「OSXに入ってるlibeditとかち合っちゃうので、パスが通ってるところにリンクを張りたいときは"brew link readline"としてくれ」と英語で書かれているのでその通りに実行すればよし。
gettextを入れる
そのままPythonをビルドすると、自分の環境ではlibintlで転けてしまったので急遽インストール。ただ、gettextは32bit・64bit両対応でビルドしてくれないので、ちょこっと弄りました。
brew edit gettext
上記コマンドを打ち込んで実行すると……
という感じで、環境変数EDITORに設定されたエディタを起動して、gettext.rbを開いてくれます。ちなみにこのgettext.rbはHomebrewではFormulaって呼ぶそうな。Formula Cookbook · mxcl/homebrew Wiki · GitHubで自前のFormulaのつくり方とか乗っていたりするので参考にするといい。
で、デフォルトでは「gettextは32bit・64bit両対応でビルドしてくれない」ので、両対応でビルドしてくれるreadlineのFormulaを確認しながら、gettextのFormulaに手を加える。
ちなみにbrew updateで更新をかけると変更した部分は消えちゃうので要注意。新しくFormulaを作るのがいいんじゃないかなぁ。(未確認なのであまり当てにはしない方がよい)
ということで閑話休題。話を元に戻す。
まず、こちらreadlineがFormula。
require 'formula' class Readline <Formula url 'ftp://ftp.cwru.edu/pub/bash/readline-6.1.tar.gz' md5 'fc2f7e714fe792db1ce6ddc4c9fb4ef3' homepage 'http://tiswww.case.edu/php/chet/readline/rltop.html' keg_only <<-EOS OS X provides the BSD Readline library. In order to prevent conflicts when programs look for libreadline we are defaulting this GNU Readline installation to keg-only. EOS def patches patches = (1..2).collect { |n| "ftp://ftp.gnu.org/gnu/readline/readline-6.1-patches/readline61-%03d"%n } { :p0 => patches } end def install # Always build universal, per http://github.com/mxcl/homebrew/issues/issue/899 ENV.universal_binary system "./configure", "--prefix=#{prefix}", "--mandir=#{man}", "--infodir=#{info}", "--enable-multibyte" system "make install" end end
こちらがgettextのFormula
equire 'formula' class Gettext <Formula url 'http://ftp.gnu.org/pub/gnu/gettext/gettext-0.17.tar.gz' md5 '58a2bc6d39c0ba57823034d55d65d606' homepage 'http://www.gnu.org/software/gettext/' keg_only "OS X provides the BSD gettext library and some software gets confused if both are in the library path." def patches 'http://gist.github.com/raw/186336/2fe65fab894f94a03aab2f03349ae7f1febcd301/mac-osx-105-environ.patch' end def options [['--with-examples', 'Keep example files.']] end def install ENV.libxml2 ENV.O3 # Issues with LLVM & O4 on Mac Pro 10.6 system "./configure", "--disable-dependency-tracking", "--disable-debug", "--prefix=#{prefix}", "--without-emacs", "--without-included-gettext", "--without-included-glib", "--without-included-libcroco", "--without-included-libxml" system "make" ENV.deparallelize # install doesn't support multiple make jobs system "make install" (doc+'examples').rmtree unless ARGV.include? '--with-examples' end end
readlineのFormulaにある「ENV.universal_binary」というそのものずばりな変数が怪しいですね。gettextのほうにも同様に追加してビルドしてみると……
>>$ file /usr/local/lib/libintl.* /usr/local/lib/libintl.8.0.2.dylib: Mach-O universal binary with 2 architectures /usr/local/lib/libintl.8.0.2.dylib (for architecture i386): Mach-O dynamically linked shared library i386 /usr/local/lib/libintl.8.0.2.dylib (for architecture x86_64): Mach-O 64-bit dynamically linked shared library x86_64 /usr/local/lib/libintl.8.dylib: Mach-O universal binary with 2 architectures /usr/local/lib/libintl.8.dylib (for architecture i386): Mach-O dynamically linked shared library i386 /usr/local/lib/libintl.8.dylib (for architecture x86_64): Mach-O 64-bit dynamically linked shared library x86_64 /usr/local/lib/libintl.a: Mach-O universal binary with 2 architectures /usr/local/lib/libintl.a (for architecture i386): current ar archive random library /usr/local/lib/libintl.a (for architecture x86_64): current ar archive random library /usr/local/lib/libintl.dylib: Mach-O universal binary with 2 architectures /usr/local/lib/libintl.dylib (for architecture i386): Mach-O dynamically linked shared library i386 /usr/local/lib/libintl.dylib (for architecture x86_64): Mach-O 64-bit dynamically linked shared library x86_64
Pythonをビルド!
ここまで来たら後はPythonをビルドするだけ。ちなみに今回はPython2.7及び2.6.6をビルド。
./configure --enable-framework --with-universal-archs=intel --enable-universalsdk=/ make make install
これだけでOK。
Homebrew面白そうだ
野良ビルドの管理も出来そうでこりゃいいねぇ。