以下はwebcfaceをソースからビルドする場合の説明です。(webcfaceをインストールした場合は不要です。)
- Note
- webcface ver1 をソースからビルドしたい場合は、v1 ブランチのREADMEを参照してください。
Server & Library
Requirements
- C++17に対応したコンパイラと、Meson(>=1.3.0)、Ninja が必要です
- ver1.11まではC++20が必要でしたが、ver2からC++17に移行しました
- インストール済みの依存ライブラリを使用するためには CMake や pkgcong (pkg-config) も必要になります
- Linuxはgcc-7以上とclang-7以上、MacはmacOS13(Ventura)以上、Visual Studioは2019以上でビルドできることを確認しています。 それ以前のバージョンでも動くかもしれません。
- MinGWでもビルドできます。MSYS2のUCRT64環境でテストしていますがMINGW64やCLANG64環境でもビルドできると思います。
- CygwinやMSYS2のMSYS環境ではasioがビルドできない(chriskohlhoff/asio#518)ため、現状ではサーバー機能を除いてクライアントのみビルドすることができます。
- asioはCygwin32bitでビルドできると主張しているが、32bitでもなぜかビルドできない
がissueを建てるのはめんどくさい
- 仮にビルドできたとしても、curlが使用するCygwinのsocketとasioが使用するWin32のsocketが干渉して動かない気もします
Dependencies
- webcfaceは外部ライブラリとして Asio, CLI11, Crow, curl, libvips, msgpack-cxx, spdlog, UTF8-CPP, GoogleTest(testのみ) OpenCV(exampleのみ), を使用します。
デフォルトではインストールされたものは一切使わず、すべてソースをダウンロードしてビルドします。
- 2.6 システムにインストールされているものがあればデフォルトでそれを探して使用します。
- しかしインストールされていない場合は自動的に必要なソースをダウンロードしてビルドするので、WebCFaceを使うためにこれらのライブラリをすべてインストールする必要はありません。
- オプションでシステムにインストールされているものを探さず常にソースからビルドさせることもできます。 時間はかかりますが、動作テスト済みのバージョンの組み合わせでビルドされるので確実性が上がります。
- これらの依存ライブラリをすべてソースからビルドし、かつWebCFaceがsharedライブラリとしてビルドされる場合は、依存ライブラリはstaticライブラリとしてWebCFace内部に埋め込まれ、シンボルも隠されます。
- そのためビルドしたWebCFaceを他の環境に配布する場合などはシステムにインストールしたライブラリを使用しないほうが良いです。
- libcurlはwebsocket機能を有効にする必要があるため、インストールされているlibcurlが古いもしくはwebsocketが無効になっている場合ビルド前にエラーになります。
- crowはunix_socketの機能が実装されている必要があるため、インストールされているcrowでunix_socketが使えない場合ビルド前にエラーになります。
- 現在はこの機能はリリースされておらず、 na-trium-144/Crow のフォークの 5f5372e のコミットでしかビルドできません。
- OpenCVはインストールされていない場合でもソースからビルドしません。OpenCVを使ったexampleをビルドしたい場合は別途インストールする必要がありますが、example以外では使用しないのでなくても問題ありません。
Ubuntu
sudo apt install build-essential git cmake pkg-config ninja-build
- ubuntu24.04
- ubuntu22.04またはそれ以前ではaptでインストールできるmesonは古いので
sudo apt install python3-pip
pip install meson
# optional:
# sudo apt install libspdlog-dev libasio-dev libvips-dev
# sudo apt install libcli11-dev # (only on 22.04 or later)
# sudo apt install libmsgpack-cxx-dev # (only on 24.04 or later)
Homebrew (MacOS, Linux)
brew install cmake meson ninja
# optional:
# brew install msgpack-cxx spdlog asio cli11 utf8cpp vips curl
Visual Studio
- Visual Studio 2019 または 2022 をインストールしてください。
- ImageMagickをソースからビルドするために Visual C++ ATL と MFC のコンポーネントも必要になります。
- 2017でもビルドできるかもしれません(未確認)
- MesonとNinjaをインストールしてください。
- Visual Studio の Developer Command Prompt からmesonコマンドを起動してください。
MSYS2 MinGW
pacman -S pactoys
pacboy -S git make gcc:p cmake:p ninja:p meson:p
# optional:
# pacboy -S msgpack-cxx:p spdlog:p asio:p cli11:p utf8cpp:p vips:p
MSYS2 MSYS
pacman -S git make gcc cmake ninja meson
Cygwin
gcc-core, gcc-g++, cmake, make, meson, pkg-config, ninja をインストールしてください
Build
git clone https://github.com/na-trium-144/webcface.git
cd webcface
meson setup build
- Visual Studio の場合
--backend vs
を指定すると Visual Studio のプロジェクトファイルを生成します
- 2.6 buildtypeはデフォルトでdebugです。変更するには
--buildtype=release
または --buildtype=debug
を指定してください
- staticライブラリをビルドするには
-Ddefault_library=static
を指定してください
default_library=both
は現在非対応です
- 2.6 それぞれの依存ライブラリはまずシステムにインストールされているものを探し、見つからなければsubprojectにフォールバックします。
- ただしlibcurlやCrowはインストールされているものが使用できない場合エラーになるため、その場合は
--force-fallback-for=libcurl,Crow
などとして除外する必要があります。
-Dwrap_mode=forcefallback
とするとインストールされたものを探さずすべてソースビルドします。
- インストールされているのに見つからない場合は環境変数の
PKG_CONFIG_PATH
か、引数で -Dpkg_config_path
や -Dcmake_prefix_path
などを設定してください
cpp_std
はc++17以上が必要です。またcygwinではgnu++17が必要です。 (WebCFaceがsubprojectでない場合デフォルトはgnu++17,c++17)
warning_level
は3以下であればビルドできるはずです (WebCFaceがsubprojectでない場合デフォルトで3)。
warning_level=everything
でビルドできるかは未確認です。
-Dserver=disabled
でserverのビルドをオフ、 enabled
でオンにできます (デフォルト(auto)はWebCFaceがsubprojectでない and cygwinでない 場合のみenabledになります)
-Dexamples=disabled
でexampleのビルドをオフ、 enabled
でオンにできます (デフォルト(auto)はWebCFaceがsubprojectでない場合のみenabledになります)
-Dcv_examples=disabled
にするとexamplesのうちOpenCVを使うもののみをオフにすることもできます
-Dtests=disabled
でexampleのビルドをオフ、 enabled
でオンにできます (デフォルト(auto)はWebCFaceがsubprojectでない場合のみenabledになります)
- テストが通らない場合テスト中の通信の待機時間を
-Dtest_wait=100
などと伸ばすとうまく行く場合があります(デフォルト=10(ms))
- インストール先はデフォルトで /usr/local ですが、
--prefix=~/.webcface
などと指定すると変更することができます
-Dversion_suffix
でバージョン表記を変更できます
- 例えばバージョンが1.2.0のとき
-Dversion_suffix=git
なら git describe --tags
コマンドを使用して取得した文字列 (1.2.0-x-gxxxxxxx) になります(未指定の場合のデフォルト)
git
以外の任意の文字列の場合 -Dversion_suffix=hoge
で 1.2.0-hoge になります
-Dversion_suffix=
で 1.2.0 だけになります
- デフォルトでは最新のWebUIがbuildディレクトリにダウンロードされます。
-Ddownload_webui=enabled
とするとダウンロードできなかった場合エラーになり、 disabled
にするとダウンロードしません。
setupが成功したら
でビルドします。
meson test -C build --suite webcface
でテストを実行できます。
meson install -C build --skip-subprojects
でsetup時に指定したディレクトリにインストールできます。 (staticライブラリの場合は --skip-subprojects
を使用せず、依存ライブラリもインストールした方がいいかも)
WebUI
デフォルトではビルド済みのものが meson setup 時にダウンロードされますが、 -Ddownload_webui=disabled
を指定した場合はダウンロードしません。 その場合は webuiのReleases からビルド済みのtar.gzのアーカイブをダウンロードしてください。
インストールする場合は (webcfaceのインストール場所)/share/webcface/dist として展開してください。
installせずに実行する場合は webcface-server のバイナリと同じディレクトリか、その1, 2, 3階層上のどこかにdistディレクトリを配置してください。
Ubuntuの場合はwebuiのReleasesにあるdebパッケージで、またhomebrewでは webcface-webui
パッケージとしてWebUIだけを単体でインストールすることもできます。
または自分でビルドすることも可能です。(node.jsが必要) webcface-webui のREADMEを参照してください。
tools
https://github.com/na-trium-144/webcface-tools.git をcloneしてビルド、インストールします。 WebCFaceライブラリのビルドと同様、Mesonを使って
meson setup build
meson compile -Cbuild
meson install -C build --skip-subprojects
のようにビルド、インストールできます。
toolsのビルド時にWebCFaceライブラリが見つからないとなる場合は 環境変数PKG_CONFIG_PATH
(またはmesonの引数-Dpkg_config_path
)に (webcfaceのパス)/lib/pkgconfig を追加するか、 環境変数PATH
に (webcfaceのパス)/bin を追加するか、 mesonの引数-Dcmake_prefix_path
にwebcfaceのパスを追加するなどすればビルドできるはずです。
webcface-toolsは外部ライブラリとして spdlog, cli11, tiny-process-library, toml++ を使用します。 システムにインストールされてなければ自動的にソースからビルドします。