Mesonファイル書き換え

バージョン0.50.0以降、Mesonはコマンドラインから`meson.build`ファイルに基本的な変更を加える機能を備えています。現在サポートされている操作は次のとおりです。

  • ビルドターゲットの場合
    • ソースファイルの追加/削除
    • ターゲットの追加/削除
    • 選択したキーワード引数の変更
    • JSON情報の出力
  • 依存関係の場合
    • 選択したキーワード引数の変更
  • `project`関数の場合
    • 選択したキーワード引数の変更
    • デフォルトオプションリストの変更

書き換えツールには、通常のコマンドラインインターフェースと「スクリプトモード」の両方があります。 通常のCLIは、主に日常使用向けに設計されています。 一方、「スクリプトモード」は、外部プログラム(IDE、GUIフロントエンドなど)で使用することを目的としています。

書き換えツール自体は安定していると見なされていますが、ユーザーインターフェースと「スクリプトモード」APIは将来変更される可能性があります。 これらの変更により、以前のリリースとの後方互換性が失われる可能性もあります。

APIの改善に関するご提案も歓迎いたします。

書き換えツールの使用

すべての書き換え関数は、`meson rewrite`を介してアクセスされます。 Meson書き換えツールは、プロジェクトのルートディレクトリ内で実行されることを前提としています。 そうでない場合は、`--sourcedir`を使用して実際のプロジェクトソースディレクトリを指定してください。

ソースの追加と削除

最も一般的な操作は、ビルドターゲットへのソースファイルの追加と削除です。これは以下で簡単に行えます。

meson rewrite target <target name/id> {add/rm} [list of sources]

たとえば、次の例を考えます。

src = ['main.cpp', 'fileA.cpp']

exe1 = executable('testExe', src)

ソース`fileB.cpp`は、以下で追加できます。

meson rewrite target testExe add fileB.cpp

このコマンドを実行した後、新しい`meson.build`は次のようになります。

src = ['main.cpp', 'fileA.cpp', 'fileB.cpp']

exe1 = executable('testExe', src)

この場合、ターゲット名に`exe1`を使用することもできます。これは、書き換えツールが代入と一意のMeson IDも検索するためです。これはイントロスペクションで取得できます。 同じ名前のターゲットが複数ある場合、Mesonは何もしないでエラーメッセージを出力します。

詳細については、書き換えターゲットコマンドのヘルプ出力をご覧ください。

`extra_files`の追加と削除

0.61.0以降

ターゲットからソースファイルを追加および削除するのと同じ方法で、ターゲットの`extra_files`リストを変更できます。

meson rewrite target <target name/id> {add_extra_files/rm_extra_files} [list of extra files]

プロジェクトバージョンの設定

書き換えツールを使用して、特定の関数のキーワード引数を設定することもできます。 キーワード引数を設定または削除するための一般的なコマンドは次のとおりです。

meson rewrite kwargs {set/delete} <function type> <function ID> <key1> <value1> <key2> <value2> ...

たとえば、プロジェクトバージョンを設定するには、次のコマンドを使用します。

meson rewrite kwargs set project / version 1.0.0

現在、以下の関数タイプのみがサポートされています。

  • dependency
  • target (任意のビルドターゲット、関数IDはターゲット名/ IDです)
  • project (`project()`は一度しか呼び出すことができないため、関数IDは`/`でなければなりません)

詳細については、`rewrite kwargs`コマンドのヘルプ出力をご覧ください。

注:msys bashは`/`をパスに展開する場合があります。 `//`を渡すとmsys bashによって`/`に変換されますが、使用法をシェルに依存しないようにするために、書き換えコマンドでは関数IDとして`//`も許可されているため、msys bashと他のシェルの両方で機能します。

プロジェクトのデフォルトオプションの設定

デフォルトオプションを設定および削除するには、次のコマンドを使用します。

meson rewrite default-options {set/delete} <opt1> <value1> <opt2> <value2> ...

制限事項

Mesonファイルを書き換えても、変更された関数のインデントが維持されることは保証されません。 また、変更されたステートメント内のコメントは削除されます。 さらに、すべてのソースファイルはアルファベット順にソートされます。

たとえば、次のコードで`e.c`をsrcsに追加するとします。

# Important comment

srcs = [
'a.c', 'c.c', 'f.c',
# something important about b
       'b.c', 'd.c', 'g.c'
]

# COMMENT

次のコードが生成されます。

# Important comment

srcs = [
  'a.c',
  'b.c',
  'c.c',
  'd.c',
  'e.c',
  'f.c',
  'g.c'
]

# COMMENT

「スクリプトモード」の使用

「スクリプトモード」は、柔軟性とAPIの安定性が高いため、サードパーティプログラム向けの推奨APIです。 「スクリプト」はJSON形式で保存され、`meson rewrite command <JSONファイルまたは文字列>`で実行されます。

JSON形式は次のように定義されます。

[
  {
    "type": "function to execute",
    ...
  }, {
    "type": "other function",
    ...
  },
  ...
]

メイン配列の各オブジェクトには、実行する関数を指定する`type`エントリが必要です。

現在、以下の関数がサポートされています。

  • target
  • kwargs
  • default_options

ターゲット変更フォーマット

タイプ`target`のフォーマットは次のように定義されます。

{
  "type": "target",
  "target": "target ID/name/assignment variable",
  "operation": "one of ['src_add', 'src_rm', 'target_rm', 'target_add', 'extra_files_add', 'extra_files_rm', 'info']",
  "sources": ["list", "of", "source", "files", "to", "add, remove"],
  "subdir": "subdir where the new target should be added (only has an effect for operation 'tgt_add')",
  "target_type": "function name of the new target -- same as in the CLI (only has an effect for operation 'tgt_add')"
}

キー`sources`、`subdir`、および`target_type`はオプションです。

kwargs変更フォーマット

タイプ`target`のフォーマットは次のように定義されます。

{
  "type": "kwargs",
  "function": "one of ['dependency', 'target', 'project']",
  "id": "function ID",
  "operation": "one of ['set', 'delete', 'add', 'remove', 'remove_regex', 'info']",
  "kwargs": {
    "key1": "value1",
    "key2": "value2",
    ...
  }
}

デフォルトオプション変更フォーマット

タイプ`default_options`のフォーマットは次のように定義されます。

{
  "type": "default_options",
  "operation": "one of ['set', 'delete']",
  "options": {
    "opt1": "value1",
    "opt2": "value2",
    ...
  }
}

操作`delete`の場合、`options`の値は anything ( `null`を含む)にすることができます

情報の抽出

書き換えツールは、タイプ`target`と`kwargs`に対して操作`info`も提供します。 この操作を使用すると、Mesonは、問題のビルドターゲット/関数kwargsに関する書き換えツールで使用可能なすべての情報を含むJSONダンプをstderrに出力します。

出力形式は現在実験段階であり、将来変更される可能性があります。

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