長かった……長かった。
やっとこさ、Python3.1.2を自環境でビルドすることができました。なかなか時間がとれず、原因が分からなかったのですがとりあえず解決できたので、メモを残しておく。(但し、検証していないので参考程度に)
結論からいえば、Makefile.pre.inの以下の箇所(451行から478行)に原因がありました。(configureはPython2.6.4をreadlineと文字ロケール問題を回避してSnow Leopardに入れる - 日々の御伽噺の通り。Python3でも変わっておりません)
# This rule is here for OPENSTEP/Rhapsody/MacOSX. It builds a temporary # minimal framework (not including the Lib directory and such) in the current # directory. RESSRCDIR=Mac/Resources/framework $(PYTHONFRAMEWORKDIR)/Versions/$(VERSION)/$(PYTHONFRAMEWORK): \ $(LIBRARY) \ $(RESSRCDIR)/Info.plist $(INSTALL) -d -m $(DIRMODE) $(PYTHONFRAMEWORKDIR)/Versions/$(VERSION) if test "${UNIVERSALSDK}"; then \ $(CC) -o $(LDLIBRARY) @UNIVERSAL_ARCH_FLAGS@ -dynamiclib \ -isysroot "${UNIVERSALSDK}" \ -all_load $(LIBRARY) -Wl,-single_module \ -install_name $(DESTDIR)$(PYTHONFRAMEWORKINSTALLDIR)/Versions/$(VERSION)/$(PYTHONFRAMEWORK) \ -compatibility_version $(VERSION) \ -current_version $(VERSION) \ -framework CoreFoundation $(LIBS); \ else \ /usr/bin/libtool -o $(LDLIBRARY) -dynamic $(OTHER_LIBTOOL_OPT) $(LIBRARY) \ @LIBTOOL_CRUFT@ -framework CoreFoundation $(LIBS);\ fi $(INSTALL) -d -m $(DIRMODE) \ $(PYTHONFRAMEWORKDIR)/Versions/$(VERSION)/Resources/English.lproj $(INSTALL_DATA) $(RESSRCDIR)/Info.plist \ $(PYTHONFRAMEWORKDIR)/Versions/$(VERSION)/Resources/Info.plist $(LN) -fsn $(VERSION) $(PYTHONFRAMEWORKDIR)/Versions/Current $(LN) -fsn Versions/Current/$(PYTHONFRAMEWORK) $(PYTHONFRAMEWORKDIR)/$(PYTHONFRAMEWORK) $(LN) -fsn Versions/Current/Headers $(PYTHONFRAMEWORKDIR)/Headers $(LN) -fsn Versions/Current/Resources $(PYTHONFRAMEWORKDIR)/Resources
問題の箇所は466行目の"-framework CoreFoundation $(LIBS); \"の部分。自分はGNU Readlineを有効にするため、Macportsのライブラリパスを設定しているのだけど、それが徒になった。ビルド時のエラーが以下。
/usr/bin/install -c -d -m 755 Python.framework/Versions/3.1 if test "/"; then \ gcc -o Python.framework/Versions/3.1/Python -arch i386 -arch x86_64 -dynamiclib \ -isysroot "/" \ -all_load libpython3.1.a -Wl,-single_module \ -install_name /Library/Frameworks/Python.framework/Versions/3.1/Python \ -compatibility_version 3.1 \ -current_version 3.1 \ -framework CoreFoundation -lintl -ldl -framework CoreFoundation; \ else \ /usr/bin/libtool -o Python.framework/Versions/3.1/Python -dynamic libpython3.1.a \ -lSystem -lSystemStubs -arch_only x86_64 -install_name /Library/Frameworks/Python.framework/Versions/3.1/Python -compatibility_version 3.1 -current_version 3.1 -framework CoreFoundation -lintl -ldl -framework CoreFoundation;\ fi ld: library not found for -lintl collect2: ld returned 1 exit status ld: library not found for -lintl collect2: ld returned 1 exit status lipo: can't open input file: /var/folders/Bl/BlmoJMODFjOPP3kngUwZg++++TI/-Tmp-//cca9wIXl.out (No such file or directory) make: *** [Python.framework/Versions/3.1/Python] Error 1
リンカーで「libintlがねぇよ!」と転けているということはパスが通ってないのかな?、と予測はしていた。
"-framework CoreFoundation $(LIBS); \"が"-framework CoreFoundation -lintl -ldl -framework CoreFoundation; \"に展開されている事には気がついていたのだけど……よくよく見てみれば、ライブラリパス通ってないじゃないか。ということで$(CPPFLAGS)と$(LDFLAGS)を追加してビルド&インストール完了。$(CPPFLAGS)はいらないかもしれないが。
RESSRCDIR=Mac/Resources/framework $(PYTHONFRAMEWORKDIR)/Versions/$(VERSION)/$(PYTHONFRAMEWORK): \ $(LIBRARY) \ $(RESSRCDIR)/Info.plist $(INSTALL) -d -m $(DIRMODE) $(PYTHONFRAMEWORKDIR)/Versions/$(VERSION) if test "${UNIVERSALSDK}"; then \ $(CC) -o $(LDLIBRARY) @UNIVERSAL_ARCH_FLAGS@ -dynamiclib \ -isysroot "${UNIVERSALSDK}" \ -all_load $(LIBRARY) -Wl,-single_module \ -install_name $(DESTDIR)$(PYTHONFRAMEWORKINSTALLDIR)/Versions/$(VERSION)/$(PYTHONFRAMEWORK) \ -compatibility_version $(VERSION) \ -current_version $(VERSION) \ $(CPPFLAGS) $(LDFLAGS) \ -framework CoreFoundation $(LIBS); \ else \ /usr/bin/libtool -o $(LDLIBRARY) -dynamic $(OTHER_LIBTOOL_OPT) $(LIBRARY) \ @LIBTOOL_CRUFT@ -framework CoreFoundation $(LIBS);\ fi
ちなみに、問題なくビルド出来ていたPython2.7のMakefile.pre.inの該当箇所は以下。
if test "${UNIVERSALSDK}"; then \ $(CC) -o $(LDLIBRARY) @UNIVERSAL_ARCH_FLAGS@ -dynamiclib \ -isysroot "${UNIVERSALSDK}" \ -all_load $(LIBRARY) -Wl,-single_module \ -install_name $(DESTDIR)$(PYTHONFRAMEWORKINSTALLDIR)/Versions/$(VERSION)/$(PYTHONFRAMEWORK) \ -compatibility_version $(VERSION) \ -current_version $(VERSION); \ else \ /usr/bin/libtool -o $(LDLIBRARY) -dynamic $(OTHER_LIBTOOL_OPT) $(LIBRARY) \ @LIBTOOL_CRUFT@ ;\
ないのね。