Gentoo prefix はパッケージ数が少ないが、通常の Portage ツリーから ebuild ファイルを持ってきて eapify というスクリプトを通してやればだいたいなんとかなるので、試しに PyDS を動かしてみることにする。
依存パッケージはたくさんある。
しかも全部ではないが、ほとんど prefix に存在しない。
RDEPEND="media-libs/jpeg
sys-libs/zlib
>=dev-lang/python-2.2.2
>=dev-python/medusa-0.5.4
>=dev-db/metakit-2.4.9.2
>=dev-python/cheetah-0.9.15
>=dev-python/pyxml-0.8.2
>=dev-python/pyrex-0.5
>=dev-python/docutils-0.3
>=dev-python/imaging-1.1.3
>=dev-python/soappy-0.11.1"
ということで片っ端から、こんな感じのことをした。
% mkdir dev-python/soappy
% scp ...soappy-0.12.0.ebuild !$
% cd !$
% eapify
% vi soappy-0.12.0.ebuild
(KEYWORD に ~x86-macos を追加)
% ebuild soappy-0.12.0.ebuild manifest
いくつかの間接依存ファイルも同様に。
最後に emerge pyds。
(ebuildjp にある pyds-svn を使いたかったけど、サーバー止まっているらしく subversion で接続できなかったので)
さて、インストールできたところで、pyds-start してみる。
が、metakit が Mk4py の import をするところで 以下のような ImportError になってしまった。
File "/Users/tetsushi/Gentoo/usr/lib/python2.4/site-packages/metakit.py", line 22, in ?
from Mk4py import *
ImportError: Inappropriate file type for dynamic loading
Mk4py は dylib という拡張子で、
% file Mk4py.dylib
Mk4py.dylib: Mach-O dynamically linked shared library i386
ということで、共有ライブラリだし問題なさそうだ。
と、この時点では思ったのだが、意外な問題が潜んでいた。
問題を認識したのはこの Fink - 移植 - 共有コード というページ。
Mach-0 の仕様の一つであ,多くの人を驚かせるものとして, 共有ライブラリ と 動的ローダブル・モジュールを厳密に区別します. ELF システムでは両者は同質で,共有コードのどの部分でも,ライブラリとしても動的ローディングにも使うことができます.
しばし茫然とする。
分けて考えたことがないものを分けて考えなければいけないので意味がなかなか把握できない。
が、ショックから立ち直って、こんなことを試す。
% file ../lib-dynload/readline.dylib
../lib-dynload/readline.dylib: Mach-O bundle i386
readline のものは bundle で、これがもう一つのタイプということだ。
ということは、Python から import できるものはこちらの bundle タイプということになり、metakit のコンパイル過程が間違っているということだ。
少し古いが、metakit のメーリングリストの
Re: unable to use Mk4py on Mac OS X (jaguar, 10.2.2) という Nicholas Riley のコメントなど見つつ、patch を作る。
そして、ebuild の中でこれを当てて、(configure.in に当てるので)autoconf も呼んで、という作業をどうにかやり遂げた。
ということで、興味のある人はまとめて置いておくので持って行ってください→http://lowlife.jp/mft/static/prefix_overlay-20070507.tar.gz
|