「Meson パッケージガイドライン」の版間の差分

提供: ArchWiki
ナビゲーションに移動 検索に移動
(英語版から転載)
 
(トラブルシューティングを翻訳して追加)
 
(同じ利用者による、間の15版が非表示)
4行目: 4行目:
 
{{Package Guidelines}}
 
{{Package Guidelines}}
   
From [https://mesonbuild.com/ Meson's official website]:
+
[https://mesonbuild.com/ Meson 公式サイトより。]
   
  +
:Meson はオープンソースのビルドシステムで、非常に高速で、さらに重要なことに、可能な限りユーザーフレンドリーであることを意図しています。
:Meson is an open source build system meant to be both extremely fast, and, even more importantly, as user friendly as possible.
 
   
  +
Python で書かれた Meson は、マルチプラットフォームのサポート、複数のプログラミング言語のサポート、クロスコンパイルなどを特徴としています。
Written in Python, Meson features multi-platform support, support several programming languages, cross compilation, and more.
 
   
  +
Meson はソフトウェアを直接ビルドするのではなく、バックエンドのビルドシステムをセットアップします。一般的には {{Pkg|ninja}} と共に使われますが、他のビルドシステムを使うこともできます。一般的には、[[GNU#開発ツール|GNU ビルドシステム]] を置き換えるために使われます。
Meson does not build software directly, but rather sets up a back-end build system. While it is commonly used with {{Pkg|ninja}}, other build systems can be used. It is commonly used to replace [[GNU Build System]].
 
   
  +
このドキュメントは [https://mesonbuild.com/ Meson] を使うソフトウェアのための [[PKGBUILD]] を書くための標準ガイドラインを扱っています。
This document covers standards and guidelines on writing [[PKGBUILD]]s for software that uses [https://mesonbuild.com/ Meson].
 
   
== Usage ==
+
== 使い方 ==
   
=== Requirements ===
+
=== 必要条件 ===
   
{{Pkg|meson}} has to be included to the [[PKGBUILD]]'s [[makedepends]] array.
+
{{Pkg|meson}} [[PKGBUILD]] [[PKGBUILD#makedepends|makedepends]] の配列に含まれなければなりません。
   
 
=== build() ===
 
=== build() ===
   
  +
設定とビルドは通常 [[#Meson バイナリを直接使用する|''meson'' バイナリを使い]] ますが、[[#arch-meson ラッパースクリプトの使用|Arch Linux ''arch-meson'' ラッパースクリプトを使う]] ことによっても行うことができます。
Configuring and building is normally done [[#Using meson binary directly|using ''meson'' binary]], but it can also be done by [[#Using arch-meson wrapper script|using Arch Linux's ''arch-meson'' wrapper script]].
 
   
Both ''meson'' and ''arch-meson'' commands include in the usage syntax '''options''', '''source directory''' and '''build directory''':
+
''meson'' ''arch-meson'' コマンドはどちらも '''options''' '''source directory''' '''build directory''' を使用法のシンタックスに含んでいます。
   
* '''options''': must include at least {{ic|--prefix /usr}}, but make sure to check other options with {{ic|meson configure --help}}; also check [[#Setting software-specific build options|software-specific build options]].
+
* '''オプション''': 少なくとも {{ic|--prefix /usr}} を含める必要がありますが、その他のオプションは {{ic|meson configure --help}} で確認してください。また [[#ソフトウェア固有の構築オプションの設定|ソフトウェア固有の構築オプション]] も確認してください。
* '''source directory''' (or "sourcedir"): where the software's source code is stored, e.g. {{ic|.}}, {{ic|$pkgname}} or {{ic|$pkgname-$pkgver}}.
+
* '''ソースディレクトリ''' (または "sourcedir"): ソフトウェアのソースコードが格納されている場所です。例えば {{ic|.}}, {{ic|$pkgname}} または {{ic|$pkgname-$pkgver}} などです。
  +
* 一般的には {{ic|build}} または {{ic|_build}} という名前ですが、任意で指定できます。
* '''build directory''' (or "builddir"): where the build files will stored by Meson; commonly named {{ic|build}} or {{ic|_build}}, but it is discretionary.
 
   
  +
{{Note|ソースディレクトリがビルドディレクトリの前に ''meson'' に渡される場合と、その逆の場合がありますが、Meson はどちらがどちらかを知っていて適切に環境をセットアップするので問題ありません。}}
{{Note|It does not matter if source directory is passed to ''meson'' before the build directory, and vice-versa, as Meson will know which is which and will set up the environment properly.}}
 
   
==== Using meson binary directly ====
+
==== meson バイナリを直接使用する場合 ====
   
  +
Arch Linux のパッケージはファイルを {{ic|/usr/local}} にインストールしてはいけないため、{{ic|1=--prefix=/usr}} は常に ''meson'' のバイナリに渡す必要があります、これは [[Arch パッケージガイドライン#パッケージエチケット]] に従っています。{{ic|1=--buildtype=plain}} 組み込みのオプションは、あなたが何をしているかを知っていれば、他の値を設定することができます。
Notice {{ic|1=--prefix=/usr}} always needs to be passed to ''meson'' binary because Arch Linux packages must not install files to {{ic|/usr/local}}, according [[Arch package guidelines#Package etiquette]]. The {{ic|1=--buildtype=plain}} built-in option can be set to another value, if you know what you are doing.
 
   
  +
==== arch-meson ラッパースクリプトの使用 ====
Example:
 
   
  +
''arch-meson'' は {{Pkg|meson}} パッケージに含まれるラッパースクリプトで、Arch パッケージで使われるであろう Meson 組み込みのオプションのいくつかを設定し、パッケージ製作者の時間と PKGBUILD のコードを節約する利点があります。''arch-meson'' に書かれている説明を引用すると、''Highly opinionated wrapper for Arch Linux packaging'' (Arch Linux のパッケージングのための高度なラッパー) です。
build() {
 
meson --prefix=/usr --buildtype=plain ''source'' ''build''
 
meson compile -C ''build''
 
}
 
 
{{ic|meson compile}} is a wrapper for supported back-end build systems, which currently defaults to ''ninja''[https://github.com/mesonbuild/meson/blob/master/mesonbuild/mcompile.py]
 
   
  +
例:
{{Tip|{{ic|ninja -C ''build''}} could be directly used instead.}}
 
 
==== Using arch-meson wrapper script ====
 
 
''arch-meson'' is a wrapper script included in {{Pkg|meson}} package which has the advantage of setting some of Meson built-in options that would probably be used in an Arch package, saving packager's time and code in the PKGBUILD. Quoting the description written in ''arch-meson'', it is a "Highly opinionated wrapper for Arch Linux packaging".
 
 
Example:
 
   
 
build() {
 
build() {
58行目: 47行目:
 
}
 
}
   
  +
==== ソフトウェア固有のビルドオプションを設定する ====
==== Setting software-specific build options ====
 
   
While Meson has some [https://mesonbuild.com/Builtin-options.html built-in build options] (e.g. {{ic|--prefix}}), the software being packaged could have other [https://mesonbuild.com/Build-options.html build options] which the packager should consider. Valid software-specific build options are normally found in a file named {{ic|meson_options.txt}} (if present) and in {{ic|meson.build}}. Look for {{ic|option(''settings'')}} in these files, then read the {{ic|''settings''}}.
+
Meson にはいくつかの [https://mesonbuild.com/Builtin-options.html 組み込みビルドオプション] (たとえば {{ic|--prefix}}) がありますが、パッケージ化されるソフトウェアには、パッケージャーが考慮すべき、他の [https://mesonbuild.com/Build-options.html ビルドオプション] があるかもしれません。有効なソフトウェア固有のビルドオプションは、通常 {{ic|meson_options.txt}} という名前のファイルに書かれています。(存在する場合) {{ic|meson.build}} にあります。これらのファイルで {{ic|option(''settings'')}} を探し、{{ic|''settings''}} を読みます。
   
To use a software-specific build option, use the notation {{ic|1=-D ''key''=''value''}}, where {{ic|''key''}} is the build option name set in the project and {{ic|''value''}} is a valid value, like e.g. {{ic|true}}.
+
ソフトウェア固有のビルドオプションを使用するには、{{ic|1=-D ''key''=''value''}} という記法を使います。ここで {{ic|''key''}} はプロジェクトで設定したビルドオプション名、 {{ic|''value''}} は例えば {{ic|true}} などの有効な値です。
   
  +
例えば、{{Pkg|gtranslator}} は以下のようなビルドオプションを持っています。
For instance, {{Pkg|gtranslator}} has the following build options:
 
   
 
{{hc|meson_options.txt|
 
{{hc|meson_options.txt|
70行目: 59行目:
 
}}
 
}}
   
  +
したがって、そのドキュメントを構築するためには、Meson を実行する必要があります。{{ic|1=-D gtk_doc=true}} build オプションを指定する場合、コマンドラインは次のようになります。
So, to build its documentation, one must run Meson appending {{ic|1=-D gtk_doc=true}} build option, resulting in a command line like e.g.
 
   
 
arch-meson $pkgname-$pkgver build -Dgtk_doc=true
 
arch-meson $pkgname-$pkgver build -Dgtk_doc=true
76行目: 65行目:
 
=== check() ===
 
=== check() ===
   
  +
パッケージ化されるソフトウェアがテストスイートを提供しているなら、PKGBUILD の [[パッケージの作成#関数 check()|check()]] 関数で実行することを検討してください。これは {{ic|meson test}} コマンドで実行することができます。
If the software being packaged provides test suite, consider running it in the PKGBUILD's [[Creating packages#check()|check()]] function. This can be accomplished with {{ic|meson test}} command.
 
   
  +
Example:
 
   
 
check() {
 
check() {
84行目: 73行目:
 
}
 
}
   
  +
ここで {{ic|''build''}} は、上記の [[#build()]] ステップで使用したものと同じビルドディレクトリ名です。
where {{ic|''build''}} is the same build directory name used in the above [[#build()]] step.
 
   
 
{{Tip|
 
{{Tip|
* {{ic|ninja test -C ''build''}} could be directly used instead.
+
* 代わりに {{ic|ninja test -C ''build''}} を直接使用することができます。
  +
* 失敗したテストによって生成された出力を、環境変数として他の有用な情報と共に報告するために、 {{ic|--print-errorlogs}} パラメータを {{ic|meson test}} に追加することができます。
* The {{ic|--print-errorlogs}} parameter can be added to {{ic|meson test}} in order to report the output produced by the failing tests along with other useful information as the environmental variables.
 
 
}}
 
}}
   
See {{ic|meson test --help}} and [https://mesonbuild.com/Unit-tests.html Unit tests in Meson docs] for more info.
+
詳細については {{ic|meson test --help}} [https://mesonbuild.com/Unit-tests.html Unit tests in Meson docs] を参照してください。
   
 
=== package() ===
 
=== package() ===
   
  +
パッケージングには通常 {{ic|meson install}} のみの実行が必要ですが、他のインストールコマンドが必要な場合は確認してください(例えば [[PKGBUILD#license|uncommon license]] など)上記と同じビルドディレクトリを使い、{{ic|--destdir}} フラグをセットしてください。
Packaging normally requires running only {{ic|meson install}}, but check if another installation command is required (e.g. an [[PKGBUILD#license|uncommon license]]). Use the same build directory as above and set the {{ic|--destdir}} flag:
 
   
 
package() {
 
package() {
101行目: 90行目:
 
}
 
}
   
{{Note|Appending {{ic|1=DESTDIR="$pkgdir"}} is also a valid alternative to {{ic|--destdir}}.[https://mesonbuild.com/Release-notes-for-0-57-0.html#specify-destdir-on-command-line]}}
+
{{Note|{{ic|1=DESTDIR="$pkgdir"}} を追加することも有効です。{{ic|--destdir}} の代わりです [https://mesonbuild.com/Release-notes-for-0-57-0.html#specify-destdir-on-command-line]}}
  +
  +
{{Tip|{{ic|ninja install -C ''build''}} の代わりに直接使用することができます。}}
  +
  +
== トラブルシューティング ==
  +
  +
=== ERROR: Function does not take positional arguments ===
  +
  +
エラー出力の例:
  +
  +
data/meson.build:21:5: ERROR: Function does not take positional arguments.
  +
  +
Meson 0.60 以降、位置引数の使用が警告からエラーに昇格したエラーが存在します。このエラーのよくある例の 1 つは、無効な引数を i18n.merge_file() に追加することです。たとえば、{{Pkg|aisleriot}} には次のものが含まれていました。
  +
  +
i18n.merge_file(
  +
'sol.metainfo.xml',
  +
input: desktop_in,
  +
output: '@BASENAME@',
  +
type: 'desktop',
  +
po_dir: po_dir,
  +
install: true,
  +
install_dir: desktopdatadir,
  +
)
  +
  +
ここで、{{ic|'sol.metainfo.xml'}} は現在無効な引数であり、削除する必要があります。アップストリームに適用された修正については、[https://gitlab.gnome.org/GNOME/aisleriot/-/commit/4bf6fcf5c8043adfcadd948e678cc68f150cc998 this commit] を参照してください。
  +
  +
この場合に取るべき措置は次のとおりです。
   
  +
# エラーで報告された meson.build にパッチを適用してビルドを修正し、更新された PKGBUILD を公開します。
{{Tip|{{ic|ninja install -C ''build''}} could be directly used instead.}}
 
  +
# パッチを使用してアップストリームリポジトリに貢献して、全員が修正できるようにし、次のバージョンでソース配列にパッチが含まれないようにします。
   
== Template ==
+
== テンプレート ==
   
  +
以上の説明をまとめ、コピー&ペーストのワンポイントを提供するために、以下のテンプレートをご覧ください。
To sum up the above instructions and to provide a single copy-and-paste point, see the template below:
 
   
 
{{bc|1=
 
{{bc|1=
126行目: 142行目:
 
}}
 
}}
   
  +
== サンプルパッケージ ==
== Example packages ==
 
   
  +
これは、Meson を使用するパッケージの小さなリストです。{{Pkg|meson}} の "必要とするパッケージ" のリストにある他のパッケージも参照してください。
This is a small list of packages that use Meson. See other packages in the list "Required by" in {{Pkg|meson}}.
 
   
 
* {{Pkg|gstreamer}}
 
* {{Pkg|gstreamer}}
137行目: 153行目:
 
* {{Pkg|xorg-server}}
 
* {{Pkg|xorg-server}}
   
== See also ==
+
== 参照 ==
   
* [https://mesonbuild.com/ Meson official website]
+
* [https://mesonbuild.com/ Meson オフィシャルウェブサイト]
* [https://mesonbuild.com/Builtin-options.html List of Meson built-in options]
+
* [https://mesonbuild.com/Builtin-options.html Meson 内蔵オプションの一覧]
* [https://github.com/mesonbuild/meson Meson source code repository in GitHub]
+
* [https://github.com/mesonbuild/meson Meson ソースコードリポジトリ GitHub]
* [[Wikipedia:Meson (software)|Meson article on Wikipedia]]
+
* [[Wikipedia:Meson (software)|Meson Wikipedia]]
 
* {{man|1|meson}}
 
* {{man|1|meson}}

2023年10月30日 (月) 03:40時点における最新版

Meson 公式サイトより。

Meson はオープンソースのビルドシステムで、非常に高速で、さらに重要なことに、可能な限りユーザーフレンドリーであることを意図しています。

Python で書かれた Meson は、マルチプラットフォームのサポート、複数のプログラミング言語のサポート、クロスコンパイルなどを特徴としています。

Meson はソフトウェアを直接ビルドするのではなく、バックエンドのビルドシステムをセットアップします。一般的には ninja と共に使われますが、他のビルドシステムを使うこともできます。一般的には、GNU ビルドシステム を置き換えるために使われます。

このドキュメントは Meson を使うソフトウェアのための PKGBUILD を書くための標準ガイドラインを扱っています。

使い方

必要条件

mesonPKGBUILDmakedepends の配列に含まれなければなりません。

build()

設定とビルドは通常 meson バイナリを使い ますが、Arch Linux arch-meson ラッパースクリプトを使う ことによっても行うことができます。

mesonarch-meson コマンドはどちらも optionssource directorybuild directory を使用法のシンタックスに含んでいます。

  • オプション: 少なくとも --prefix /usr を含める必要がありますが、その他のオプションは meson configure --help で確認してください。また ソフトウェア固有の構築オプション も確認してください。
  • ソースディレクトリ (または "sourcedir"): ソフトウェアのソースコードが格納されている場所です。例えば ., $pkgname または $pkgname-$pkgver などです。
  • 一般的には build または _build という名前ですが、任意で指定できます。
ノート: ソースディレクトリがビルドディレクトリの前に meson に渡される場合と、その逆の場合がありますが、Meson はどちらがどちらかを知っていて適切に環境をセットアップするので問題ありません。

meson バイナリを直接使用する場合

Arch Linux のパッケージはファイルを /usr/local にインストールしてはいけないため、--prefix=/usr は常に meson のバイナリに渡す必要があります、これは Arch パッケージガイドライン#パッケージエチケット に従っています。--buildtype=plain 組み込みのオプションは、あなたが何をしているかを知っていれば、他の値を設定することができます。

arch-meson ラッパースクリプトの使用

arch-mesonmeson パッケージに含まれるラッパースクリプトで、Arch パッケージで使われるであろう Meson 組み込みのオプションのいくつかを設定し、パッケージ製作者の時間と PKGBUILD のコードを節約する利点があります。arch-meson に書かれている説明を引用すると、Highly opinionated wrapper for Arch Linux packaging (Arch Linux のパッケージングのための高度なラッパー) です。

例:

build() {
  arch-meson source build
  meson compile -C build
}

ソフトウェア固有のビルドオプションを設定する

Meson にはいくつかの 組み込みビルドオプション (たとえば --prefix) がありますが、パッケージ化されるソフトウェアには、パッケージャーが考慮すべき、他の ビルドオプション があるかもしれません。有効なソフトウェア固有のビルドオプションは、通常 meson_options.txt という名前のファイルに書かれています。(存在する場合) と meson.build にあります。これらのファイルで option(settings) を探し、settings を読みます。

ソフトウェア固有のビルドオプションを使用するには、-D key=value という記法を使います。ここで key はプロジェクトで設定したビルドオプション名、 value は例えば true などの有効な値です。

例えば、gtranslator は以下のようなビルドオプションを持っています。

meson_options.txt
option('gtk_doc', type: 'boolean', value: false, description: 'use gtk-doc to build documentation')

したがって、そのドキュメントを構築するためには、Meson を実行する必要があります。-D gtk_doc=true build オプションを指定する場合、コマンドラインは次のようになります。

arch-meson $pkgname-$pkgver build -Dgtk_doc=true

check()

パッケージ化されるソフトウェアがテストスイートを提供しているなら、PKGBUILD の check() 関数で実行することを検討してください。これは meson test コマンドで実行することができます。

check() {
  meson test -C build
}

ここで build は、上記の #build() ステップで使用したものと同じビルドディレクトリ名です。

ヒント:
  • 代わりに ninja test -C build を直接使用することができます。
  • 失敗したテストによって生成された出力を、環境変数として他の有用な情報と共に報告するために、 --print-errorlogs パラメータを meson test に追加することができます。

詳細については meson test --helpUnit tests in Meson docs を参照してください。

package()

パッケージングには通常 meson install のみの実行が必要ですが、他のインストールコマンドが必要な場合は確認してください(例えば uncommon license など)上記と同じビルドディレクトリを使い、--destdir フラグをセットしてください。

package() {
  meson install -C build --destdir "$pkgdir"
}
ノート: DESTDIR="$pkgdir" を追加することも有効です。--destdir の代わりです [1]
ヒント: ninja install -C build の代わりに直接使用することができます。

トラブルシューティング

ERROR: Function does not take positional arguments

エラー出力の例:

 data/meson.build:21:5: ERROR: Function does not take positional arguments.

Meson 0.60 以降、位置引数の使用が警告からエラーに昇格したエラーが存在します。このエラーのよくある例の 1 つは、無効な引数を i18n.merge_file() に追加することです。たとえば、aisleriot には次のものが含まれていました。

i18n.merge_file(
  'sol.metainfo.xml',
  input: desktop_in,
  output: '@BASENAME@',
  type: 'desktop',
  po_dir: po_dir,
  install: true,
  install_dir: desktopdatadir,
)

ここで、'sol.metainfo.xml' は現在無効な引数であり、削除する必要があります。アップストリームに適用された修正については、this commit を参照してください。

この場合に取るべき措置は次のとおりです。

  1. エラーで報告された meson.build にパッチを適用してビルドを修正し、更新された PKGBUILD を公開します。
  2. パッチを使用してアップストリームリポジトリに貢献して、全員が修正できるようにし、次のバージョンでソース配列にパッチが含まれないようにします。

テンプレート

以上の説明をまとめ、コピー&ペーストのワンポイントを提供するために、以下のテンプレートをご覧ください。

makedepends=(meson)

build() {
  arch-meson $pkgname-$pkgver build
  meson compile -C build
}

check() {
  meson test -C build
}

package() {
  meson install -C build --destdir "$pkgdir"
}

サンプルパッケージ

これは、Meson を使用するパッケージの小さなリストです。meson の "必要とするパッケージ" のリストにある他のパッケージも参照してください。

参照