2019/11/14(木) [n年前の日記]
#1 [gimp] Windows10上でGIMP 2.10をビルドできるか実験
Windows10 x64 1903上で、texturize プラグインをビルドして .exe をゲットしたいなと。textrize 2.1 のソースを解凍して ./configure をしてみたものの、「gimp 2.2 以上が必要だよ」みたいなメッセージが出てきて先に進まない。
これはつまり、GIMP本体をビルドできる環境が整ってないと、プラグインもビルドできないということだろうか…?
であれば、Windows10 + msys2 上で GIMP がビルドできそうなのか、一つ試してみようかなと。
ググったところ、ビルドの手順は以下で紹介されているように見えたので、参考にしながら作業。
_Hacking:Building/Windows - GIMP Developer Wiki
一部の作業はできなかったけど、大半の作業は通った。
※ 2019/11/15追記。msys2 を使ってGIMPのプラグインをビルドするだけなら、GIMP をビルドする必要は無かった。パッケージをインストールすれば、プラグインをビルドできる状態になる。
ほとんどデータらしくて、make してもコンパイルはされなかったように見えた。
HDDの容量は、このくらい消費される模様。
これはつまり、GIMP本体をビルドできる環境が整ってないと、プラグインもビルドできないということだろうか…?
であれば、Windows10 + msys2 上で GIMP がビルドできそうなのか、一つ試してみようかなと。
ググったところ、ビルドの手順は以下で紹介されているように見えたので、参考にしながら作業。
_Hacking:Building/Windows - GIMP Developer Wiki
一部の作業はできなかったけど、大半の作業は通った。
※ 2019/11/15追記。msys2 を使ってGIMPのプラグインをビルドするだけなら、GIMP をビルドする必要は無かった。パッケージをインストールすれば、プラグインをビルドできる状態になる。
◎ 必要なパッケージを入手。 :
今回は 32bit 版の exe を作りたいので、MSYS2 MSYS (32bit) を起動。必要なパッケージを、pacman を使ってインストールしていく。
インストール済みのパッケージの更新。
32bit版は、*-i686-*。64bit版は、*-x86_64-*。なので、mingw-w64-i686-xxxx をインストールしていった。
ちなみに。
インストール済みのパッケージの更新。
pacman -Syu
32bit版は、*-i686-*。64bit版は、*-x86_64-*。なので、mingw-w64-i686-xxxx をインストールしていった。
pacman -S base-devel mingw-w64-i686-toolchain git mingw-w64-i686-asciidoc mingw-w64-i686-drmingw mingw-w64-i686-gexiv2 mingw-w64-i686-ghostscript mingw-w64-i686-glib-networking mingw-w64-i686-graphviz mingw-w64-i686-gtk2 mingw-w64-i686-iso-codes mingw-w64-i686-json-c mingw-w64-i686-json-glib mingw-w64-i686-lcms2 mingw-w64-i686-lensfun pacman -S mingw-w64-i686-libheif mingw-w64-i686-libraw mingw-w64-i686-libspiro mingw-w64-i686-libwebp mingw-w64-i686-libwmf mingw-w64-i686-meson mingw-w64-i686-openexr mingw-w64-i686-poppler mingw-w64-i686-python2-pygtk mingw-w64-i686-SDL2 mingw-w64-i686-suitesparse mingw-w64-i686-vala mingw-w64-i686-xpm-nox pacman -S mingw-w64-i686-gtk3 mingw-w64-i686-python3-gobject mingw-w64-i686-appstream-glib mingw-w64-i686-libarchive mingw-w64-i686-luajit mingw-w64-i686-jsoncpp mingw-w64-i686-jq mingw-w64-i686-jsonrpc-glib mingw-w64-i686-nlohmann_json mingw-w64-i686-gobject-introspection
ちなみに。
- pacman -Ss hoge で、パッケージの検索。
- pacman -S hoge で、パッケージのインストール。
◎ gitが動かない。 :
Web上から git を使ってアレコレ入手するのだけれど、何故か msys2 上で git が動かない。妙なエラーが出てくる。
ググってみたら、こういう場合は rebase.exe だの rebaseall だので、何かをしないといかんらしい。何をしているのだろう…。
_CygwinでCan't fork()とかのエラーが出た時の対処法
_Windows10にアップグレードしたらmingw/msysが使えなくなった場合の対応 ・ As you like.
C:\msys32\usr\bin\ でコマンドプロンプトを起動して、ash.exe を実行。
何をしてくれたのかは分からんけど、git が使えるようになった。
ググってみたら、こういう場合は rebase.exe だの rebaseall だので、何かをしないといかんらしい。何をしているのだろう…。
_CygwinでCan't fork()とかのエラーが出た時の対処法
_Windows10にアップグレードしたらmingw/msysが使えなくなった場合の対応 ・ As you like.
C:\msys32\usr\bin\ でコマンドプロンプトを起動して、ash.exe を実行。
cd /bin ./rebaseallexitで抜ける。
何をしてくれたのかは分からんけど、git が使えるようになった。
◎ 環境変数を設定。 :
~/.bash_profile に、前述のページに記載されてた内容を追記。
ACLOCAL_FLAGS だけ、32bit版用にちょっと変えてみた。
msys2 を一旦終了。
コレ、要するに、~/prefix というディレクトリの中に、ビルドした成果物をインストールしていくための設定らしい。
このあたり、何も設定しないで作業すると、msys2 だか mingw32 だかのシステムが入ってるディレクトリに、野良ビルドされた怪しいアレコレを平気で上書きインストールしちゃうので、別途ディレクトリを作って、そちらにインストールしていくことで事故を避ける、ということなのだろうと思う。たぶん。自信無いけど。
export PREFIX=`realpath ~/prefix` export PATH="$PREFIX/bin:$PATH" export PKG_CONFIG_PATH="$PREFIX/lib/pkgconfig:$PKG_CONFIG_PATH" export PKG_CONFIG_PATH="$PREFIX/share/pkgconfig:$PKG_CONFIG_PATH" export LD_LIBRARY_PATH="$PREFIX/lib:$LD_LIBRARY_PATH" export XDG_DATA_DIRS="$XDG_DATA_DIRS:$PREFIX/share:/usr/local/share/:/usr/share/" export ACLOCAL_FLAGS="-I/c/msys32/mingw32/share/aclocal" export MAKEFLAGS=-j4
ACLOCAL_FLAGS だけ、32bit版用にちょっと変えてみた。
msys2 を一旦終了。
コレ、要するに、~/prefix というディレクトリの中に、ビルドした成果物をインストールしていくための設定らしい。
このあたり、何も設定しないで作業すると、msys2 だか mingw32 だかのシステムが入ってるディレクトリに、野良ビルドされた怪しいアレコレを平気で上書きインストールしちゃうので、別途ディレクトリを作って、そちらにインストールしていくことで事故を避ける、ということなのだろうと思う。たぶん。自信無いけど。
◎ libmypaintをビルド。 :
GIMP 2.10 のビルド時には必要になるらしい、libmypaint をビルドする。
MSYS2 MinGW 32-bit (32bit) を起動。
今回は、~/build というディレクトリを作って、その中で作業していくことにした。
git でソース群を入手して、ビルド。
件の解説ページでは v1.3.0 タグに切り替えてたけど、後で GIMP をビルドする際に「v1.4.0 じゃないとクラッシュするよ」と言われたので、今回は v1.4.0 タグに切り替えてる。
MSYS2 MinGW 32-bit (32bit) を起動。
今回は、~/build というディレクトリを作って、その中で作業していくことにした。
mkdir ~/build cd ~/build
git でソース群を入手して、ビルド。
git clone https://github.com/mypaint/libmypaint.git cd libmypaint git checkout tags/v1.4.0 ./autogen.sh ./configure --prefix=$PREFIX make make install cd ..
件の解説ページでは v1.3.0 タグに切り替えてたけど、後で GIMP をビルドする際に「v1.4.0 じゃないとクラッシュするよ」と言われたので、今回は v1.4.0 タグに切り替えてる。
◎ mypaint-brushesをビルド。 :
git clone https://github.com/mypaint/mypaint-brushes cd mypaint-brushes git checkout v1.3.0 ./autogen.sh ./configure --prefix=$PREFIX make make install cd ..
ほとんどデータらしくて、make してもコンパイルはされなかったように見えた。
◎ bablとgeglをビルドしようとしてハマる。 :
libmypaint, mypaint-brushes はビルドとインストールができた。
babl も、ビルドとインストールができたけど…。しかし、gegl はビルドができない。
そもそも git clone したソレには autogen.sh が無いのに、件のページでは ./autogen.sh を実行することになってる。ファイル一覧からすると、ここは meson を使うのではないかな…。
しかし、meson を実行後に、ninja を実行すると、glib-2.0 がどうとかのエラーが出る。ググってみると、Windows版はココで詰まるらしい。
そもそも msys2 なら、babl と gegl がパッケージとして存在することに気づいた。であれば、わざわざ各人がビルドする必要はないんじゃないか? pacman でインストールしてみる。
インストール時に、ffmpeg もインストールを推奨されたので、一応インストール。
babl も、ビルドとインストールができたけど…。しかし、gegl はビルドができない。
そもそも git clone したソレには autogen.sh が無いのに、件のページでは ./autogen.sh を実行することになってる。ファイル一覧からすると、ここは meson を使うのではないかな…。
しかし、meson を実行後に、ninja を実行すると、glib-2.0 がどうとかのエラーが出る。ググってみると、Windows版はココで詰まるらしい。
そもそも msys2 なら、babl と gegl がパッケージとして存在することに気づいた。であれば、わざわざ各人がビルドする必要はないんじゃないか? pacman でインストールしてみる。
pacman -S mingw-w64-i686-babl mingw-w64-i686-gegl mingw-w64-i686-ffmpeg
インストール時に、ffmpeg もインストールを推奨されたので、一応インストール。
◎ GIMPをビルド。 :
この状態で gimp-2.10 をビルド。
ビルドできちゃったように見える…。~/prefix/ 以下に、なんか GIMP関係っぽいファイルがたくさん入ってる…。
msys2上で、~/prefix/bin/ 以下の gimp.exe を実行したら、pythonw.exe が無効だのなんだの文句を言われながらも、一応起動してしまった。
ちなみに、GIMP のバージョンは 2.10.15 だった。
コマンドプロンプトから実行してみたら、「.dllがねえよ」と文句を言われて起動しなかった。おそらく、必要な .dll を、msys2 だか mingw32 だかのシステムからコピーしてきたら、動いてしまうのでは…。今回はそこまで試さないけど。
git clone -b gimp-2-10 --single-branch https://gitlab.gnome.org/GNOME/gimp.git cd gimp ./autogen.sh --prefix=$PREFIX --disable-gtk-doc --with-gimpdir=GIMP/git-master --with-javascript=force --with-lua=force make make install cd ..
ビルドできちゃったように見える…。~/prefix/ 以下に、なんか GIMP関係っぽいファイルがたくさん入ってる…。
msys2上で、~/prefix/bin/ 以下の gimp.exe を実行したら、pythonw.exe が無効だのなんだの文句を言われながらも、一応起動してしまった。
ちなみに、GIMP のバージョンは 2.10.15 だった。
コマンドプロンプトから実行してみたら、「.dllがねえよ」と文句を言われて起動しなかった。おそらく、必要な .dll を、msys2 だか mingw32 だかのシステムからコピーしてきたら、動いてしまうのでは…。今回はそこまで試さないけど。
◎ texturizeプラグインをビルド。 :
GIMPがビルドできる環境になったはずなので、これなら GIMP のプラグインもビルドできるのではないか。試してみる。
元々の目的だった、texturizeプラグインをビルドしてみたい。
_lmanul/gimp-texturize: Texturize plugin for the GIMP
src/ 以下に、texturize.exe というファイルができた。マジか。
これを、GIMP 2.10.14 Portable 32bit samj版から使えるように設定。任意のフォルダを作成して、texturize.exe をコピーして、GIMP の、編集 → 設定 → フォルダ → プラグイン → texturize.exe のあるフォルダを追加登録。
使ってみたところ、生成画像サイズが小さい場合は、一応動いてくれた。ちなみに、実行すると何故かDOS窓が開く。でも一応動く。
しかし、生成画像サイズを大きくすると、最後の最後で、DOS窓に何かエラーメッセージを一瞬出してクラッシュする。Webで公開されてた texturize 2.1 と、ほとんど同じ動作のような気がする…。
どうしてDOS窓が開くのだろうと思っていたけれど、クラッシュする時にエラーメッセージを確認できるから、むしろ都合がいいのだな。
何にせよ、どうやら元々のソース側に、何かバグがあるような予感。大量にメモリを確保して処理する場面では、何か問題が起きてしまう作りになっているのだろう…。
ひょっとすると、Debian Linux で用意されてるパッケージなら、そのあたり修正されているのかもしれない。が、Debianのパッケージのソースって、どうやって入手すればいいのだろう…?
元々の目的だった、texturizeプラグインをビルドしてみたい。
_lmanul/gimp-texturize: Texturize plugin for the GIMP
cd ~/build git clone https://github.com/lmanul/gimp-texturize.git cd gimp-texturize ./autogen.sh --prefix=$PREFIX make
src/ 以下に、texturize.exe というファイルができた。マジか。
これを、GIMP 2.10.14 Portable 32bit samj版から使えるように設定。任意のフォルダを作成して、texturize.exe をコピーして、GIMP の、編集 → 設定 → フォルダ → プラグイン → texturize.exe のあるフォルダを追加登録。
使ってみたところ、生成画像サイズが小さい場合は、一応動いてくれた。ちなみに、実行すると何故かDOS窓が開く。でも一応動く。
しかし、生成画像サイズを大きくすると、最後の最後で、DOS窓に何かエラーメッセージを一瞬出してクラッシュする。Webで公開されてた texturize 2.1 と、ほとんど同じ動作のような気がする…。
どうしてDOS窓が開くのだろうと思っていたけれど、クラッシュする時にエラーメッセージを確認できるから、むしろ都合がいいのだな。
何にせよ、どうやら元々のソース側に、何かバグがあるような予感。大量にメモリを確保して処理する場面では、何か問題が起きてしまう作りになっているのだろう…。
ひょっとすると、Debian Linux で用意されてるパッケージなら、そのあたり修正されているのかもしれない。が、Debianのパッケージのソースって、どうやって入手すればいいのだろう…?
◎ gimptoolなるものがあるらしい。 :
関連情報をググっているうちに知ったのだけど、どうやら GIMP には、gimptool なる、プラグラインをビルドするためのツールが用意されていたようで。単一ファイル の .c だけなら、渡すだけでビルドして実行バイナリを作ってくれるらしい。
ただ、あくまで、*NIX上ではそんなツールがあるよ、という話のようで。Windows上で使えるのかどうかは分からなかった。
ただ、あくまで、*NIX上ではそんなツールがあるよ、という話のようで。Windows上で使えるのかどうかは分からなかった。
◎ GIMPのビルドは必要なのだろうか。 :
~/prefix/ 以下を眺めていて気付いたのだけど、中に入ってるファイル群は、Windows用のGIMPバイナリのほうでも持っているように見えるなと…。
*.pc、*.a、*.la、*.h 等々が入ってるけど、コレ、GIMP 2.10.14 Portable 32bit samji版も、ほとんど入っているような気がする。
すると、ひょっとして、環境変数関係をそれらしく設定できれば、わざわざ GIMP をビルドしなくても、GIMPのプラグインをビルドできる状態になったりするのではあるまいか。
と思って試してみたけれど、環境変数 PREFIX や PKG_CONFIG_PATH その他を samj版のインストールフォルダに設定した程度では、gtk/*.h が not found とかのエラーが出てしまうようで。
でも、ちゃんと設定できたら、ビルドができそうな気がする…。やり方が分からんけど…。
bin etc include lib share
*.pc、*.a、*.la、*.h 等々が入ってるけど、コレ、GIMP 2.10.14 Portable 32bit samji版も、ほとんど入っているような気がする。
すると、ひょっとして、環境変数関係をそれらしく設定できれば、わざわざ GIMP をビルドしなくても、GIMPのプラグインをビルドできる状態になったりするのではあるまいか。
と思って試してみたけれど、環境変数 PREFIX や PKG_CONFIG_PATH その他を samj版のインストールフォルダに設定した程度では、gtk/*.h が not found とかのエラーが出てしまうようで。
でも、ちゃんと設定できたら、ビルドができそうな気がする…。やり方が分からんけど…。
◎ ファイルサイズについて。 :
- GIMPのソースその他が入ってる ~/build/gimp/ ディレクトリは、1.11GB。
- GIMPの実行バイナリその他が入っている ~/prefix/ ディレクトリは、312MB。
HDDの容量は、このくらい消費される模様。
◎ 2019/11/15追記。 :
ググってたら、そもそも mingw-w64-i686-gimp というパッケージが存在することに気づいた。まさか…。
設定した環境変数をコメントアウトして、pacman -S mingw-w64-i686-gimp でパッケージをインストールして、texturizeプラグインをビルドしてみたら、フツーに .exe が生成されてしまった。
わざわざ GIMP のビルドをする必要は無かった…。Windows + msys2 なら、GIMPパッケージをインストールするだけで、プラグインをビルドできる環境は整ってしまうのだな…。
libmypaint も、mypaint-brushes も、ビルドする必要はなかった。そっちもパッケージがあった。ギャフン。
設定した環境変数をコメントアウトして、pacman -S mingw-w64-i686-gimp でパッケージをインストールして、texturizeプラグインをビルドしてみたら、フツーに .exe が生成されてしまった。
わざわざ GIMP のビルドをする必要は無かった…。Windows + msys2 なら、GIMPパッケージをインストールするだけで、プラグインをビルドできる環境は整ってしまうのだな…。
libmypaint も、mypaint-brushes も、ビルドする必要はなかった。そっちもパッケージがあった。ギャフン。
[ ツッコむ ]
以上、1 日分です。