katsuの駄日記

tomightyのdebパッケージ作成をめざす (1)

昨日行なわれた第113回 関西Debian勉強会に出席してきました。 そしたら、先々月パッケージング道場に出席してたこともあり、再来月くらいにその後の報告をする……といった話になってしまいました。 発表のネタは随時募集中らしいです。 さてはて……。

ということで、しばらく日記を放置してしまっていたんですが、 まずこちらでdeb作成の記録をしながら進めていこうかと……。

で、まずなんのパッケージをつくろうか……、というところからなんですが、 実はパッケージング道場の時にはネタがなくて非常に困ったのですが、 最近ちょっと自分でもパッケージもにしたいかなーというツールができました。 それが、この日記のタイトルにもいれた、tomightyというツールなんす。

tomightyというツール、公式サイトは こちらです。 このツールは、ポモドーロ・テクニックと呼ばれる生産性向上のための手法に使われるタイマーアプリで、Qtで書かれてます。 余談ですけど、Qtを「キュート」って読む事を最近知りました。 ずっと「キューティー」って読んでた……。 閑話休題。 ポモドーロ・テクニックってのは、単純に言うと仕事を25分、その後休憩5分ってのを繰り返すような感じの手法で、 このツールはタスクバーに納まって、25分と5分(と長めの休憩の15分)を計測することができるツールってわけです。 まぁ、テクニックの詳細についてはググってください。

ということで、Qtのdebパッケージのお作法に則ってパッケージを作成していくことになるはずなんですが、 残念ながら、手元のsidで普通にビルドがコケます……。 いちおう、無理矢理通すことはできてるので、まずはこちらを全うな方法で修正するところからですね……。

ちゅーことで

すすめてみます。

まずは、普通にビルドを通す方法について。 ビルド方法は、README.mdに書いてあって、ディレクトリを作ってqmakeを実行……なんですが、 このツールはQt5を要求してるんですが、私の環境だと、

% qmake --version
QMake version 2.01a
Using Qt version 4.8.7 in /usr/lib/x86_64-linux-gnu

となって、Qt4が使用されてしまうみたいです。 適当に調べてみると、 -qt オプションを使うのが正解のようで、

% qmake -qt=qt5 --version
QMake version 3.0
Using Qt version 5.6.1 in /usr/lib/x86_64-linux-gnu

とすると、無事Qt5が使われるようになりました。 これで、README.mdに書いてある手順で以下のコマンドを打ってみます。

% mkdir build-qt5
% cd build-qt5
% qmake -qt=qt5 ../src/tomighty.pro
% make

とすると! 以下のようにコケました……。

g++ -m64 -Wl,-O1 -o tomighty-test-runner Main.o   -L/home/rare/work/debian/tomighty/build-qt5/test-runner/../core/ -ltomighty-core -L/home/rare/work/debian/tomighty/build-qt5/test-runner/../ui/ -ltomighty-ui -L/home/rare/work/debian/tomighty/build-qt5/test-runner/../core-tests/ -ltomighty-core-tests -L/home/rare/work/debian/tomighty/build-qt5/test-runner/../ui-tests/ -ltomighty-ui-tests -lQt5Test -lQt5Core -lpthread
/usr/bin/ld: warning: libtomighty-core-mock.so.1, needed by /home/rare/work/debian/tomighty/build-qt5/test-runner/../core-tests//libtomighty-core-tests.so, not found (try using -rpath or -rpath-link)
/home/rare/work/debian/tomighty/build-qt5/test-runner/../core-tests//libtomighty-core-tests.so: `tmty::InMemoryPreferences::InMemoryPreferences(QObject*)' に対する定義されていない参照です
/home/rare/work/debian/tomighty/build-qt5/test-runner/../core-tests//libtomighty-core-tests.so: `tmty::FakeTimer::interval() const' に対する定義されていない参照です
/home/rare/work/debian/tomighty/build-qt5/test-runner/../core-tests//libtomighty-core-tests.so: `tmty::FakeTimer::FakeTimer(QObject*)' に対する定義されていない参照です
/home/rare/work/debian/tomighty/build-qt5/test-runner/../core-tests//libtomighty-core-tests.so: `tmty::ManualClockwork::moveOneSecond()' に対する定義されていない参照です
/home/rare/work/debian/tomighty/build-qt5/test-runner/../ui-tests//libtomighty-ui-tests.so: `tmty::MockTimerSignalEmitter::MockTimerSignalEmitter(QObject*)' に対する定義されていない参照です
/home/rare/work/debian/tomighty/build-qt5/test-runner/../ui-tests//libtomighty-ui-tests.so: `tmty::MockPomodoroEngine::isStarted() const' に対する定義されていない参照です
/home/rare/work/debian/tomighty/build-qt5/test-runner/../ui-tests//libtomighty-ui-tests.so: `tmty::MockPomodoroEngine::MockPomodoroEngine(QObject*)' に対する定義されていない参照です
/home/rare/work/debian/tomighty/build-qt5/test-runner/../core-tests//libtomighty-core-tests.so: `tmty::ManualClockwork::ManualClockwork(QObject*)' に対する定義されていない参照です
/home/rare/work/debian/tomighty/build-qt5/test-runner/../ui-tests//libtomighty-ui-tests.so: `tmty::MockPomodoroEngine::getCurrentIntervalType() const' に対する定義されていない参照です
/home/rare/work/debian/tomighty/build-qt5/test-runner/../core-tests//libtomighty-core-tests.so: `tmty::ManualClockwork::isRunning() const' に対する定義されていない参照です
collect2: error: ld returned 1 exit status

まぁ、単純にlibtomighty-core-mock.so.1にパスが通ってないようで……。 モノはいるんですよ、モノは……。

% find . -name libtomighty-core-mock.so.1
./core-mock/libtomighty-core-mock.so.1

で、コケてる g++ コマンドを以下のようにして、test-runnerディレクトリで実行すると通ることも確認できてます。

% g++ -m64 -Wl,-O1 -o tomighty-test-runner Main.o -L/home/rare/work/debian/tomighty/build-qt5/test-runner/../core/ -ltomighty-core -L/home/rare/work/debian/tomighty/build-qt5/test-runner/../ui/ -ltomighty-ui -L/home/rare/work/debian/tomighty/build-qt5/test-runner/../core-tests/ -ltomighty-core-tests -L/home/rare/work/debian/tomighty/build-qt5/test-runner/../ui-tests/ -ltomighty-ui-tests -lQt5Test -lQt5Core -lpthread -L/home/rare/work/debian/tomighty/build-qt5/core-mock -ltomighty-core-mock

そもそも、test-runnerなんて名前なので、ビルド必須なのかもよくわかりませんが……。 ひとまずは、こちらを全うに直す方法を調べる必要がありそうです。

まさか……

これだけのはなしですか……?

diff --git src/test-runner/test-runner.pro src/test-runner/test-runner.pro
index 44ac2b4..82bc4c8 100644
--- src/test-runner/test-runner.pro
+++ src/test-runner/test-runner.pro
@@ -27,16 +27,19 @@ win32:CONFIG(release, debug|release): LIBS += \
   -L$$OUT_PWD/../core/release/ -ltomighty-core \
   -L$$OUT_PWD/../ui/release/ -ltomighty-ui \
   -L$$OUT_PWD/../core-tests/release/ -ltomighty-core-tests \
+  -L$$OUT_PWD/../core-mock/release/ -ltomighty-core-mock \
   -L$$OUT_PWD/../ui-tests/release/ -ltomighty-ui-tests

 else:win32:CONFIG(debug, debug|release): LIBS += \
   -L$$OUT_PWD/../core/debug/ -ltomighty-core \
   -L$$OUT_PWD/../ui/debug/ -ltomighty-ui \
   -L$$OUT_PWD/../core-tests/debug/ -ltomighty-core-tests \
+  -L$$OUT_PWD/../core-mock/debug/ -ltomighty-core-mock \
   -L$$OUT_PWD/../ui-tests/debug/ -ltomighty-ui-tests

 else:unix: LIBS += \
   -L$$OUT_PWD/../core/ -ltomighty-core \
   -L$$OUT_PWD/../ui/ -ltomighty-ui \
   -L$$OUT_PWD/../core-tests/ -ltomighty-core-tests \
+  -L$$OUT_PWD/../core-mock/ -ltomighty-core-mock \
   -L$$OUT_PWD/../ui-tests/ -ltomighty-ui-tests

ビルド通ってしまった。 win版は通るかわかんないけど……。