Mypaintの自作ブランチにupstreamのmergeを長期間怠っていたら、大変な作業量が待っていました…備忘録的に
目に付いた主な変更点
- ビルドシステムがSConsからsetup.pyへ移行している
- scons cleanしておく必要がある(重要)
- mypaintbrush 2.0が必要らしいので、gitから持ってきてmake installした。これが多分正しい。
- エラーがでたので手当り次第に処置したけど、実はよくわかっていない…
- python2.7でビルドするとlib/gettext.pyのfrom gettext import gettextでImportErrorが起きるように見える。
- git cloneしたバニラなmypaint 2.0でも起きた
- しかしpython3で一旦ビルド成功後は、python2.7でビルドし動かしても動いたりして二度と再現されない。要追跡。
- いずれにせよ、そろそろpython3に本格的に乗り換えないとなぁ…という感じ。他の自作スクリプトも随時書き換えて行かねば。
- git cloneしたバニラなmypaint 2.0でも起きた
- update-alternativesで3をデフォにしてもいいけど、python-moinmoinが3非対応だったりして別の部分でつらい
_mypaintlib.soが見つからないエラーが出る
前述の通り、cleanしておかないとSConsで作られた古いmypaintlib.pyが lib/に残りこのエラーが起きる。削除すること。また、当然ながら以前のlib/_mypaintlib.so自体も削除しておくのが良い。
ビルドスクリプトの追加修正
独自のcppモジュールを追加するには、lib/mypaintlib.iのみならず、 setup.pyの576行目近辺
mypaintlib = Extension( 'lib._mypaintlib', [ 'lib/mypaintlib.i', 'lib/fill.cpp', 'lib/gdkpixbuf2numpy.cpp', 'lib/pixops.cpp', 'lib/fastpng.cpp', 'lib/brushsettings.cpp', 'lib/pyramidfill.cpp', # XXX for pyramid-fill 'lib/opencv_util.cpp', # XXX for adjust tool ],
のように改変。(以前、SConstructにやっていたのと同じ)
Python3対応
- SWIG(cpp)においてPyInt_AsLongはpython3のAPIでは存在しないので、PyLong_AsLongに変更する。(lib/pyramidfill.cpp)
- 条件コンパイルで凌ぐ
- from
_future_
import division, print_functionはスクリプト先頭に置かねばならない。- git mergeでの自作部分とのコンフリクト検出時に不用意に済ませるとpython3ではこれがエラーとなる
importの厳密化
例えばgui/drawwindow.py でimport sizechangepopupとしてもエラーになるようになっている。 これは、
from . import sizechangepopup # もしくは import gui.sizechangepopup as sizechangepopup # 若干美しくない気がする
と書かなければならない。これが物凄い多いので、普段からディレクトリを明示する等して徹底しておくべきだったorz