2019/11/15(金) [n年前の日記]
#1 [gimp] texturizeプラグインにpatchを当てる
Debian Linux の、gimp-texturize パッケージのソースを入手する方法が分かった。下のページから入手できた。
_Debian -- sid の gimp-texturize パッケージに関する詳細
ページの右のほうに、「gimp-texturize ソースパッケージをダウンロード」という項目があって、そこからDLできる。
ということで、パッチを当てたソースを作ろうとしたわけで。
_Debian -- sid の gimp-texturize パッケージに関する詳細
ページの右のほうに、「gimp-texturize ソースパッケージをダウンロード」という項目があって、そこからDLできる。
- gimp-texturize_2.1.orig.tar.gz が、オリジナルのソース。
- gimp-texturize_2.1-8.debian.tar.xz が、パッチ群。
ということで、パッチを当てたソースを作ろうとしたわけで。
◎ 作業手順をメモ。 :
以下、Windows10 x64 1903 + msys2 上で作業。
gimp-texturize_2.1-8.debian.tar.xz を解凍。
patchディレクトリの中身は以下。
ほとんどの *.patch は改行コードが LF (Linuxの改行コード)なのだけど、20_fix-cast-warnings.patch だけ、改行コードが CRLF (Windowsの改行コード)になっている。このままだと、patch を当てるときにエラーが出る。
改行コードの確認方法は以下。
ずらずらと文字が表示されるけど…。
dos2unix というツールで、Windowsの改行コードを Linux の改行コードに変換できる。
gimp-texturize_2.1.orig.tar.gz を解凍。
*.patch を、src/ と同階層にコピー。
patch を当ててみる。
これで、Debian パッケージのソースコードになった。はず。
gimp-texturize_2.1-8.debian.tar.xz を解凍。
patchディレクトリの中身は以下。
10_move-image-to-heap.patch 20_fix-cast-warnings.patch 30_remove-non-public-gimpimage-pdb-header.patch 40_unescaped-left-brace.patch 50_replace-huge-by-inf.patch 60_avoid-no-translation-with-DH12.patch series
ほとんどの *.patch は改行コードが LF (Linuxの改行コード)なのだけど、20_fix-cast-warnings.patch だけ、改行コードが CRLF (Windowsの改行コード)になっている。このままだと、patch を当てるときにエラーが出る。
改行コードの確認方法は以下。
od -c 20_fix-cast-warnings.patch
ずらずらと文字が表示されるけど…。
- 中に \r \n がチラホラ混ざってるなら Windows の改行コード。
- \n が混ざってるなら Linux の改行コード。
- \r だけなら Mac の改行コード。
dos2unix というツールで、Windowsの改行コードを Linux の改行コードに変換できる。
pacman -S dos2unix dos2unix 20_fix-cast-warnings.patch
gimp-texturize_2.1.orig.tar.gz を解凍。
*.patch を、src/ と同階層にコピー。
patch を当ててみる。
patch -u -p1 < 10_move-image-to-heap.patch patch -u -p1 < 20_fix-cast-warnings.patch patch -u -p1 < 30_remove-non-public-gimpimage-pdb-header.patch patch -u -p1 < 40_unescaped-left-brace.patch patch -u -p1 < 50_replace-huge-by-inf.patch patch -u -p1 < 60_avoid-no-translation-with-DH12.patch
- -u オプションは、パッチの形式だかフォーマットだかを指定しているらしい。
- -p1 は、パッチ内のファイルパスの、1番目を無視する指定、らしい。hoge/fuga/piyo とファイルパスが書いてあった場合、-p1 なら fuga/piyo、-p2 なら piyo しか見ないのだそうで。
これで、Debian パッケージのソースコードになった。はず。
◎ 意味は無かった。 :
しかし、patch を当てた後のソースと、github 版のソースを比較してみたら、実処理の記述部分については github のソースにも修正内容が反映されていた。
_lmanul/gimp-texturize: Texturize plugin for the GIMP
処理部分に関しては、Debian版だけが特別なバグ修正をしてある、というわけではない模様…。
_lmanul/gimp-texturize: Texturize plugin for the GIMP
処理部分に関しては、Debian版だけが特別なバグ修正をしてある、というわけではない模様…。
[ ツッコむ ]
#2 [gimp] gimptool-2.0 が msys2 上で動いてくれない
Windows10 x64 1903 + msys2 上で、gimptool-2.0 を使って、GIMPプラグインのビルドができるのかどうかを試したのだけど。
_GIMP Developer Resources - How to write a GIMP plug-in
上記ページから hello.c を入手して、ビルドしてみようとしたけれど、エラーが…。
hello.c が無い? なんでや。あるやん。
む。もしかして、'hello.c' という感じで、「'」で挟まれてしまっているあたりがいかんのでは。
これ、要するに、i686-w64-mingw32-gcc でコンパイルとリンクをすればいいということだよな…。
仮にそうであるならばと、「'」を外しつつ、あちこちを並べ替えて、gimptool-2.0 を通さずに打ってみた。
通った。hello.exe が出来上がった。
できた hello.exe を、GIMP 2.10.14 32bit Portable samj版から呼んでみた。ダイアログは開かなかったけど、エラーメッセージウインドウに「Hello, world!」と表示された。これで動作は合ってるのかな…?
_GIMP Developer Resources - How to write a GIMP plug-in, part II
上記ページから入手できる、myblur1.c と myblur2.c も、同様にビルドしてみた。これも GIMP から呼び出したら、ちゃんとぼかしフィルタとして動いてくれた。
ただ、件のサンプルは、GIMP 2.10 より古いバージョン向けに書かれたサンプルのようで、コンパイル中に、
「gimp_drawable_get は非推奨になったから、代わりに gimp_drawable_get_buffer を使え」
「gimp_drawable_detach は非推奨になったぞ」
「gimp_pixel_rgn_init の代わりに gimp_drawable_get_buffer を〜」
「gimp_pixel_rgn_get_pixel の代わりに gegl_buffer_sample を〜」
等々、大量の警告が表示された。
GIMP 2.10 から本格導入された GEGLに対応させろや、ということだよな…。それって簡単に修正できるのかな。ググってみたけど、ちょっとそういうわけにはいかない感じ。
_GIMP Developer Resources - How to write a GIMP plug-in
上記ページから hello.c を入手して、ビルドしてみようとしたけれど、エラーが…。
$ gimptool-2.0 --build hello.c i686-w64-mingw32-gcc -mms-bitfields -pthread -mms-bitfields -ID:/msys32/mingw32/include/gimp-2.0 -ID:/msys32/mingw32/include/gegl-0.4 -ID:/msys32/mingw32/include -ID:/msys32/mingw32/include/gio-win32-2.0 -ID:/msys32/mingw32/include/json-glib-1.0 -ID:/msys32/mingw32/include/babl-0.1 -ID:/msys32/mingw32/include -ID:/msys32/mingw32/include/gtk-2.0 -ID:/msys32/mingw32/lib/gtk-2.0/include -ID:/msys32/mingw32/include/pango-1.0 -ID:/msys32/mingw32/include/fribidi -ID:/msys32/mingw32/include -ID:/msys32/mingw32/include/cairo -ID:/msys32/mingw32/include/atk-1.0 -ID:/msys32/mingw32/include/cairo -ID:/msys32/mingw32/include/pixman-1 -ID:/msys32/mingw32/include -ID:/msys32/mingw32/include/freetype2 -ID:/msys32/mingw32/include -ID:/msys32/mingw32/include/harfbuzz -ID:/msys32/mingw32/include/libpng16 -ID:/msys32/mingw32/include/gdk-pixbuf-2.0 -ID:/msys32/mingw32/include -ID:/msys32/mingw32/lib/libffi-3.2.1/include -ID:/msys32/mingw32/include/glib-2.0 -ID:/msys32/mingw32/lib/glib-2.0/include -ID:/msys32/mingw32/include -o 'hello' 'hello.c' -mwindows -LD:/msys32/mingw32/lib -lgimpui-2.0 -lgimpwidgets-2.0 -lgimpmodule-2.0 -lgimp-2.0 -lgimpmath-2.0 -lgimpconfig-2.0 -lgimpcolor-2.0 -lgimpbase-2.0 -lgegl-0.4 -lgegl-npd-0.4 -lgmodule-2.0 -pthread -ljson-glib-1.0 -lbabl-0.1 -lgtk-win32-2.0 -lgdk-win32-2.0 -lgdi32 -limm32 -lshell32 -lole32 -Wl,-luuid -lpangowin32-1.0 -lpangocairo-1.0 -lpango-1.0 -latk-1.0 -lcairo -lgdk_pixbuf-2.0 -lgio-2.0 -lgobject-2.0 -lglib-2.0 -lintl i686-w64-mingw32-gcc: error: 'hello.c': No such file or directory
hello.c が無い? なんでや。あるやん。
む。もしかして、'hello.c' という感じで、「'」で挟まれてしまっているあたりがいかんのでは。
これ、要するに、i686-w64-mingw32-gcc でコンパイルとリンクをすればいいということだよな…。
仮にそうであるならばと、「'」を外しつつ、あちこちを並べ替えて、gimptool-2.0 を通さずに打ってみた。
i686-w64-mingw32-gcc -o hello hello.c -mms-bitfields -pthread -mms-bitfields -ID:/msys32/mingw32/include/gimp-2.0 -ID:/msys32/mingw32/include/gegl-0.4 -ID:/msys32/mingw32/include -ID:/msys32/mingw32/include/gio-win32-2.0 -ID:/msys32/mingw32/include/json-glib-1.0 -ID:/msys32/mingw32/include/babl-0.1 -ID:/msys32/mingw32/include -ID:/msys32/mingw32/include/gtk-2.0 -ID:/msys32/mingw32/lib/gtk-2.0/include -ID:/msys32/mingw32/include/pango-1.0 -ID:/msys32/mingw32/include/fribidi -ID:/msys32/mingw32/include -ID:/msys32/mingw32/include/cairo -ID:/msys32/mingw32/include/atk-1.0 -ID:/msys32/mingw32/include/cairo -ID:/msys32/mingw32/include/pixman-1 -ID:/msys32/mingw32/include -ID:/msys32/mingw32/include/freetype2 -ID:/msys32/mingw32/include -ID:/msys32/mingw32/include/harfbuzz -ID:/msys32/mingw32/include/libpng16 -ID:/msys32/mingw32/include/gdk-pixbuf-2.0 -ID:/msys32/mingw32/include -ID:/msys32/mingw32/lib/libffi-3.2.1/include -ID:/msys32/mingw32/include/glib-2.0 -ID:/msys32/mingw32/lib/glib-2.0/include -ID:/msys32/mingw32/include -mwindows -LD:/msys32/mingw32/lib -lgimpui-2.0 -lgimpwidgets-2.0 -lgimpmodule-2.0 -lgimp-2.0 -lgimpmath-2.0 -lgimpconfig-2.0 -lgimpcolor-2.0 -lgimpbase-2.0 -lgegl-0.4 -lgegl-npd-0.4 -lgmodule-2.0 -pthread -ljson-glib-1.0 -lbabl-0.1 -lgtk-win32-2.0 -lgdk-win32-2.0 -lgdi32 -limm32 -lshell32 -lole32 -Wl,-luuid -lpangowin32-1.0 -lpangocairo-1.0 -lpango-1.0 -latk-1.0 -lcairo -lgdk_pixbuf-2.0 -lgio-2.0 -lgobject-2.0 -lglib-2.0 -lintl
通った。hello.exe が出来上がった。
できた hello.exe を、GIMP 2.10.14 32bit Portable samj版から呼んでみた。ダイアログは開かなかったけど、エラーメッセージウインドウに「Hello, world!」と表示された。これで動作は合ってるのかな…?
_GIMP Developer Resources - How to write a GIMP plug-in, part II
上記ページから入手できる、myblur1.c と myblur2.c も、同様にビルドしてみた。これも GIMP から呼び出したら、ちゃんとぼかしフィルタとして動いてくれた。
ただ、件のサンプルは、GIMP 2.10 より古いバージョン向けに書かれたサンプルのようで、コンパイル中に、
「gimp_drawable_get は非推奨になったから、代わりに gimp_drawable_get_buffer を使え」
「gimp_drawable_detach は非推奨になったぞ」
「gimp_pixel_rgn_init の代わりに gimp_drawable_get_buffer を〜」
「gimp_pixel_rgn_get_pixel の代わりに gegl_buffer_sample を〜」
等々、大量の警告が表示された。
GIMP 2.10 から本格導入された GEGLに対応させろや、ということだよな…。それって簡単に修正できるのかな。ググってみたけど、ちょっとそういうわけにはいかない感じ。
[ ツッコむ ]
以上、1 日分です。