Wireshark を Windows 上でビルドする

# Wireshark を Windows 上でビルドする

Wireshark を Windows 上でビルドする方法を説明します。

Ubuntu の場合は以下で説明しています。
https://qiita.com/m-tmatma/items/f8c0061bcc488f126f46

## 全体的な流れ

1. 必要なソフトを入手してインストールします。
2. git で [wireshark のソース](https://gitlab.com/wireshark/wireshark)を入手します。
3. cmake で visual studio 用のプロジェクトを作成します。
4. visual stduio でビルドします。

## 必要なもの

* [Visual Studio 2019](https://visualstudio.microsoft.com/ja/downloads/) (visual studio 2017 でも可)
* [cmake](https://cmake.org/download/)
* [SoftHSM2](https://github.com/disig/SoftHSM2-for-Windows)
* [Qt](https://www.qt.io/download-qt-installer)
* [chocolatey](https://chocolatey.org/) (winflexbison のインストールに使用)
* [winflexbison](https://chocolatey.org/packages/winflexbison)
* [python](https://www.python.org/downloads/windows/)
* [perl](https://www.perl.org/get.html)

## 必要なファイルの入手およびインストール

### Visual Studio 2019

https://visualstudio.microsoft.com/ja/downloads/ からインストーラをダウンロードできます。
最初にインストールするときに再起動を求められます。

`C++ によるデスクトップ開発` にチェックを入れてインストールします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/500246/eb9ca90c-c515-bc5c-242e-975a72ca5290.png)

### cmake

https://cmake.org/download/ からダウンロードしてインストールします。

### SoftHSM2 

https://github.com/disig/SoftHSM2-for-Windows/releases/download/v2.5.0/SoftHSM2-2.5.0.msi からダウンロードして管理者用のコマンドプロンプトで以下を実行してインストールします。

```
msiexec /qn /i SoftHSM2-2.5.0.msi
```

### Qt 

https://qiita.com/m-tmatma/items/71941c3aa43c83cbebfc により Qt をインストールします。

### chocolatey

https://qiita.com/m-tmatma/items/0ea55b972a010806af8b により chocolatey をインストールします。

### Perl

[perl](https://www.perl.org/get.html) によると Windows 向けのバイナリパッケージとして

* [ActivePerl](https://www.activestate.com/products/perl/downloads/)
* [Strawberry Perl](http://strawberryperl.com/) 

があります。

[ActivePerl](https://www.activestate.com/products/perl/downloads/) は登録を要求されてめんどくさいので、ここでは [Strawberry Perl](http://strawberryperl.com/) をダウンロードしてインストールします。

### Python3

https://www.python.org/downloads/windows/ から `Windows x86-64 executable installer` をダウンロードしてインストールします。Python 3.x 系のバージョンをインストールします。


## git で [wireshark のソース](https://gitlab.com/wireshark/wireshark)を入手

以下のようにして wireshark のソースコードを入手します。

```
git clone https://gitlab.com/wireshark/wireshark.git
```

## cmake でプロジェクトを作成

### visual studio 2019 の場合

以下のようなバッチファイルで cmake を使ってプロジェクトを作成します。

```
set SOURCEDIR=%~dp0wireshark
set OUTDIR=%~dp0build2019
set PLATFORM=x64
set QT5_BASE_DIR=C:\Qt\5.15.0\msvc2019_64
set WIRESHARK_BASE_DIR=%~dp0wireshark-libs

cd /d %SOURCEDIR%

cmake -E time cmake -G "Visual Studio 16 2019" -S %SOURCEDIR% -B %OUTDIR%
cmake               -G "Visual Studio 16 2019" -S %SOURCEDIR% -B %OUTDIR%

cd /d %~dp0
```

* `PLATFORM` の環境変数を定義しないとエラーになります。
* `SOURCEDIR` の環境変数が git で clone した wireshark のソースツリーのトップフォルダになるようにします。
* `OUTDIR` の環境変数は cmake で作成するプロジェクトの生成先フォルダを示すようにします。このフォルダは事前に作成する必要はありません。

### visual studio 2017 の場合 (参考)

visual studio 2017 の場合 `-G` に `"Visual Studio 15 2017 Win64"` を指定します。

```
set SOURCEDIR=%~dp0wireshark
set OUTDIR=%~dp0build2017
set PLATFORM=x64
set QT5_BASE_DIR=C:\Qt\5.15.0\msvc2019_64
set WIRESHARK_BASE_DIR=%~dp0wireshark-libs

cd /d %SOURCEDIR%

cmake -E time cmake -G "Visual Studio 15 2017 Win64" -S %SOURCEDIR% -B %OUTDIR%
cmake               -G "Visual Studio 15 2017 Win64" -S %SOURCEDIR% -B %OUTDIR%

cd /d %~dp0
```

* `-G` での指定に `Win64` を含みますが、`PLATFORM` での指定は必要です。
* Qt のライブラリは visual studio 2017 用があるかは未確認。ここでは visual studio 2019 用を指定しています。

## ビルド

### visual studio を使う場合

`OUTDIR` の環境変数で指定したフォルダに `Wireshark.sln` が作成されているのでダブルクリックして開いて、ビルドします。

### cmake を使う場合

cmake でのプロジェクト生成先と `--build` を指定してビルドします。
ここでは `OUTDIR` の環境変数が有効な前提でそのフォルダを指定しています。

```
cmake --build %OUTDIR%
```