MacPortsでPython対応Diaをインストールするには

先週、今更ながらPythonでDiaのプラグインが作れることを知ったので、早速試してみようと思ったら、MacPortsでインストールしたDia-0.97.2ではPythonが使えないことがわかった。
ソースコードからDiaをmakeする時に、configureスクリプトに--with-pythonを渡す必要があるのだが、MacPortsのDiaのPortfileがそうなっていないのである。そのようにするMacPortsのパッチは既に作られているが、これはかなり昔のMacPortsに対するパッチで、現在ではそのまま当てられないのはもちろん、それに従って手でパッチを当てても、configureがエラーになるだけだった。

エラーログを見ると、

:info:configure checking for libpython2.7.a... not found config
:info:configure configure: error: could not find files required to build python plugin

というように、どうもインストールされたpy27-gtkにうまく対応できないようだ。

試行錯誤の末、かなり強引だが、以下のようにすると成功した。
(このブログが提供するPortfile-dia.diffpatch-configure.diffが~/Downloadsにあるとする)
1. libpython2.7.soの作成
(MacPortsのpython27はインストール済だとする。)

cd /opt/local/lib
sudo ln -s libpython2.7.dylib libpython2.7.so

2. Portfileの修正
cd /
sudo patch -p0 < ~/Downloads/Portfile-dia.diff

3. configureのパッチの用意
cd /opt/local/var/macports/sources/rsync.macports.org/release/ports/gnome/dia/
sudo mkdir files
sudo cp ~/Downloads/patch-configure.diff files/

4. port install dia
sudo port install dia


1.の部分を何とかすればmacports.orgのチケットに追記できるのだが、これが筆者の能力の限界である。う〜む、惜しすぎる。

なお、pythonが/opt/local/bin/python(MacPortsのもの)でなく/usr/bin/pythonや/System/Library/Frameworks/Python.framework/以下のもの(Xcodeのpython?)になっている場合("which python"とするとわかる)は、4.の前に

sudo port select --set python python27

とした上でターミナルを再起動する必要があるかも知れない。

蛇足だが、そのようにして切り替えたpythonをXcodeのもの(?)に戻すには、

sudo port select --set python python27-apple

とするらしい。


【2012/8/5 追記】
先月くらいから、MacPortsでDiaをインストールすると、Python対応の有無に関係なく、起動時にSegmentation faultするという問題があるようだ。筆者もこれに遭遇し、結構な手間を取られてしまったので、暫定パッチのPython対応版を公開する。

パッチファイル
< ~/Downloads/MacPorts-trac-34520.patch (MacPortsのTicket #34520のpatch 0001〜0003を結合して整形したもの)
< ~/Downloads/Portfile-dia.diff2 (Portfileのパスが変わったのにも合わせたもの)
< ~/Downloads/patch-configure.diff

手順(これらのパッチファイルが~/Downloadsにあるとする)
1. libpython2.7.soの作成
 上記の手順と同じ
2. Portfileの修正

cd /opt/local/var/macports/sources/rsync.macports.org/release/tarballs/ports/gnome/dia
sudo patch -p0 < ~/Downloads/Portfile-dia.diff2

3. 展開後のパッチの用意

sudo cp ~/Downloads/MacPorts-trac-34520.patch files/
sudo cp ~/Downloads/patch-configure.diff files/

4. port install dia
sudo port install dia