試験運用中なLinux備忘録・旧記事

はてなダイアリーで公開していた2007年5月-2015年3月の記事を保存しています。

mfiler3(0.2.1)のビルドメモとebuild

www.geocities.jp/daisuke530221jp/index3.html
で新しいmfiler3の開発版が配布されている。完成度はまだ低いようだが、ebuildの作成のためにビルド・実行のテストを行った。
ビルドメモとはいっても、ebuildの作成に関する内容が主になる。

  1. 依存パッケージ
  2. コンパイラの最適化オプション
  3. バージョン2との共存について
  4. 作成したebuildファイル
  5. 起動時に落ちる別の原因について

依存パッケージ

  • Boehm GC(メモリ管理支援・動的に確保したメモリ領域が不要になったら自動で解放)
  • ncurses(端末上の表示を制御)
  • C/Migemo(ローマ字読みで日本語を検索)

に加え、今回も鬼車ライブラリを内蔵している。ただし、システムにインストールされている鬼車があると、そちらを使用するようだ。バージョン3では今のところRubyのライブラリ*1にはリンクしていないため、外部の鬼車(dev-libs/oniguruma)を必須として要求するようにebuildを書くことにする。

コンパイラの最適化オプション

このアプリケーションのビルドシステムでは、バージョン2と同様、コンパイラの最適化オプションを指定する環境変数CFLAGS/CXXFLAGSは無視されてしまう。しかし、コンパイラ名の環境変数CC/CXXにCFLAGS/CXXFLAGSを含める形での指定はできるため、ebuildではこのようにしている(toolchain-funcsのtc-getCC()tc-getCXX())。

export CC="$(tc-getCC) ${CFLAGS}" CXX="$(tc-getCXX) ${CXXFLAGS}"

ところが、ビルドしたものを実行すると、いきなり落ちてしまった。試しに/usr/local/以下に普通にインストールしたものを実行したところ、落ちることはなかったので、色々試したところ、GCCの最適化オプション-O[数字]を付けたときに限り落ちることが分かった。
Gentoo LinuxPortageには、先述のCFLAGS/CXXFLAGSの値によってパッケージの動作がおかしくなる場合のために、自動でフィルタ(消す・もしくは置き換える)する機能がある。flag-o-maticのfilter-flags()replace-flags()といった関数を使用する。
今回は、-Oのレベルでもダメだったため

filter-flags -O?

とした。-march指定では大丈夫だったため、フィルタはしていない。
(2008/6/22)上記不具合はバージョン1.0.1で修正された(-O3でも落ちないことを確認)。バージョン1.0.1のebuildをアップロードしたが、最適化オプションのフィルタに関する処理は取り除いた。

バージョン2との共存について

共存できなくはないような気もしたのだが、mattrだけは実行ファイル名がかぶってしまうので、バージョン2がある場合はインストールできないようにした。

作成したebuildファイル

cid-3f9be5b1cd4a806c.skydrive.live.com/browse.aspx/%E5%85%AC%E9%96%8B/Gentoo%20Linux%20ebuild/app-misc/mfiler3
にアップロードした。
(2008/6/20)完成版のバージョン1.0.0(関連記事)が出たため、0.2.1は削除した。
なお、バージョン2の最新(4.0.9b)も
cid-3f9be5b1cd4a806c.skydrive.live.com/browse.aspx/%E5%85%AC%E9%96%8B/Gentoo%20Linux%20ebuild/app-misc/mfiler2
にアップロードした。

起動時に落ちる別の原因について

(2008/6/18)バージョン0.2.1での仕様なのか、起動したときの作業ディレクトリにexe.logというファイルを書き出すため、書き込み権限がない場合、そのまま落ちてしまうようだ。
(2008/6/22)この現象はその後のバージョンではなくなっている。

使用したバージョン:

  • mfiler3 0.2.1
  • GCC 4.2.4
  • Boehm GC 6.8
  • ncurses 5.6(5.6-r2)
  • C/Migemo 1.3c

*1:古いバージョンの鬼車を内蔵する場合があり、エラーの原因となることがあるため、ebuildの管理が面倒になる