Windows向けのQGIS 3.40ポータブル版のクロスビルド

## 概要
- Linux上のクロスビルドがPR時にCI/CDのフローで実行されています
- ビルドのディストロはFedora
- コンパイル専用の環境をVirtual BoxのゲストOS上に構築します

## 大まかなフロー
```mermaid
flowchart TB
  node_1["VirtualBoxをインストール"]
  node_2["Fedora 39 WorkstationをゲストOSに設定"]
  node_3["ホストOSとゲストOSで共有フォルダを設定"]
  node_4(["ホストOSのWindowsでQGISをクローン"])
  node_5["ゲストOSでqgis.exeをビルド"]
  node_6["QGISをtar.gzで圧縮"]
  node_7["共有フォルダーにQGISをコピー"]
  node_8(["共有フォルダにコードをコピー"])
  node_9(["ホストOSでQGISを起動"])
  node_1 --> node_2
  node_2 --> node_3
  node_3 --> node_5
  node_5 --> node_6
  node_6 --> node_7
  node_4 --> node_8
  node_8 --> node_3
  node_7 --> node_9
```

## QGISのビルド結果
![スクリーンショット 2024-12-17 20.50.18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2772737/8794fb54-09f7-a7cc-97b3-b4b0410b69a3.png)
![スクリーンショット 2024-12-17 20.49.41.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2772737/ee88dbfe-7096-953e-f200-c7d6830c6990.png)

- ソースコードを編集しビルドすることでカスタムされたQGISを構築可能です
- ポータブル版のQGISがビルドされるので任意のディレクトリ、USBから実行可能です
- GRASS GISやSaga GISは付属しません

## 環境構築(初回のみ)
1. [VirtualBox](https://www.oracle.com/jp/virtualization/technologies/vm/downloads/virtualbox-downloads.html)をダウンロードしてWindowsにインストールをします
1. [Fedora39 WorkStationのLive DVD](https://ftp.yz.yamagata-u.ac.jp/pub/linux/fedora-projects/fedora/linux/releases/39/Workstation/x86_64/iso/Fedora-Workstation-Live-x86_64-39-1.5.iso)をダウンロードします
1. VirtualBoxを起動し仮想マシン(ゲストOS)を新規作成します
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2772737/921d6e06-3433-586d-1b39-1596b49ad636.png)
1. 仮想マシンの作成ウィザードを進めます
    1. 名前を設定 タイプ:Linux バージョン:Fedora(64-bit)に設定します
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2772737/4c7c696a-5531-1ce9-1646-bd6398a2fa27.png)
    1. メモリーサイズは8GB以上を推奨します
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2772737/c132c57f-e98e-9445-881f-cd9c987287c7.png)
    1. ハードディスクはデフォルトで作成します
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2772737/a825ad6d-adbb-5d0f-c653-53056ca4bbb1.png)
    1. ハードディスクのファイルタイプはデフォルトで次へ
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2772737/48ea9979-df4e-c5ac-b8bc-32b1210cf6b2.png)
    1. 物理ハードディスクにあるストレージはデフォルトで次へ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2772737/7b487d4e-9698-70ba-a407-b77440889a07.png)
    1. 上限のハードディスクファイルサイズは余裕をもって100GB程度を設定
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2772737/744ea600-f7ef-ef0b-9b78-a77dd2a9a22a.png)
1. 仮想マシンの設定を行います
    1. ビルド処理の速度向上のためプロセッサー数は4以上に設定します
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2772737/8869fa0e-3cce-2ca3-98f8-0af8cb94001e.png)
    1. ゲストOSの操作性向上のためビデオメモリーは128MBに設定します
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2772737/48e97c47-91ef-5d42-f53d-b147b19c6276.png)
    1. Fedora 39 WorkStationのライブDVDのisoをIDEに追加することでFedoraのインストールが可能になります
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2772737/b15bedd8-07a6-385f-07b6-ca304a2ec5d4.png)
1. 仮想マシンを起動するとFedoraのインストーラーが立ち上がる特筆すべきことはないので割愛します
1. 共有フォルダの設定
    1. フォルダーのパス:Windows(ホストOS)のQGISのソースやビルドされたQGISを置くフォルダを指定します
    2. フォルダー名:Fedora(ゲストOS)で表示されるフォルダ名
    3. 自動マウントにチェックします
    4. **共有フォルダでビルドを行わないこと、ファイルシステムが異なるため失敗します**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2772737/01e033db-c946-594a-3ade-a8aec7532a58.png)
4. VirtualBox Guest AdditionsのCDイメージを挿入します
4. VirtualBox Guest AdditionsをFedora(ゲストOS)にインストールします
    1. `cd  /run/media/<User>/VBox_GAs_<version>/`
    4. `sudo autorun.sh`
    4. 共有フォルダとクリップボードの共有が有効になります
2. **ここまででスナップショットを保存することを推奨します**
    1. スナップショットとはゲストOSの復元ポイントを作成するVirtualBoxの機能です
    2. これ以降の手順で失敗してもロールバック可能になります
10. 共有フォルダのユーザーグループを変更`sudo usermod --append --groups vboxsf $USER`
11. Fedora(ゲストOS)を再起動します
12. 共有フォルダーのQGISソースコードをゲストOSの~/以下の任意のディレクトリにコピーします
13. Fedora(ゲストOS)で端末を開きます
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2772737/a1855629-2b43-c867-5cea-7bac040ba995.png)
14. `cd ~/QGIS/ms-windows/mingw` Fedora(ゲストOS)でコマンドを実行します
    1. ビルドするディレクトリに移動します
15. `sudo dnf -y update` Fedora(ゲストOS)でコマンドを実行
    1. パッケージをアップデートします
16. `sudo sh mingwdeps.sh` Fedora(ゲストOS)でコマンドを実行
    1. Fedora 39 WorkStationのビルドに必要なパッケージをインストールします
    2. パッケージの変更が必要なのでsudoで実行する必要があります

### QGISのビルド(2回目以降はここから)
1. `cd ~/QGIS/ms-windows/mingw` Fedora(ゲストOS)でコマンドを実行します
2. build.shの以下のオプションをONからOFF
    1. QGIS公式ランディングページ関係のオプションなのでONからOFFにします
    
    ```
    -DWITH_SERVER=OFF 
    -DWITH_SERVER_LANDINGPAGE_WEBAPP=OFF
    ```
    
3. `sh build.sh x86_64 nodebug 4` Fedora(ゲストOS)でコマンドを実行します
    1. ４コアで64bitの**リリースビルドが始まります**
4. `tar cfzh qgis.tar.gz ~/QGIS/build_mingw64/*` Fedora(ゲストOS)でコマンドを実行します
    1. シンボリックリンクを辿らせて圧縮します
5. 共有フォルダに`qgis.tar.gz` をコピーします
6. Windows(ホストOS)で`qgis.tar.gz` を解凍します
7. build_mingw64\dist\usr\x86_64-w64-mingw32\sys-root\mingw\bin\qgis.exeをクリックするとQGISが起動可能になっています