読者です 読者をやめる 読者になる 読者になる

non vorrei lavorare

ブログ名の通りです。javascript three.js mruby rust OCaml golang julialang blender

OSXでgimpのプラグインを作りたくなりgimpをソースからビルドした件

パソコン・インターネット
こんばんは、最近子どもたちが銀河鉄道999にハマっていて、プラレールのレイアウトが、TV版のオープニングの宇宙へ飛んで行く線路になってます。kjunichiです。

はじめに

最近mrubyで画像処理を扱っていて、今年の目標というかもう10年来の目標のまま放置されているgimpプラグイン作成をついでだからやってみようと重い腰を上げた。

gimpでScript-fuがあることは分かっており、最近はEmacsからAtomにほぼ移住した感があり、ますますlispを学ぶ機会が遠のいている。

また、ずいぶん前からPythonでもプラグインが書けることだけは知っていた。

GIMPプラグインはタダの実行ファイルだった

たまたま、今回、公式のプラグイン作成のページがGoogleで紹介されたので、読んでみたところ、これまで、自分が考えていた構造とは異なり、たんなる実行形式のファイルをGimpプラグインとして認識するフォルダに置けば動くということを知った。

実際には、Gimpと連携する為、内部通信するAPIを呼ぶ必要があるのだけど。。。

ともかく、これにより、太古の昔、Script-fuの書き方の説明ページを見て、lisp固有の雰囲気に飲み込まれハードルが超高層ビル並みに高い印象から、一転し、mrubyで行けるんじゃね?とさえ思うようになった。

gimptool-2.0が無かった

GIMPの公式サイトで一番最初に出てくるバイナリにはC言語GIMPプラグインをビルドする際に必要となる、gimptool-2.0コマンドが含まれていなかった。

jhbuild祭り

GNOME関連のプロジェクトは、tarballから自力でビルドしてみるとすぐに分かると思うが、非常に依存関係が多く、ハマること間違いない。

そこにjhbuildという神ツールが存在して、これを助けてくれる。

このページを元に作業をすすめた。

なるべくjhbuildでビルドさせる

下手にPKG_CONFIG_PATHでHomebrewを指定していると、面倒なことになりかねないと予想する。特に今回は、gtk+周りにライブラリをX11でなく、MacのUIで昔だとAquaと呼ばれていたUIに対応したモノをビルドする必要があるので、混ぜるな危険だと思われる。

unset PKG_CONFIG_PATH
cd ~
wget https://git.gnome.org/browse/gtk-osx/plain/gtk-osx-build-setup.sh
sh gtk-osx-build-setup.sh
~/.local/bin/jhbuild bootstrap

これでjhbuildコマンドが、~/.local/binに作られる。自分は、忘れっぽいので、~/.local/binはパスに通さず、作業をした。ここで、パスに通して、そのまま使い続けると、Homebrew環境が動かないといった可能性が出てくる。しかも忘れたころにとか。どっぷりjhbuildでGNOMEの世界に行ってしまうなら良い機会なのかもしれないが。

pythonをjhbuild用を新たに用意

pyenvでpythonの環境を複数持っているが、これとは別にjhbuild環境用に作ることにした。PyGTKを既存の環境とは別にしておきたかった。

brew unlink openssl
export PATH=/bin:/usr/bin:/usr/sbin
~/.local/bin/jhbuild build python

import libxml2でpythonが死亡

スレッドがどうのという、典型的な共有ライブラリのシンボル解決が出来ない場合のエラーが発生。

原因は

~/gtk/inst/bin/pythonがリンクしているlibpythonがApple製のものだった!

cd ~/gtk/inst/bin/
otool -L python
python:
/System/Library/Frameworks/Python.framework/Versions/2.7/Python (compatibility version 2.7.0, current version 2.7.6)
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1213.0.0)
/System/Library/Frameworks/CoreFoundation.framework/Versions/A/CoreFoundation (compatibility version 150.0.0, current version 1151.16.0)

pythonの本体のdylibをrename

install_name_tool -change /System/Library/Frameworks/Python.framework/Versions/2.7/Python ~/gtk/inst/lib/libpython2.7.dylib python

jhbuildコマンドは、PATHに~/gtk/inst/binを先頭に追加して実行するので、以降はここでビルドしたpythonが使われることになる

GTK+のインストールまで

~/.local/bin/jhbuild build meta-gtk-osx-bootstrap
~/.local/bin/jhbuild build meta-gtk-osx-core
~/.local/bin/jhbuild build meta-gtk-osx-python

途中FTPでエラーの場合、

別のミラーサイトなりからファイルを入手して、~/gtk/source/pkgs配下にコピーすれば対処出来た。

ついにGIMP本体のビルド

~/.local/bin/jhbuild build gimp

babl、geglをwgetする必要がある模様

少なくとも、jhbuildのftpではDL出来なかった(2015/05/20時点)

python-fuを使う

jhbuild shellでgimpのソースツリーへ。

config.logにjhbuildで行ったビルド時のconfigureのオプションが先頭に書かれているので、

head config.log

で確認、「--disable-python」を「--enable-python」にしてconfigureを再実行。

ビルドされたGIMPを動かすには

cd ~/gtk/inst/bin
./gimp

関連投稿