WrapDBへの新規プロジェクト追加
動作原理
新しいラップは、動作するサブプロジェクトとしてwrapdbリポジトリに提出する必要があります。
WrapDBには、通常のラップとMesonビルド定義パッチ付きのラップの2つのタイプがあります。
Mesonビルド定義パッチ付きのラップは、Debianとほぼ同じように動作します。変更されていない上流のソースパッケージを取得し、パッチとして新しいビルドシステムを追加します。これらのビルドシステムは、subprojects/packagefiles/のサブディレクトリとして保存されます。ビルド定義ファイルのみが含まれています。上流ソースに対するオーバーレイと考えることもできます。
Mesonビルド定義パッチのないラップには、プロジェクトの取得方法を記述するラップメタデータのみが含まれています。
新しいリリースがwrapdbにプッシュされるたびに、バージョン番号が増加した新しいタグが生成され、wrapdb APIリストに新しいリリースが追加されます。古いリリースはすべて変更されません。新しいコミットは常にGitHubのマージリクエストを通じて行われ、提出者以外の誰かによってレビューされる必要があります。
ソースリリースのサブディレクトリは、ラップを含むGitリポジトリに含めないでください。それはサービスによって自動的に追加されます。元のtarballからのソースコードもラップリポジトリにコミットしないでください。
ラップ名の選択
ラップされたサブプロジェクトは、外部依存関係とほぼ同じように使用されます。したがって、上流プロジェクトと同じ名前にする必要があります。
注意:ラップ名は、正規表現[a-z0-9._]+
に完全に一致する必要があります。
プロジェクトがpkg-configファイルを提供する場合、ラップ名はpkg-config名と同じにする必要があります。通常はプロジェクト名と同じです(例:libpng
)。ただし、場合によっては少し異なる場合があります。例として、liboggプロジェクトのpkg-config名はlibogg
ではなくogg
であるため、ラップ名は単純にogg
になります。
pkg-configファイルがない場合は、プロジェクトで使用/推奨されている名前(小文字のみ)を使用してください(Catch2 -> catch2)。
プロジェクト名が一般的すぎるか曖昧な場合(例:benchmark
)、organization-project
という命名形式を使用することを検討してください(例:google-benchmark
)。
新しいラップの寄与方法
プロジェクトがすでにMesonビルドシステムを使用している場合は、project.wrap
ファイルのみを提供する必要があります。そうでない場合は、Mesonビルド定義パッチ(meson.build
ファイルのセット)も提供する必要があります。
ラップの内容の作成
新しいリリースブランチにはproject.wrap
ファイルが必要です。必要に応じて作成してください。
${EDITOR} upstream.wrap
ファイル形式はシンプルです。既存のwrapdbサブプロジェクトのコンテンツを参照してください。チェックサムはSHA-256であり、ほとんどのUnix系オペレーティングシステムでは次のコマンドで計算できます。
sha256sum path/to/libfoo-1.0.0.tar.gz
macOSでは、コマンドは次のとおりです。
shasum -a 256 path/to/libfoo-1.0.0.tar.gz
次に、現在のプロジェクトが提供する依存関係を定義するエントリを追加する必要があります。これは、Mesonの自動依存関係解決機能が動作する上で重要です。これは、upstream.wrap
ファイルの最後にprovide
エントリを追加することで行われます。Oggライブラリを例として使用すると、次のようになります。
[provide]
ogg = ogg_dep
左側のogg
は依存関係名を参照しており、Pkg-Config名と同じにする必要があります。右側のogg_dep
は、依存関係を提供するビルド定義内の変数を指します。最も一般的には、declare_dependency
呼び出しの結果を保持します。その名前の変数が定義されていない場合、Mesonはハードエラーで終了します。詳細については、メインのWrapマニュアルを参照してください。
上流プロジェクトにビルドファイルが含まれていない場合は、ビルドファイルを作成し、プロジェクトが正しくビルドされるまで作業できます。すべてのファイルはsubprojects/packagefiles/
ディレクトリに配置されることに注意してください。
${EDITOR} meson.build meson.options
ローカルに追加されたビルドファイルを上流リリースのtarballに適用するには、wrap-file
セクションに、subprojects/packagefiles/
内のビルドファイルを含むサブディレクトリ名を指定するpatch_directory
プロパティを含める必要があります。これはwrapdbの動作の中心です。wrapdb meson.buildで使用され、リリースが作成されると、このディレクトリのファイルはアーカイブに変換され、patch_url
がwrapファイルに追加されます。
結果に満足したら、ビルドファイルをGitに追加し、README.mdに記載されているようにreleases.jsonを更新し、結果をGitHubにプッシュします。
<verify that your project builds and runs>
git add releases.json subprojects/project.wrap subprojects/packagefiles/project/
git commit -a -m 'Add wrap files for libfoo-1.0.0'
git push -u origin libfoo
次に、GitHubでプルリクエストを作成する必要があります。
パッケージングレビューで変更が必要な場合は、commit
に--amend
引数を使用して、ブランチにコミットが1つだけになるようにします。
${EDITOR} meson.build
git commit -u --amend
git push --force
元のソースへの変更
ラップの目的は、上流プロジェクトへの変更をできるだけ少なくすることです。ほとんどのプロジェクトには、いくつかのMeson定義ファイル以上のものを含めるべきではありません。テンプレートヘッダーファイルなどを追加する必要がある場合があります。これらは最小限に抑える必要があります。
特に、機能に対するパッチがあってはならないことに注意してください。そのような変更はすべて上流に提出する必要があります。必要に応じて、変更を含む独自のGitリポジトリをホストすることもできます。Wrapシステムは、Gitサブプロジェクトをネイティブにサポートしています。
自動検証の通過
提出されたすべてのラップは、自動化された正確性レビューを受け、合格することがマージの条件となります。したがって、問題をより迅速に修正できるように、自分で検証チェックを実行することを強くお勧めします。
次のコマンドを使用して、ラップ自体をテストできます。
meson subprojects purge --confirm
meson setup builddir/ -Dwraps=<project-name>
最初のコマンドは、ラップが最新のpackagefilesから正しく取得されていることを確認するためです。2番目のコマンドはmesonを設定し、有効にするサブプロジェクトのセットを選択します。
GitHubプロジェクトには、プロジェクトを実行し、明らかな間違いについてメタデータをチェックするためのプッシュ時の自動CIが含まれています。PRを送信する前に、フォークから確認できます。
検索結果は以下のとおりです。