mieki256's diary



2020/02/04(火) [n年前の日記]

#1 [cg_tools][ubuntu] Ubuntu上でxpaintをビルドしてみたけれど

Ubuntu Linux 18.04 LTS 上で、公式バイナリの xpaint を使うと、選択範囲をドラッグしただけで落ちてしまうわけだけど。

Ubuntu 18.04 にインストールされる xpaint は、バージョンが 2.9.1.4-3.2。SourceForge に置いてあるソースは、最新版が 2.10.2。

_XPaint download | SourceForge.net

最新版なら、落ちるバグが修正されてたりしないか。試しにビルドしてみることにした。

環境は、Windows10 x64 1909 + VMware Workstation 15 Player 15.5.0 build-14665864 + Ubuntu Linux 18.04 LTS x64。

結論を先に書いておくけれど、sudo apt source xpaint で、パッケージのソースを入手して、パッチを当ててビルドするほうがいいです。以下は単なる作業記録と実験結果。

ビルド手順。 :

xpaint-2.10.2.tar.bz2 をDLして、tar xf xpaint-2.10.2.tar.bz2 で解凍。

中に INSTALL というファイルがあって、ビルドに必要なパッケージや、ビルド手順が書いてあった。

必要なパッケージが入っているか確認。

Obviously, you need an ANSI C compiler - only gcc is supported - and you need the following libraries to be installed, together with their associated development packages :

X11 libraries (libX11, libXext, libXt, libXmu, libSM, libICE, libXp)
libXpm
libz
libpng
libtiff
libjpeg
libopenjpeg
libpgf (optional)

Most Unix/Linux distributions should provide this (except possibly the optional libpgf, which is not required to build xpaint, but is of course needed to load PGF images).

Ubuntu公式リポジトリ内で、libopenjpeg と libgf が見つからないのがちょっと気になったけど、それ以外は既にインストールされていたか、追加でインストールできた。

sudo apt install libxmu-dev libxpm-dev

他にも、libtool-bin、libxaw3dxft-dev が必要になった気がする。

sudo apt install libtool-bin libxaw3dxft-dev

この状態で、configure、make。

cd xpaint-2.10.2
./configure
make
sudo make install
$ which xpaint
/usr/local/bin/xpaint
/usr/local/bin/ 以下にインストールされたらしい。

xpaint と打ったら起動してくれた。

やっぱり落ちる。 :

起動はしたものの、選択範囲をドラッグしたら落ちた。最新版もバグ入りなのだな。

xpaint 2.10.2 は 2017/11/13 に公開されてるようだけど、2018年の時点でも件のバグが報告されてるようで…。

_XPaint / Bugs / #19 Stack smash error on selection drag.

パッチがあった。 :

以下でパッチが紹介されてた。PaintRegion.c を修正するらしい。

_Bug #1691906 “*** stack smashing detected ***: xpaint terminated...” : Bugs : xpaint package : Ubuntu

value という変数を boolean で用意したのに、int として扱っていたのだな…。C言語って怖い。

試しに修正を加えて、make、sudo make install をしたら、選択範囲をドラッグしても落ちなくなった。

別の操作で落ちた。 :

選択範囲ドラッグで落ちなくなって喜んだものの、別の操作で落ちることに気づいた。File → Open Image を選んだら、ファイル選択ダイアログが一瞬表示された直後に「Segmentation fault (コアダンプ)」と言って落ちる。うーん。

ロードで落ちるということは、もしかして…。Save もダメだった。同じように、ファイル選択ダイアログが一瞬表示された直後に落ちてしまう。

openjpeg 関係のソレが無かったからダメなのだろうか。何にせよ、画像保存すらできないのでは、使えない。アンインストールするしかない…。

sudo make uninstall

パッケージのソースからビルド。 :

修正すべき箇所は少ないのだから、Ubuntu/Debianのパッケージソースを入手して、ソースを修正してビルドするのはどうだろう。試してみる。

参考ページ。

_第152回 パッケージをビルドしてみる:Ubuntu Weekly Recipe|gihyo.jp … 技術評論社

この手のビルドに必要なツールをインストール。
sudo apt-get install build-essential devscripts

ソースを入手。
apt source xpaint
$ ls -al
合計 1036
drwxrwxr-x  3 username username    4096  2月  4 08:36 ./
drwxrwxr-x  6 username username    4096  2月  4 08:28 ../
drwxrwxr-x 12 username username    4096  2月  4 08:36 xpaint-2.9.1.4/
-rw-r--r--  1 username username   13528 10月  3  2016 xpaint_2.9.1.4-3.2.debian.tar.xz
-rw-r--r--  1 username username    2158 10月  3  2016 xpaint_2.9.1.4-3.2.dsc
-rw-r--r--  1 username username 1025885 10月 16  2010 xpaint_2.9.1.4.orig.tar.bz2
入手できたっぽい。

xpaint のビルドに必要なパッケージをインストール。
sudo apt build-dep xpaint

xpaint-2.9.1.4/PaintRegion.c を修正。boolena value; を int value; に変更。

ビルドしてみる。
cd xpaint-2.9.1.4
dpkg-buildpackage -r -uc -b

通らない…。
...
rm -f librw.a
ar clq librw.a  rwTable.o readWriteBMP.o readWriteICO.o readScriptC.o   readWriteXBM.o readWritePNM.o readWriteXWD.o readWritePS.o  readWriteLXP.o readGIF.o writeGIF.o readWriteXPM.o writeTIFF.o readTIFF.o    readJPEG.o writeJPEG.o readWritePNG.o libpnmrw.o
ranlib librw.a
make[2]: ディレクトリ '/home/username/packages/xpaint_orig/xpaint-2.9.1.4/rw' から出ます
making always in ./xaw3dxft...
make[2]: ディレクトリ '/home/username/packages/xpaint_orig/xpaint-2.9.1.4/xaw3dxft' に入ります
make[2]: ディレクトリ '/home/username/packages/xpaint_orig/xpaint-2.9.1.4/xaw3dxft' から出ます
./substads -single xpaint.man.in xpaint.man XPAINT_VERSION 2.9.1
rm -f xpaint
gcc -o xpaint -g -O2 -fno-strict-aliasing       chroma.o color.o colorEdit.o dialog.o fatBitsEdit.o     fileBrowser.o fontSelect.o grab.o graphic.o hash.o help.o   image.o imageComp.o iprocess.o magnifier.o main.o menu.o misc.o     operation.o palette.o pattern.o print.o protocol.o readRC.o     screenshot.o text.o texture.o typeConvert.o arcOp.o freehandOp.o boxOp.o brushOp.o circleOp.o fillOp.o  fontOp.o lineOp.o pencilOp.o polygonOp.o splineOp.o selectOp.o  sprayOp.o dynPenOp.o Colormap.o Paint.o PaintEvent.o PaintRegion.o PaintUndo.o -Lrw -lrw -ldl -rdynamic   -L/usr/lib -lXpm -lX11 -lm -lXmu -lXext -lXft -ltiff  -ljpeg -lpng -lz   -lXaw3dxft -lXt -lfontconfig -L. -L./xaw3dxft   
main.o: 関数 `main' 内:
/home/username/packages/xpaint_orig/xpaint-2.9.1.4/main.c:737: `SetXftEncoding' に対する定義されていない参照です
/home/username/packages/xpaint_orig/xpaint-2.9.1.4/main.c:739: `SetXftDefaultFontName' に対する定義されていない参照です
/home/username/packages/xpaint_orig/xpaint-2.9.1.4/main.c:740: `SetMenuSpacing' に対する定義されていない参照です
/home/username/packages/xpaint_orig/xpaint-2.9.1.4/main.c:741: `SetXftInsensitiveTwist' に対する定義されていない参照です
/home/username/packages/xpaint_orig/xpaint-2.9.1.4/main.c:742: `SetXawHilitColor' に対する定義されていない参照です
magnifier.o: 関数 `DrawString' 内:
/home/username/packages/xpaint_orig/xpaint-2.9.1.4/magnifier.c:438: `XftDefaultFont' に対する定義されていない参照です
fontOp.o: 関数 `key' 内:
/home/username/packages/xpaint_orig/xpaint-2.9.1.4/fontOp.c:552: `XftEncoding' に対する定義されていない参照です
collect2: error: ld returned 1 exit status
Makefile:1241: recipe for target 'xpaint' failed
make[1]: *** [xpaint] Error 1
make[1]: ディレクトリ '/home/username/packages/xpaint_orig/xpaint-2.9.1.4' から出ます
dh_auto_build: make -j1 returned exit code 2
debian/rules:11: recipe for target 'binary' failed
make: *** [binary] Error 2
dpkg-buildpackage: error: fakeroot debian/rules binary subprocess returned exit status 2

色々インストールした Ubuntu だからダメなのだろうか。素の Ubuntu なら違う結果になるのかな。どうなんだろう。

別途Ubuntuをインストールし直して試した。 :

VMware Player上で、別途、Ubuntu Linux 18.04 LTS x64 をインストールし直して、パッケージソースを入手してビルドできるか試してみた。

そちらだと、すんなりビルドが通ってしまった…。

以下の3つのファイルができたっぽい。
  • libxaw3dxft6_2.9.1.4-3.2_amd64.deb
  • xpaint-dev_2.9.1.4-3.2_amd64.deb
  • xpaint_2.9.1.4-3.2_amd64.deb

dpkgでインストール。
sudo dpkg -i libxaw3dxft6_2.9.1.4-3.2_amd64.deb
sudo dpkg -i xpaint-dev_2.9.1.4-3.2_amd64.deb
sudo dpkg -i xpaint_2.9.1.4-3.2_amd64.deb

xpaint を起動してみた。選択範囲をドラッグしても落ちないし、ファイル選択ダイアログも開く。

ただ、キャンバスを画像保存しようとした際、ファイル選択ダイアログが開くけど、ファイル名を入力できない…。というか、ファイル名が表示されない…。

元々の仮想HDDイメージで試した。 :

元々の仮想HDDイメージを使って、ビルドできるか試した。OSインストール直後の Ubuntu ならすんなりビルドできたことを考えると、おそらく、xft関連パッケージで余計なものを入れてしまっているのではないかと…。

sudo aptitude search xft で列挙されたパッケージの中から、libxaw3dxft* や libxft* をアンインストールして、必要になるはずのパッケージを再度インストール。

sudo apt install autoconf automake autopoint autotools-dev bison debhelper \
dh-autoreconf dh-strip-nondeterminism flex libbison-dev libexpat1-dev \
libfile-stripnondeterminism-perl libfontconfig1-dev libfreetype6-dev \
libice-dev libjbig-dev libjpeg-dev libjpeg-turbo8-dev libjpeg8-dev \
liblzma-dev libpng-dev libpthread-stubs0-dev libsigsegv2 libsm-dev \
libtiff-dev libtiff5-dev libtiffxx5 libtool libx11-dev libxau-dev \
libxaw7-dev libxcb1-dev libxdmcp-dev libxext-dev libxft-dev \
libxmu-dev libxmu-headers libxpm-dev libxrender-dev libxt-dev \
m4 pkg-config po-debconf x11proto-core-dev x11proto-dev \
x11proto-xext-dev xorg-sgml-doctools xtrans-dev xutils-dev zlib1g-dev

この状態で試したら、ビルドが通った。やはり余計なものを入れてしまっていたらしい。

更に、こちらの版では、画像保存時もファイル名が表示されている…。もしかして、xfonts云々で必要なフォントがある、みたいなことかな…。以前、tgif をインストールした時も、そこでハマったし…。

_【電脳】Ubuntu 14.04 LTS で Tgif のフォントのエラーを解決して使う方法 | t-nissieの日記 | スラド

aptでアップデートされてしまう。 :

この状態で sudo apt update をすると、xpaint がアップグレード可能なパッケージとしてリストアップされて、sudo apt upgrade をすると、公式のバグ入り版 xpaint バイナリが上書きインストールされてしまう。ダメじゃん。

「このパッケージはアップデートから除外してくれ」てな指定ができたら解決するのかな。たぶん方法はあるんだろうけど。

ググってみたら、簡単だった。sudo apt-mark hold xpaint、sudo apt-mark hold xpaint-dev でいいらしい。

_UbuntuやDebianで特定のパッケージを更新されないよう「ホールド」する方法 | LFI

しかし、xpaint って、そこまでして使わないといけないソフトだろうか…?

まあ、パッチを当てれば選択範囲ドラッグで落ちる不具合は直るし、*.deb も作れると分かったので、これで良しとする。

以上です。

過去ログ表示

Prev - 2020/02 -
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29

カテゴリで表示

検索機能は Namazu for hns で提供されています。(詳細指定/ヘルプ


注意: 現在使用の日記自動生成システムは Version 2.19.6 です。
公開されている日記自動生成システムは Version 2.19.5 です。

Powered by hns-2.19.6, HyperNikkiSystem Project