<!-- vim:set ft=markdown: -->

ビルド(VisualStudio)
----------------------------------------
0. Visual Studio Express 2015/2017 for Desktop または2022までのVisual Studio Communityのどれかをインストールする

1. "Document/EDCB_ALL.VS2015.sln"を開き、ツールバーを"Release/Win32"(x64ビルド時は"Release/x64")にしてビルド→ソリューションのビルド

2. （EpgTimerNWが必要な場合のみ）生成された"EpgTimer.exe"を"EpgTimerNW.exe"というファイル名でコピー

3. （lua52.dllが必要な場合のみ） https://github.com/xtne6f/lua/tree/v5.2-luabinaries をzipでダウンロード→展開して"lua52.sln"をビルド

4. （zlib52.dllが必要な場合のみ） https://github.com/xtne6f/lua-zlib/tree/v0.5-lua52 をzipでダウンロード→展開して"zlib52.sln"をビルド

（注意）
- ツールバーのソリューション構成を"Debug"(デバッグモード)にしてビルドすると
  非常にパフォーマンスの悪い（高負荷な）バイナリができるので注意する
- Windows SDKのエラーが出る場合は、プロジェクト→ソリューションの再ターゲット
  で切り替える。ビルド可能なバージョンなら何でもいい
- WindowsXPで実行可能なファイルを作りたいときは、EpgTimerを除く全プロジェクトの
  構成プロパティ→プラットフォームツールセットを"v140_xp"などに切り替える必要がある
  （ソリューションエクスプローラ―上でCtrl+マウス選択を駆使すればまとめて切り替えられる）
- SSE2非対応CPUで実行可能なファイルを作りたいときは、拡張命令セットを"拡張命令なし(/arch:IA32)"に切り替える



ビルド(MSYS2/Mingw-w64)
----------------------------------------
※VisualStudioのインストールが面倒な場合お勧め

0. [MSYS2](https://www.msys2.org/) の `msys2-x86_64-日付.exe`(64bitOS用) をインストール  
   上記サイトに従って`pacman -Syu` →`pacman -Su`でパッケージをアップデート  
   スタートメニューの"MSYS2 MINGW64"(32bitビルド時はMINGW32)を開き、起動した黒窓で以下を実行してmakeとgccをインストール
   ```shell
   pacman -S make mingw-w64-x86_64-gcc
   pacman -S make mingw-w64-i686-gcc # 32bitビルド時
   ```

1. つづけて以下を実行（この文書が"C:/EDCB/Document"にあると仮定）
   ```shell
   cd /c/EDCB/Document/MinGW
   make
   ```

2. （lua52.dllが必要な場合のみ） https://github.com/xtne6f/lua/tree/v5.2-luabinaries をzipでダウンロード→展開して（"C:/lua-5.2-luabinaries"と仮定）
   ```shell
   cd /c/lua-5.2-luabinaries
   make lua52.dll
   ```

3. （zlib52.dllが必要な場合のみ） https://github.com/xtne6f/lua-zlib/tree/v0.5-lua52 をzipでダウンロード→展開して（"C:/lua-zlib-0.5-lua52"と仮定）
   ```shell
   cd /c/lua-zlib-0.5-lua52
   make zlib52.dll
   ```

（注意）
- lua52.dllは https://sourceforge.net/projects/luabinaries/ からダウンロードしたものでもよい
  - EpgTimerSrv/liblua52-mingw-lazy-{i686|x86_64}.a は lua-5.2.4_Win{32|64}_dllw6_lib.zip から以下を実行して作成したインポートライブラリ
    ```shell
    dlltool -t zz -D lua52.dll -d lua52.def -y liblua52.a
    ```
- EpgTimerAdminProxy.exe、asyncbuf.exe、relayread.exeを除く実行時はlibwinpthread-1.dllも必要（おそらくlibwinpthreadの仕様で
  スタティックリンクだとハンドルリークするため）。EDCBではEpgTimerSrv.exeのフォルダ、TVTestではTVTest.exeのフォルダに置く
- EpgDataCap_Bon.exeについては、使用するBonDriverに特別な対応がされていない限り、VC++でビルドされたIBonCast.dllが必要
- EpgTimer.exeについては[その他](#その他)を参照



ビルド(Mingw-w64)
----------------------------------------
※ビルド環境が最もコンパクト

0. https://github.com/niXman/mingw-builds-binaries/releases の「Release of 13.1.0-rt_v11-rev1」（上位バージョンがあればそれでもOK）
   のリストから i686-13.1.0-release-win32-dwarf-msvcrt-rt_v11-rev1.7z(x86ビルド用) または
   x86_64-13.1.0-release-win32-seh-msvcrt-rt_v11-rev1.7z(x64ビルド用) の7z圧縮ファイルをダウンロードしてどこかに展開  
   （以下、"C:/mingw32"または"C:/mingw64"に展開したと仮定）

1. RunMake.batを実行、"Specify make options :"のプロンプトで何も入力せずEnterキーを押す（クリーンしたいときはcleanと入力）

2. （lua52.dllが必要な場合のみ） https://github.com/xtne6f/lua/tree/v5.2-luabinaries をzipでダウンロード→展開してRunMake.batを実行  
   "Specify make options :"のプロンプトでlua52.dllと入力してEnterキーを押す

3. （zlib52.dllが必要な場合のみ） https://github.com/xtne6f/lua-zlib/tree/v0.5-lua52 をzipでダウンロード→展開してRunMake.batを実行  
   "Specify make options :"のプロンプトでzlib52.dllと入力してEnterキーを押す

（注意）
- libwinpthread-1.dllは不要。ほかの注意事項は「ビルド(MSYS2/Mingw-w64)」と同様
- 使用するMingw-w64は https://sourceforge.net/projects/mingw-w64/files/ でも可だが、更新が止まってバージョンが古いのでお勧めしない
- "Specify make options :"のプロンプトでプロジェクト名に.allを付けたもの(EpgTimerSrv.allなど)を入力すれば個別にビルドが可能



ビルド(VisualStudio2010)
----------------------------------------
※VisualStudio2010の延長サポートが終了したため、内容を削除した。必要なら2020年以前のコミットを参照



その他
----------------------------------------
- 一部のマクロを定義することでビルドをカスタマイズできる。以下主なもの
  - `EDCB_RC_DIALOG_NO_FONT` (Common/CommonResource.h)
  - `ARIB8CHAR_USE_UNICODE` (EpgDataCap3/ARIB8CharDecode.cpp)
  - `EPGDB_STD_WREGEX` (EpgTimerSrv/EpgDBManager.h)

  ソースコードを編集するかプロジェクトプロパティのプリプロセッサ定義に加える

- EpgTimer.exeをビルドするだけならVisualStudioは不要(参考:2ch_EDCB/52/224)。
  必要なら.NET Framework v4.0以降をインストールして、EpgTimerフォルダでコマンドプロンプトを開いて以下を実行（またはx86build.batを実行）
  ```batchfile
  C:\Windows\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe EpgTimer.sln /p:Configuration=Release /p:Platform=x86
  ```
  放置してもたぶん問題ないが、MSB3644の警告がでる場合は"EpgTimer/EpgTimer/EpgTimer.csproj"をメモ帳で開き
  ```
  <TargetFrameworkVersion>v4.5</TargetFrameworkVersion>
  ```
  となっている部分をインストールされている.NETのバージョンに変更するか、v4.5のTargeting Packをインストールする

- gitコマンドのある環境では、versionhashgen.batを実行すればバージョン情報にコミットハッシュを埋め込むことができる。
  versionhash.shはMSYS2などのシェル環境用

- プラットフォームツールセット:LLVM-vs2014( https://releases.llvm.org/ , ver.7.0.0以降はMarketplaceに移動の模様)に対応している
