おがさわらなるひこのオープンソースとかプログラミングとか印刷技術とか

おがさわらなるひこ @naru0ga が技術系で興味を持ったりなんだりしたことをたまーに書くブログです。最近はてなダイアリー放置しすぎて記事書くたびにはてな記法忘れるのではてなブログに移行しました。

クリエイティブ・コモンズ・ライセンス
特に断りがない場合は、本ブログの筆者によるコンテンツは クリエイティブ・コモンズ 表示 - 継承 4.0 国際 ライセンスの下に提供されています。

短期集中連載? LibreOfficeをWindowsで開発してみよう:その① ビルド環境の構築

GWでヒマ? なのでLibreOfficeの開発というかバグ直しみたいなのに挑戦してみたいですね。 先日買ったThinkpad T470は結局しばらくWindowsで運用することにしたので、じゃあWindowsで開発に挑戦してみましょうと。

ということで短期集中連載開始。途中で力尽きたらごめんなさい。

有識者が皆様にノウハウをご教示するみたいなものではなく、むしろ私の作業メモ。なので嘘とか間違いもあるかも……。

さてと。初回のこれはビルド環境の構築。 といってまだビルドはできてません。 ./autogen.sh が通ることを確認したところまで。

Windowsの環境作ったの記憶にないほど昔か、もしかして初めてなのですが、今はlodeあるんで楽ですね。

wiki.documentfoundation.org

でもlodeだけでは環境できないので、以下も参照して必要なものも入れないといけません。

wiki.documentfoundation.org

Visual Studio 2019 Communityのインストール

最初はBuilding LibreOffice on Windows with Cygwin and MSVC: Tips and Tricksの方を参照しつつ。

Visual Studioをインストールします。私はchocolateyでさくっと。 管理者モードで実行したコマンドプロンプトにて:

C:\WINDOWS\system32>choco search visualstudio2019
Chocolatey v0.10.15
apincoree-vsix 3.9 [Approved]
...
visualstudio2019-workload-nativedesktop 1.0.0 [Approved]
...
visualstudio2019teamexplorer 16.5.4.0 [Approved]
visualstudio2019professional 16.5.4.0 [Approved]
visualstudio2019testagent 16.5.4.0 [Approved]
visualstudio2019testcontroller 16.5.4.0 [Approved]
visualstudio2019buildtools 16.5.4.0 [Approved]
visualstudio2019community 16.5.4.0 [Approved]
visualstudio2019enterprise 16.5.4.0 [Approved]
38 packages found.

ドキュメントによれば「Desktop development with C++」ワークロードも導入せよとのことですので、 たぶん「visualstudio2019-workload-nativedesktop」を一緒に入れることもできると思いますが、 私はいったん本体だけ入れて各種コンポーネントは後入れすることにしました*1

C:\WINDOWS\system32>choco instal -y visualstudio2019community 

次はコンポーネントのインストール。ドキュメントによれば以下のものが必要だそうです。

  • MSVC v142 - VS 2019 C++ x64/x86 build tools (v14.2x)
  • C++ core features
  • Windows 10 SDK (10.0.xxxxx.x)
  • Windows Universal C Runtime
  • C++ ATL for v142 build tools (x86 & x64)
  • .NET Framework 4.x.x SDK
  • C++ 2019 Redistributable MSMs (only required to build MSI installer; not part of the "Desktop development with C++" workload)
  • C++ Clang Compiler for Windows (9.0.0) (not part of the "Desktop development with C++" workload)

Visual Studio 2019起動して、「コードなしで続行」選んで、ツール > ツールと機能の取得 を開きまして。

  • C++によるデスクトップ開発」を選んで、標準でチェックされてるものに加えて「Windows C++ Clangツール(9.0.0 - x64/x86)」もチェック。

ついで「個別のコンポーネント」で、「.NET Framework 4.8 SDK」および「C++ 2019 再頒布可能パッケージ MSM*2」の二つを選んで。

f:id:naruoga:20200501131134p:plain
ワークロード・コンポーネントの導入

これで「ダウンロードしながら変更する」して「変更」を押下するとよい……はず。

JDKのインストール

お次はJDKを入れます。ドキュメントによれば:

Java Development Kit (JDK) Version 8 or later. Make sure to get a 32-bit SDK if you are building for 32-bit Windows, and a 64-bit SDK if you are building for 64-bit Windows (with --enable-64-bit). Grab it from http://www.oracle.com/technetwork/java/javase/downloads/index.html.

とあります。 JDK8以降ならいいみたいなので13EAとか入れるのが男なのかもしれないですが、 弱気なのでJDK8です……へたれ*3。 上を見るとOracleJDKを使うように読めますが少なくともAdoptOpenJDKはいける……はず*4

あとぼーっと読んでたら 「Make sure to get a 32-bit SDK」って部分が目に飛び込んで、えってなったんですが(私だけ?)、 後ろに「if you are building for 32-bit Windows」ってあるので、普通に64bitで大丈夫です。

ということでこれもChcocolateyです。

C:\WINDOWS\system32>choco install -y adoptopenjdk8

インストールできたら確認しましょう。別途コマンドプロンプトを開けて、 java コマンドと javac コマンドの両方が使えればOKと。

C:\Users\naruhiko>java -version
openjdk version "1.8.0_252"
OpenJDK Runtime Environment (AdoptOpenJDK)(build 1.8.0_252-b09)
OpenJDK 64-Bit Server VM (AdoptOpenJDK)(build 25.252-b09, mixed mode)

C:\Users\naruhiko>javac -version
javac 1.8.0_252

ポリシーの確認

ここからは再びlodeのドキュメントを参照しつつ。

最初にlodeの導入手順ではPowerShellスクリプトを実行しないといけないので、ポリシーで許可されてるか確認して、必要なら許可してあげます。

PowerShellにて:

PS C:\Users\naruhiko> Get-ExecutionPolicy
RemoteSigned

で、ドキュメントを見るとUnrestrictedにしなさいと書いてありますが、たぶんRemoteSignedでも問題ない……というか、私はうまくいったのでそのまま。

cygwinの導入

そして、

https://git.launchpad.net/~documentfoundation/df-libreoffice/+git/lode/plain/bin/install_cygwin.ps1

を取ってきて c:\cyginstall において、PowerShellを管理者モードで起動して実行してあげると。するとcygwinが必要なパッケージともどもインストールされます。

おまけ:CygwinWindows Terminalで使えるように

これで使えるようになったんですがminttyが気に入らんので(?)、 WSLでも使ってるWindows Terminalを使えるようにしました。

手順はQiitaの記事:

qiita.com

のとおりですけど、chere 入れるための setup-x86_64.exec:\cyginstall\packages 以下にあること、cygwin bashのパスは c:\cygwin\bin だということだけ。快適。

lodeの導入

次もドキュメントの通りにやるだけ。cygwin開きまして、

git clone https://gerrit.libreoffice.org/lode
cd lode
./setup --help

これでヘルプが出て、

./setup --prereq

これで「Done.」と出れば依存関係チェック含めてオッケーと。

そしたらお次は

./setup

しまして*5、 これも正常に終わったら、ドキュメント通り ~/.bash_profie に以下の内容を書いて source するかcygwin bash抜けて入りなおします。

export LODE_HOME=/home/<user>/lode
PATH="${LODE_HOME}/opt/bin:${PATH}"

「環境」の作成

lodeには「環境(environment)」という考え方がありまして、 まあ要は開発してるとmasterブランチをビルドする場所と例えば6.4系をビルドする場所を両方維持しておきたいなーとか思うわけですけどそういうのを切り替えるってことですかね。

ドキュメントにしたがって dev/core という環境を作りましょう。

./setup --dev --force

するとLibreOfficeソースコード・レビュー管理システムGerritから ./dev/core にLibreOfficeのコードが一式cloneされてビルドできる環境が整うはず。 Gerritちょっと遅いのでclone結構遅いので、ご飯食べに行くなりお風呂入るなりする前にやっとくといいでしょう。

ウィルススキャンソフトの例外フォルダの設定

で、ウィルススキャンソフトの例外設定しないとパフォーマンスつらいので設定します。

と、あたかも自分はちゃんとやったかのように書いてますが、私自身は後述の autogen.sh のときに怒られて*6、あっと思ってやりました。 具体的な手順は環境によって異なるでしょうから省略。 C:\cygwin\home\<username>\lode\dev 以下を例外フォルダに入れとくとよいと思います。

./autogen.sh の実行

ここまで来たら ./autogen.sh が通れば、まあ必要なものはそろってるんじゃないかといえるので。結果的に私のオプションこんな感じで通りました。

 ./autogen.sh --with-lang=ALL --enable-64-bit --with-jdk-home=/cygdrive/c/Program\ Files/AdoptOpenJDK/jdk-8.0.252.09-hotspot/
  • --with-lang=ALL は全言語有効にしてビルド。まあenとjaだけでもいいんですけどね。
  • --enable-64-bit は前述の「64ビットビルドするならJDKは64ビットね」に書いてあったやつ
  • --with-jdk-home AdoptOpenJDKのインストールした場所

はーやれやれ。

ということで次の記事はデバッグして動いたやつを起動する、ぐらいかなー。 それは(ビルド待ってる時間はかかるけど)手間としては一瞬なはず。

*1:……というか、オンラインイベント参加しつつ作業してたらワークロードなどなど必要だよって記述を見落としてました。間抜け。

*2:こっちはインストーラ開発するんでなければ不要らしいですが、まあいちおう。

*3:8から上のバージョンで何が変わったのか追っかけてないんですよねー。モジュールとかvarとかGraalVMとか?名前しかしらない。

*4:LibOは内部でJDKの名称見てるところがあるので、OpenJDKの全ディストリビューションがOKだとはいえなかったはず。

*5:ここら辺ビール飲みながら作業してたのでちゃんと覚えてない……。

*6:autogen.sh のなかでeicarファイルというダミーウィルスを突っ込んで検知するっぽい、かしこい。