短期集中連載? LibreOfficeをWindowsで開発してみよう:その① ビルド環境の構築
GWでヒマ? なのでLibreOfficeの開発というかバグ直しみたいなのに挑戦してみたいですね。 先日買ったThinkpad T470は結局しばらくWindowsで運用することにしたので、じゃあWindowsで開発に挑戦してみましょうと。
ということで短期集中連載開始。途中で力尽きたらごめんなさい。
有識者が皆様にノウハウをご教示するみたいなものではなく、むしろ私の作業メモ。なので嘘とか間違いもあるかも……。
さてと。初回のこれはビルド環境の構築。
といってまだビルドはできてません。 ./autogen.sh
が通ることを確認したところまで。
Windowsの環境作ったの記憶にないほど昔か、もしかして初めてなのですが、今はlodeあるんで楽ですね。
でもlodeだけでは環境できないので、以下も参照して必要なものも入れないといけません。
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起動して、「コードなしで続行」選んで、ツール > ツールと機能の取得 を開きまして。
ついで「個別のコンポーネント」で、「.NET Framework 4.8 SDK」および「C++ 2019 再頒布可能パッケージ MSM*2」の二つを選んで。
これで「ダウンロードしながら変更する」して「変更」を押下するとよい……はず。
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が必要なパッケージともどもインストールされます。
おまけ:CygwinをWindows Terminalで使えるように
これで使えるようになったんですがminttyが気に入らんので(?)、 WSLでも使ってるWindows Terminalを使えるようにしました。
手順はQiitaの記事:
のとおりですけど、chere
入れるための setup-x86_64.exe
は c:\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ファイルというダミーウィルスを突っ込んで検知するっぽい、かしこい。