================================================================
 build-freedv-windows.sh 使い方
 FreeDV (Windows x86_64) を Ubuntu 24.04 でクロスビルドする
================================================================

■ 概要
  FreeDV の GUI (freedv/freedv-gui) を取得・更新し、LLVM-MinGW で
  Windows 用インストーラ (FreeDV-*.exe) を作成して保存する。

  保存先 : ~/FreeDV-Windows-RADE_V2
  ソース : ~/freedv-gui-v3
  既定ブランチ : ms-rade-v2 (RADE V2 を含む開発ブランチ)


■ 事前に必要なもの
  1. LLVM-MinGW (ucrt 版)
       ~/llvm-mingw-20260908-ucrt-ubuntu-22.04-x86_64/
     ※ スクリプト冒頭の LLVM_MINGW_BIN で指定。
        bin ディレクトリまで含めたパスにすること。
  2. 必要なコマンド : git, cmake (3.25 以上), make
  3. NSIS (make package 用。無ければ: sudo apt install nsis)
  4. インターネット接続 (依存ライブラリや RADE の取得に必要)


■ 基本的な使い方
  初回のみ実行権限を付ける:
      chmod +x build-freedv-windows.sh

  ms-rade-v2 ブランチをビルド:
      ./build-freedv-windows.sh

  ブランチを指定してビルド:
      ./build-freedv-windows.sh v3.0-dev


■ 設定の変更 (環境変数)
  FREEDV_REPO_DIR  ソースの場所        (既定: ~/freedv-gui-v3)
  LLVM_MINGW_BIN   LLVM-MinGW の bin   (既定: 上記 20260908 版)
  OUTPUT_DIR       保存先              (既定: ~/FreeDV-Windows-RADE_V2)
  TOOLCHAIN_FILE   ツールチェーン定義  (既定: cross-compile/freedv-mingw-llvm-x86_64.cmake)

  例: 別バージョンの LLVM-MinGW を使う
      LLVM_MINGW_BIN=$HOME/llvm-mingw-古い版/bin ./build-freedv-windows.sh


■ スクリプトの動作
  1. LLVM-MinGW を PATH に追加し、コンパイラの存在を確認
  2. git fetch → 指定ブランチを checkout → git pull --ff-only
  3. build_windows を毎回削除して作り直す
     (古い _deps が残ると、バックエンド等の更新が反映されないため)
  4. cmake → make → make package
  5. FreeDV-*.exe を保存先へコピー
  6. build-info-<コミット>.txt を保存先に記録
     (日時・ブランチ・コミット・コンパイラのバージョン)


■ 生成されるファイル
  ~/FreeDV-Windows-RADE_V2/
      FreeDV-3.0.0-dev-YYYY-MM-DD-xxxxx-windows-x86_64.exe
      build-info-xxxxxxx.txt


■ Windows へのインストール
  1. .exe を Windows にコピー (scp、USB メモリ等)
  2. 古い FreeDV をアンインストール、または別フォルダにインストール
  3. ヘルプ → バージョン情報で、コミットのハッシュを確認


■ 注意点
  - 保存先に過去の .exe は残る。古いものは手動で削除すること。
  - ms-rade-v2 は開発中ブランチ。ビルドが通らない、または動作が
    不安定なことがある。
  - RADE V2 は v3.0-dev 本流にはまだ入っていなかった
    (確認時点)。ms-rade-v2 が v3.0-dev にマージされたら、
    ./build-freedv-windows.sh v3.0-dev に切り替える。
  - LLVM-MinGW は新しすぎると Hamlib のビルドで失敗することがある
    (precise_time.c の assert 未宣言)。その場合は古い版に替える。
  - 毎回 build_windows を作り直すため、ビルドには時間がかかる。


■ トラブルシューティング
  Q. "LLVM-MinGWのbinが見つかりません"
  A. LLVM_MINGW_BIN のパスを確認。bin まで含めること。

  Q. "x86_64-w64-mingw32-clang が PATH にありません"
  A. 上記 bin の中に x86_64-w64-mingw32-clang があるか確認。

  Q. git pull --ff-only が失敗する
  A. ~/freedv-gui-v3 に未コミットの変更がある、または履歴が分岐
     している。git status で状態を確認する。

  Q. "インストーラ(FreeDV-*.exe)が見つかりません"
  A. find build_windows -name '*.exe' で出力場所を確認。
     NSIS が入っていない場合は sudo apt install nsis。

  Q. ビルドエラーの原因を調べたい
  A. ./build-freedv-windows.sh 2>&1 | tee build.log
     grep -n -i -E "error|\*\*\*|fatal" build.log | head -30


■ 更新の目安
  - 新しい機能・修正を試したいとき、スクリプトをもう一度実行するだけ。
  - ブランチ名は GitHub の freedv/freedv-gui の Actions や
    ブランチ一覧で確認できる。
  - CI ビルドと同じコミットか確認するには、FreeDV の
    バージョン情報のハッシュと build-info-*.txt を比べる。

================================================================
