mikutter 3.6.6をGentooのOverlayでインストールできるようにしました

Overlayはこちらから.

ncaq/ncaq-overlay: ncaq's personal gentoo overlay

公式リポジトリに何が起きていたか

Gentoo公式のmikutterは3.5.4までしか提供していません.

またそれはdev-ruby/delayer-deferred-2.0.0では動かないため,何も考えずに公式パッケージをインストールすると動かないという状況になっていました.

mikutter-3.6.1をインストール

というわけで,前にmikutter-3.6.1.ebuildを書こうとしたけれどidn-ruby-0.1.0.ebuildが書けないので正常に動作するものが書けなかった - ncaqに書いた通りoverlayでmikutter 3.6を提供しようと頑張ったのですが,どうもうまくいかなかったので諦めていました.

今日朝起きたら急にやる気になったので書きました.

やったことは

  • mikutterのebuildを最新のものに
  • twitter-text-2.1.0の提供
  • idn-rubyの提供

idn-rubyの件なのですが,Project:Ruby/Packaging RubyGems - Gentoo Wikiを参考にして書いたら今回はうまく動きました.しかし,ebuildが一度動かしたcompileをたとえ失敗したとしてもキャッシュに残すという仕様を理解できずに,cleanせずに改変再実行していたため,改変が適用されずにずっと古いものを実行して動かないなと首を捻っていました.これで前回と合わせて総計1時間ぐらい溶かした気がします.

mikutter-3.6.6をインストールしたい

ruby-pangoが古いと動かない

それでmikutter-3.6.1はうまく提供できて,実際に動いたのすが,どうせなら最新版にしようとmikutter-3.6.6を提供しようとしたら以下のエラーで動きませんでした.

/usr/share/mikutter/core/mui/cairo_miracle_painter.rb:300:in `main_message': uninitialized constant Pango::WrapMode (NameError)
Did you mean?  Pango::WRAP_WORD

この当時Gentooの更新をサボっていて,GTK+やCairoのバージョンが古くて互換性が無いのかな?とアップデートしてみました.が解決しません.

よく読んでみたら,Pango::WrapModeが存在しないということのようですね.

調べて見るとissueが出てきました.3.1.2 uninitialized constant Pango::ALIGN_LEFT · Issue #1022 · ruby-gnome2/ruby-gnome2

このissueによると,dev-ruby/ruby-pangoにPango::WrapMode関連の変動があったみたいですね.

色々ライブラリが古い

ライブラリが古いと問題になることがわかっていきたので,オリジナルのGemfileを見てみて,そのバージョン指定をebuildに移してみることにしました.これでライブラリが古いことが検出できるはず.

そしたらdev-ruby/ruby-gtk2-3.2.4が存在しないことが検出されました.

ruby-gtk2を追加するには依存関係のruby-glib2を追加する必要があります.ruby-glib2を追加するには…

色々あって以下を追加しました.すべて3.2.4です.

  • ruby-atk
  • ruby-cairo-goject
  • ruby-gdkpixbuf2
  • ruby-glib2
  • ruby-gtk2
  • ruby-pango
  • ruby-cairo-gobject

古いものを改名するだけではダメで,native-packager-installerの実行を阻止するためにsedで色々ファイルを弄る必要があってそれなりに大変でした.

動きました

頑張って色々追加してついに動きました!半日使ってしまいましたが私の勝利です.

mikutter 3.6.6
mikutter 3.6.6

しかし,動かしているとCoredumpしてしまうことが結構あるようですね.それは自作プラグインの問題のようなので修正していこうと思います.と思ったけど結構delayerのバグみたいなの多いみたいですね…情報が集まったら報告していきましょう.

このエントリーをはてなブックマークに追加 fb-like g-plusone pocket