リリースを作成します。

開発に加え、ほとんどのプロジェクトは定期的なソースリリースを行います。これらはソースコードの単独パッケージです(通常はtarまたはzip形式)。リビジョン制御メタデータは含まれず、ソースコードのみが含まれます。Mesonはmeson distコマンドを使用して、これらを生成する簡単な方法を提供します。

Mesonはこれらを生成する簡単な方法を提供します。1つのコマンドで構成されています(0.52.0以降で使用可能)。

meson dist

または、古いMesonバージョンでninjaバックエンドを使用している場合は、代わりに次のコマンドを使用します。

ninja dist

これにより、meson-distサブディレクトリのビルドツリーでprojectname-version.tar.xzというファイルが作成されます。このアーカイブには、すべてのサブモジュール(再帰的に)を含むリビジョン管理の最新コミットの完全な内容が含まれます。すべてのリビジョン制御メタデータは削除されます。次に、Mesonはこのアーカイブを取り込み、完全なコンパイル+テスト+インストールサイクルを実行して、それが動作することをテストします。これらすべてが渡されると、Mesonはそのアーカイブの隣にSHA-256チェックサムファイルを作成します。

Autotools distとMeson dist

Mesonの動作はAutotoolsとは異なります。Autotools「dist」ターゲットは現在のソースツリーをパッケージ化します。Mesonは最新のリビジョン管理コミットをパッケージ化します。その理由は、開発者が配布されたアーカイブがリビジョン制御のコミット(特にリリース用にタグ付けされたもの)と一致しない偶発的なリリースを実行するのを防ぐためです。

あなたのリリースにサブプロジェクトを含める

meson distコマンドには--include-subprojectsコマンドラインオプションがあります。有効になっている場合、現在のビルドで使用されているすべてのサブプロジェクトのソースツリーも最終的なtarballに含まれます。これは、オフラインでビルドできる自己完結型のtarball(つまり--wrap-mode=nodownload)を配布するのに役立ちます。

--no-testsでビルドとテストをスキップします。

meson distコマンドには、生成されたパッケージのビルドとテストステップをスキップする--no-testsオプションがあります。たとえば、すでに独自のテストを行っているCIで行った場合などに、時間を無駄にしないために使用できます。

--no-testsを使用すると、Mesonに「生成されたパッケージをビルドしてテストしないでください。」と伝えることができます。

gitリポジトリに変更されていない変更が含まれている場合にエラーを上書きするには--allow-dirtyを使用します。

0.62.0以降リポジトリに変更されていない変更が含まれている場合、警告を発行する代わりに、Mesonはユーザーに通知するエラーメッセージを生成し、すぐに終了します。meson dist--allow-dirtyがオプションとして指定されている場合、代わりに警告が発行され、Mesonは通常どおりに進みます。

サブプロジェクトを別々にリリースします。

0.57.0以降meson distコマンドは、メインプロジェクトと同じgitリポジトリ内のサブプロジェクトの配布用tarballを作成できるようになりました。これは、プロジェクトの一部(ライブラリなど)を別々にビルドして配布できる場合に役立ちます。その場合、それらをsubprojects/mysubに移動してそのディレクトリでmeson distを実行すると、メインプロジェクトの残りまたは他のサブプロジェクトではなく、そのサブディレクトリのソースコードのみを含むtarballが作成されるようになりました。

例えば

git clone https://github.com/myproject
cd myproject/subprojects/mysubproject
meson setup builddir
meson dist -C builddir

これにより、builddir/meson-dist/mysubproject-1.0.tar.xztarballが生成されます。

VCSから取得したバージョンを固定します。

バージョン 1.4.0 以降meson dist コマンドでディストリビューション tarball のビルド設定を書き換えることができます。これは、設定が次の例のようにリビジョン制御のメタデータに依存している場合に必要になります。

meson.build:

project('tig', 'c',
  version : run_command('version.sh', 'get-vcs').stdout.strip())

meson.add_dist_script('version.sh', 'set-dist', meson.project_version())

version.sh:

#!/bin/sh

if [ "$1" = "get-vcs" ]; then
  git -C "$MESON_SOURCE_ROOT" describe --always --dirty
elif [ "$1" = "set-dist" ]; then
  $MESONREWRITE --sourcedir="$MESON_PROJECT_DIST_ROOT" kwargs set project / version "$2"
else
  exit 1
fi

検索の結果は次のとおりです。