商プロジェクトは、マトリックスのアプリケーションを開発するためにQTベースのSDKを生産することを目的としています。 Libquotientは、クライアントアプリケーションを可能にするライブラリです。 Quaternion、Neochat、その他のプロジェクトのバックボーンです。
マトリックスルーム:#Quotient:matrix.orgで商の開発者を見つけることができます。
Project Issue Trackerで問題を提出できます。セキュリティの問題のように見えるものが見つかった場合は、security.mdで指示を使用してください。
プラットフォームに応じて、ライブラリはパッケージ管理システムから取得できます。 Fedora、Debian、Opensuseの最近のリリースにはすでにあります。または、以下に説明するように、ソースからライブラリを構築し、アプリケーションにバンドルすることもできます。
Libquotient(つまり、アプリケーションをビルドまたは実行する)を使用するには、次のことが必要です。
Libquotientでアプリケーションを構築するには、次のことも必要です。
Libquatient自体を構築するための要件は、基本的に同じです。
希望するパッケージマネージャーを使用して、前提条件をインストールするだけです。 QTパッケージのベースが細かくなっている場合は、cmakeを実行してエラーメッセージを確認することをお勧めします。ライブラリは完全に画面外です。ただし、QTCOREとQTNETWORKを除いて、画面上の図面なしでアバターサムネイルを処理するためにQtguiに依存します。
brew install qt qtkeychain libolm openssl@3ランタイムライブラリの最新バージョンを取得するはずです。
$(brew --prefix qt) 、 $(brew --prefix qtkeychain)などをCMAKE_PREFIX_PATH (以下を参照)に追加する必要がある場合があります。
QTプロジェクトの公式インストーラーを使用してQTとOpenSSLをインストールします。また、既に持っていない限り、インストールするコンポーネントのリストにあるCmakeボックスにもチェックマークを付けてください。これにより、ランタイムライブラリと開発ファイルの両方が得られます。これは、Libquatient自体を構築するのにも適しています。このようにする場合、ソースコードからqtkeychainを構築する必要があります。
または、VCPKGを使用して、QT、OpenSSL、およびQTKeyChainをインストールすることもできます。その場合、QT Creatorを取得していません。これは、QTベースのプロジェクトに対処するのに非常に優れたIDEです。ただし、既にVSCODEまたはCLIONを使用している場合は、このルートをお勧めします。また、公式インストーラーのQTクリエーターとVCPKGの残りのQTクリエーターをインストールして、ミックスして一致させることもできます。 QTキーチェーンの構築に使用されるQTバージョンに応じて、公式インストーラーからのQTをVCPKGのQTキーチェーンと混合することは、機能する場合と機能しない場合があります。
コマンドラインから構築する場合:さらなるセクションのコマンドは、 cmakeがPATHにあることを意味します。それ以外の場合は、実際のパスでそれらのコマンドを準備する必要があります。 C:Qt<Qt version><toolchain>binにあるqtenv2.batスクリプトを実行することをお勧めします(qtをC:Qtにインストールしたと仮定します)。このスクリプトは、必要なパスをPATHに追加します。システムの起動でそのスクリプトを実行したくないかもしれませんが、構築する前に環境をセットアップするのが非常に便利です。
C ++ IDEを使用する場合:CMAKEパスと追加オプション(特にCMAKE_PREFIX_PATH )を設定で構成できるはずです。 QT(または他のライブラリ)のパスを明示的にPATHに追加しないことをお勧めします。代わりにCMAKE_PREFIX_PATHを使用して、 PATHを変更しておきます。 IDEがQTクリエーターの場合、QTパスをまったく処理する必要はありません。適切なキットを選択して、構築に直接移動してください。
リボルムも必要です。自分で構築する必要があります。この執筆時点で、VCPKGまたは他の場所からダウンロードできるWindows用のバイナリはありません。ソースコードはhttps://gitlab.matrix.org/matrix-org/olmで入手できます。他の商と同じツールチェーン(Cmake+MSVC、例えば)を使用できます。
Libquotientをゼロから使用してプロジェクトを開始したばかりの場合は、 quotest/CMakeLists.txtプロジェクトにコピーして、プロジェクト名にquotest変更できます。既存のcmakelists.txtが既にある場合は、 find_package(Quotient REQUIRED)の行を適切な場所に挿入する必要があります(Libquotientがあなたのためのハード依存関係ではない場合はfind_package(Quotient) Quotient使用してくださいtarget_link_libraries() 。
動的リンクは、現時点でLinuxでのみテストされており、このプラットフォームでLibquotientとリンクする推奨方法です。静的リンクは、Windows/MacOSのデフォルトです。動的リンクを試してみて、結果をフィードバックしてください。
(非常に基本的な)概要は、それぞれのWikiページにあります。ライブラリのDoxygenドキュメントは、https://quotient-im.github.io/libquotient/にあります。さらに、Quotestのソースコード(Libquotientに付属するテストアプリケーション)を見ると、メッセージの送信、ファイルのアップロード、部屋の状態の設定など、最も一般的なユースケースに役立つ場合があります。
より広範な使用の例とパターンについては、Quaternionのソースコード(Libquotientのリファレンスクライアント)またはNeochatを自由にチェックアウト(および適切な帰属でコピー)してください。
Quotient 0.7.2以来、 _p.hおよび名前空間_implで終わるファイルを除くLibquotientのすべてのヘッダーファイルのシンボルは、公開され、API/ABI安定性保証でカバーされています。具体的には、APIとABIは、すべてのマイナーバージョン(0.7.xリリース)内で逆方向に互換性があり、次のマイナーバージョン(0.8、EG)が互換性を破壊します。 1.0に達すると、このルールはメジャーバージョンに適用され、セマンティックバージョンのルールに合わせます。 *_p.hファイルと名前空間_impl 、これらの保証の対象ではありません。クライアントコードは、これらのファイルを直接含めるべきではなく、これらの場所で定義されているシンボルを使用しないでください。
Linux以外のプラットフォームでは、使用する前に自分でLibquatientを構築する必要があります - これまでのところ誰もパッケージ化しませんでした(貢献を歓迎します!)。また、新しいバージョンやスナップショットが必要な場合は、Linux上にライブラリを構築することもできます。
ソースコードはGitHubにあります。サブモジュールと一緒に特定のコミットまたはタグ(アーカイブをダウンロードするのではなく)をチェックアウトすることを強くお勧めします。別のプロジェクトの一部として図書館でハッキングしたい場合(たとえば、Quaternionで作業しているが、ライブラリコードにいくつかの変更を行う必要がある)、そのプロジェクト(この場合はQuaternion)を再帰的にチェックアウトし、適切なブランチ内でライブラリサブモジュール(また再帰的に)を更新することは理にかなっています。 API互換性の制限に注意してください。たとえば、Quaternionの各バージョンには、Libquotientの特定の分岐( 0.8.x 、 0.9.xなど)が必要になる場合があります。
数字とフルストップのみで構成されるタグ(例えば、 0.7.0 )は、リリースされたバージョンに対応しています。 -betaNまたは-rcNで終わるタグは、それぞれのプレレリースをマークします。プリリースのパッケージ化の場合/場合、主要な-を~ (Tilde)に置き換えることをお勧めします。
Libquotientは、古典的なCmakeベースのプロジェクトです。依存関係が導入されていると仮定すると、プロジェクトのルートディレクトリで発行された次のコマンドは次のようです。
cmake -B build -S . # [-D<cmake-variable>=<value>...], see below
cmake --build build --target all buildでコンパイルされたライブラリを取得します(実行する前に存在することを確認してください)。 Cmakeで動作するC ++ IDEは、最小限の構成の取り組みで同じことを行うことができるはずです。
静的ビルドは、サポートされているすべてのプラットフォームでテストされています。動的ライブラリは、Linuxで推奨されるConfiguratiionです。 MacOSで実行可能である可能性があります。 Windowsでテストされていない(結果を試して報告することを歓迎します)。
先に進む前に、上記のすべての前提条件の開発ライブラリをインストールしたことを再確認してください。 Cmakeは停止し、何かが足りないかどうかを伝えます。
上記の最初のcmake呼び出しは、ビルドを構成します。必要に応じて、cmake変数( -DCMAKE_PREFIX_PATH="path1;path2;..."および-DCMAKE_INSTALL_PREFIX=pathなど)を渡すことができます。 cmakeドキュメント(使用するページの上部にあるCmakeバージョンを選択)は、Cmakeに伴う標準変数について説明しています。それらの上で、商は理解しています:
Quotient_INSTALL_TESTS=<ON/OFF> 、 ON default- installターゲットが呼び出されたときにライブラリファイルと一緒にquotestインストールします。 quotest 、特定のユーザーとして特定の部屋に接続しようとし、メッセージや小さなファイルの送信、編集、ルームタグの設定など、特定のユーザーとして特定の部屋に接続しようとする小さなコマンドラインプログラムquotest --help正しいパラメーターを想定している)を特定します。MATRIX_SPEC_PATHおよびGTAD_PATHこれらの2つの変数は、APIファイルを含むMatrix -DocリポジトリとGTADバイナリを使用してディレクトリを指すために使用されます。これら2つは、OpenAPI表記で作成されたMatrix Client-Server API説明からC ++ファイルを生成するために使用されます。ライブラリを構築する必要がある場合、これは必要ありません。あなたが本当にハッキングに興味があるなら、Convributing.mdとcode_generation.mdのそれぞれのセクションを読んでください。QUOTIENT_FORCE_NAMESPACED_INCLUDES=<ON/OFF> 、default(上記のオプションとはOFF 、上記のオプションとは異なり、クォミエントはここにあることに注意してください) - このオプションをONにすると、 <top-level include prefix>/Quotient/ #include <header.h> #include <Quotient/header.h>するスキップがパスを含めるためにスキップします。デフォルトでは、これは後方互換性のためにOFFに設定されています。最終的にこのデフォルトは変更される可能性があるため、少なくとも-DQUOTIENT_FORCE_NAMESPACED_INCLUDES=1 cmakeの呼び出し(またはIDEの変数を設定)に追加することをお勧めします。cmakeでライブラリをインストールできます。
cmake --build . --target installこれにより、Cmakeパッケージ構成ファイルもインストールされます。これが完了したら、 quotest/CMakeLists.txtを使用して、インストールされているライブラリとQuotestをコンパイルできるはずです。上記のように、 Quotient_INSTALL_TESTS OFFに設定して、他のライブラリとともにquotestテストバイナリのインストールをスキップできます。
cmakeが失敗した場合
CMake Warning at CMakeLists.txt:11 (find_package):
By not providing "FindQt6Widgets.cmake" in CMAKE_MODULE_PATH this project
has asked CMake to find a package configuration file provided by
"Qt6Widgets", but CMake did not find one.
次に、右の-DCMAKE_PREFIX_PATH変数を設定する必要があります。上記を参照してください。
cmake次のようなメッセージで失敗した場合:
CMake Error at /usr/lib64/cmake/Qt6Core/Qt6CoreVersionlessTargets.cmake:37 (message):
Some (but not all) targets in this export set were already defined.
Targets Defined: Qt::Core
Targets not yet defined: Qt::CorePrivate
次に、システムにQT 5とQT 6の両方がある可能性があり、コードは商とは異なるメジャーバージョンのQTを使用します。同じ主要なQTバージョンがLibquotientとCodeの両方で使用されるように、ビルドを構成してください。
LibquotientはQTのロギングカテゴリを使用して、特定の種類のロギングを簡単に切り替えます。実行時にトラブル(バグ、クラッシュ)の場合、 QT_LOGGING_RULES環境変数に以下を追加すると、ロギングを増やすことができます。
quotient.<category>.<level>=<flag>
どこ
<category>は、 main 、 jobs 、 jobs.sync 、ジョブ、 jobs.thumbnail 、ヨブ、 events 、 events.state (「通常の」ルーム状態とアカウントデータの両方をカバーする)、 events.members 、 events.messages 、 events.ephemeral 、イベント、 database 、 network 、 e2ee Quotient/logging_categories_p.h profilerのいずれかです。<level>は、 debug 、 info 、 warningの1つです。<flag>はtrueまたはfalseいずれかです。 2つのドットの間の任意の部分のワイルドカードとして* (アスタリスク)を使用でき、セミコロンはセパレーターに使用されます。後者のステートメントは以前のステートメントをオーバーライドするため、 jobs以外のすべてのデバッグログをオンにしたい場合はQT_LOGGING_RULES="quotient.*.debug=true;quotient.jobs.debug=false"
また、 QT_MESSAGE_PATTERNを設定して、ログを少し有益にすることもできます(https://doc.qt.io/qt-6/qtlogging.html#qsetmessagepatternを参照)。例を挙げると、ライブラリ開発者の1つがQT_MESSAGE_PATTERNに使用するものは次のとおりです。
`%{time h:mm:ss.zzz}|%{category}|%{if-debug}D%{endif}%{if-info}I%{endif}%{if-warning}W%{endif}%{if-critical}C%{endif}%{if-fatal}F%{endif}|%{message}`
(怖い%{if} sは、ログレベルを最初の文字にエンコードするだけです)。
ルーム状態とキャッシュの問題が発生した場合、バイナリCBORからPlantext JSONにキャッシュ形式を切り替えると便利です。そのためには、クライアントの構成ファイル/レジストリにjsonにlibQuotient/cache_typeキーを設定します(これまでに認識されているキーであるため、Libquotientグループを作成する必要があるかもしれません)。これにより、キャッシュの節約と読み込みの動作がわずかに遅くなりますが、キャッシュはテキストJSONファイル(非常に長く、インデントなしで、JSONフォーマット機能を備えた優れたJSONビューアーまたはテキストエディターを準備します)。