この投稿は
RStudio Advent Calendar 2016 17日目の記事です。
Ubuntu 16.04 + Fcitx + RStudio 1.0で日本語を入力する方法で簡単なビルド方法を書きましたが、もう少し詳細に解説を加えながらビルドする方法をお伝えします。
1. Qtを取得する
Qtをダウンロードするシェルスクリプトを読めば取得方法はすぐにわかりますが、今回は64bit版を例にします。
$ wget https://s3.amazonaws.com/rstudio-buildtools/QtSDK-5.4.0-x86_64.tar.gz
2. 展開する
別にどこでもいいんですけど、今回は/opt以下にしました。
$ sudo tar xf QtSDK-5.4.0-x86_64.tar.gz -C /opt
3. fcitx-qt5のソースコードをダウンロード
$ sudo apt source fcitx-qt5
4. ビルドに必要なパッケージをインストールする
これでいいはずですが検証していません。ついでにカレントフォルダーを移動します。
$ sudo apt install build-essential
$ sudo apt build-dep fcitx-qt5
$ cd fcitx-qt5-(バージョン)
5. debian/以下のファイルを変更する
5.1 debian/contorl
diff -urN fcitx-qt5-1.0.5/debian/control fcitx-qt5-1.0.5-rstudio/debian/control
--- fcitx-qt5-1.0.5/debian/control 2015-10-30 18:38:17.000000000 +0900
+++ fcitx-qt5-1.0.5-rstudio/debian/control 2016-11-02 18:58:13.248813895 +0900
@@ -8,19 +8,17 @@
extra-cmake-modules (>= 1.4.0),
fcitx-libs-dev (>= 1:4.2.8),
intltool,
- pkg-config,
- qtbase5-dev,
- qtbase5-private-dev
+ pkg-config
Standards-Version: 3.9.6
Homepage: http://www.fcitx-im.org
Vcs-Git: git://anonscm.debian.org/pkg-ime/fcitx-qt5.git
Vcs-Browser: http://anonscm.debian.org/gitweb/?p=pkg-ime/fcitx-qt5.git
-Package: fcitx-frontend-qt5
+Package: fcitx-frontend-qt5-rstudio
Architecture: any
Multi-Arch: same
Pre-Depends: ${misc:Pre-Depends}
-Depends: fcitx-module-dbus, ${misc:Depends}, ${shlibs:Depends}
+Depends: fcitx-module-dbus, ${misc:Depends}, ${shlibs:Depends}, rstudio, libfcitx-qt5-1-rstudio
Description: Free Chinese Input Toy of X - Qt5 IM Module frontend
Fcitx is the Free Chinese Input Toy of X, which was initially designed
for Chinese users, and used XIM protocol. Now it has already evolved
@@ -45,7 +43,7 @@
Description: transitional dummy package
This is a transitional dummy package. It can safely be removed.
-Package: libfcitx-qt5-1
+Package: libfcitx-qt5-1-rstudio
Architecture: any
Multi-Arch: same
Pre-Depends: ${misc:Pre-Depends}
今回は吊るしのQtは使用しないので、ビルドに必要な依存関係(Build-dep)から外しています。あっても大して問題があるわけではありません。どうせ使いませんし。
また、パッケージ名はオリジナルと被らないようにfcitx-frontend-qt5-rstudioとlibfcitx-qt5-1-rstudioに変更し、前者のDependsをいじってrstudioそのものと後者に依存させています。
とはいえ、ここは本当はもう少しいじらないとダメなところのような気もします。後者から前者に依存させるとか。
まぁ今回はそんなに厳密にやらんでもいいでしょう。
5.2 debian/fcitx-frontend-qt5-rstudio.install
diff -urN fcitx-qt5-1.0.5/debian/fcitx-frontend-qt5-rstudio.install fcitx-qt5-1.0.5-rstudio/debian/fcitx-frontend-qt5-rstudio.install
--- fcitx-qt5-1.0.5/debian/fcitx-frontend-qt5-rstudio.install 1970-01-01 09:00:00.000000000 +0900
+++ fcitx-qt5-1.0.5-rstudio/debian/fcitx-frontend-qt5-rstudio.install 2016-11-02 18:28:49.644966838 +0900
@@ -0,0 +1 @@
+opt/Qt5.4.0/5.4/gcc_64/plugins/platforminputcontexts/libfcitxplatforminputcontextplugin.so usr/lib/rstudio/bin/plugins/platforminputcontexts/
パッケージ名.install(生成されるパッケージが単一の場合はただのinstall)には、パッケージに含めるファイルを記載します。
スペースで区切り、前はファイルの在り処、後はインストールしたいフォルダーです。
先頭に"/"を入れないのがコツです。
元のフォルダーにはこんなものはないので(そらそうだ)、ファイルスタンプはおかしなことになります。
5.3 debian/ libfcitx-qt5-1-rstudio.install
diff -urN fcitx-qt5-1.0.5/debian/fcitx-frontend-qt5.install fcitx-qt5-1.0.5-rstudio/debian/fcitx-frontend-qt5.install
--- fcitx-qt5-1.0.5/debian/fcitx-frontend-qt5.install 2015-10-30 18:38:17.000000000 +0900
+++ fcitx-qt5-1.0.5-rstudio/debian/fcitx-frontend-qt5.install 1970-01-01 09:00:00.000000000 +0900
@@ -1 +0,0 @@
-usr/lib/*/qt5
ファイル名を変更したのでなくなっています。
5.4 debian/ibfcitx-qt5-1-rstudio.install
diff -urN fcitx-qt5-1.0.5/debian/libfcitx-qt5-1-rstudio.install fcitx-qt5-1.0.5-rstudio/debian/libfcitx-qt5-1-rstudio.install
--- fcitx-qt5-1.0.5/debian/libfcitx-qt5-1-rstudio.install 1970-01-01 09:00:00.000000000 +0900
+++ fcitx-qt5-1.0.5-rstudio/debian/libfcitx-qt5-1-rstudio.install 2016-11-02 18:50:49.061389459 +0900
@@ -0,0 +1 @@
+usr/lib/*/libFcitxQt5*.so.* usr/lib/rstudio/bin/
5.1に準じますが、RStudioのフォルダーに入れていることがわかるかと思います。
5.5 debian/libfcitx-qt5-1.install
diff -urN fcitx-qt5-1.0.5/debian/libfcitx-qt5-1.install fcitx-qt5-1.0.5-rstudio/debian/libfcitx-qt5-1.install
--- fcitx-qt5-1.0.5/debian/libfcitx-qt5-1.install 2015-10-30 18:38:17.000000000 +0900
+++ fcitx-qt5-1.0.5-rstudio/debian/libfcitx-qt5-1.install 1970-01-01 09:00:00.000000000 +0900
@@ -1 +0,0 @@
-usr/lib/*/libFcitxQt5*.so.*
5.3と同じです。
5.6 debian/rules
diff -urN fcitx-qt5-1.0.5/debian/rules fcitx-qt5-1.0.5-rstudio/debian/rules
--- fcitx-qt5-1.0.5/debian/rules 2015-10-30 18:38:17.000000000 +0900
+++ fcitx-qt5-1.0.5-rstudio/debian/rules 2016-11-02 18:14:55.890254321 +0900
@@ -9,5 +9,9 @@
%:
dh $@ --parallel --fail-missing
+override_dh_auto_configure:
+ dh_auto_configure -- \
+ -DCMAKE_PREFIX_PATH=/opt/Qt5.4.0/5.4/gcc_64/
+
override_dh_strip:
dh_strip --dbg-package=libfcitx-qt5-dbg
ここが最大のポイントです。fcitx-qt5はcmakeでビルドできるようになっていますが、このようなオプションをつければもともとのconfigureオプションに"CMAKE_PREFIX_PATH"を追加することができます。
それにより、吊るしのQt5を使わなくなるという按配です。
6. ビルドする
依存関係に問題がなく、また上記の修正を適切に施していればパッケージがビルドできます。
$ dpkg-buildpackage -r -uc -b
7. RStudioを動作させるUbuntuに生成したパッケージをインストールする
インストールするパッケージはfcitx-frontend-qt5-rstudio_1.0.5-1_amd64.debとlibfcitx-qt5-1-rstudio_1.0.5-1_amd64.debだけです。これ以外は
絶対にインストールしないでください。
というわけで、やっていることは
・ もとのパッケージ名と被らないように変更
・ インストールするパスをRStudioに合わせて変更
・ RStudioと同じバージョンのQtでビルドできるように変更
のたった3つで、パッケージングの知識があれば全く難しくないことであることがお分かりいただけたと思います。もちろんRStudioユーザーにその手のことが詳しい人なんてなかなかいないでしょうから、このように
RStudio Advent Calendar 2016に参加したというわけですが。
ちなみにRStudioそのものを吊るしのQt(とPandoc)でビルドしたいという場合は、
Vine Linuxのリポジトリにあるsrpmが参考になると思います。