「Meson パッケージガイドライン」の版間の差分
(→build(): 翻訳を修正) |
(トラブルシューティングを翻訳して追加) |
||
| 84行目: | 84行目: | ||
=== package() === |
=== package() === |
||
| − | パッケージングには通常 {{ic|meson install}} のみの実行が必要ですが、他のインストールコマンドが必要な場合は確認してください |
+ | パッケージングには通常 {{ic|meson install}} のみの実行が必要ですが、他のインストールコマンドが必要な場合は確認してください(例えば [[PKGBUILD#license|uncommon license]] など)上記と同じビルドディレクトリを使い、{{ic|--destdir}} フラグをセットしてください。 |
package() { |
package() { |
||
| 93行目: | 93行目: | ||
{{Tip|{{ic|ninja install -C ''build''}} の代わりに直接使用することができます。}} |
{{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 を公開します。 |
||
| + | # パッチを使用してアップストリームリポジトリに貢献して、全員が修正できるようにし、次のバージョンでソース配列にパッチが含まれないようにします。 |
||
== テンプレート == |
== テンプレート == |
||
| − | 以上の説明をまとめ、コピー |
+ | 以上の説明をまとめ、コピー&ペーストのワンポイントを提供するために、以下のテンプレートをご覧ください。 |
{{bc|1= |
{{bc|1= |
||
2023年10月30日 (月) 03:40時点における版
32ビット – CLR – クロス – Eclipse – Electron – Free Pascal – GNOME – Go – Haskell – Java – KDE – カーネル – Lisp – MinGW – Node.js – ノンフリー – OCaml – Perl – PHP – Python – R – Ruby – Rust – VCS – ウェブ – Wine
- Meson はオープンソースのビルドシステムで、非常に高速で、さらに重要なことに、可能な限りユーザーフレンドリーであることを意図しています。
Python で書かれた Meson は、マルチプラットフォームのサポート、複数のプログラミング言語のサポート、クロスコンパイルなどを特徴としています。
Meson はソフトウェアを直接ビルドするのではなく、バックエンドのビルドシステムをセットアップします。一般的には ninja と共に使われますが、他のビルドシステムを使うこともできます。一般的には、GNU ビルドシステム を置き換えるために使われます。
このドキュメントは Meson を使うソフトウェアのための PKGBUILD を書くための標準ガイドラインを扱っています。
目次
使い方
必要条件
meson は PKGBUILD の makedepends の配列に含まれなければなりません。
build()
設定とビルドは通常 meson バイナリを使い ますが、Arch Linux arch-meson ラッパースクリプトを使う ことによっても行うことができます。
meson と arch-meson コマンドはどちらも options と source directory と build directory を使用法のシンタックスに含んでいます。
- オプション: 少なくとも
--prefix /usrを含める必要がありますが、その他のオプションはmeson configure --helpで確認してください。また ソフトウェア固有の構築オプション も確認してください。 - ソースディレクトリ (または "sourcedir"): ソフトウェアのソースコードが格納されている場所です。例えば
.,$pkgnameまたは$pkgname-$pkgverなどです。 - 一般的には
buildまたは_buildという名前ですが、任意で指定できます。
meson バイナリを直接使用する場合
Arch Linux のパッケージはファイルを /usr/local にインストールしてはいけないため、--prefix=/usr は常に meson のバイナリに渡す必要があります、これは Arch パッケージガイドライン#パッケージエチケット に従っています。--buildtype=plain 組み込みのオプションは、あなたが何をしているかを知っていれば、他の値を設定することができます。
arch-meson ラッパースクリプトの使用
arch-meson は meson パッケージに含まれるラッパースクリプトで、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() ステップで使用したものと同じビルドディレクトリ名です。
詳細については meson test --help と Unit tests in Meson docs を参照してください。
package()
パッケージングには通常 meson install のみの実行が必要ですが、他のインストールコマンドが必要な場合は確認してください(例えば uncommon license など)上記と同じビルドディレクトリを使い、--destdir フラグをセットしてください。
package() {
meson install -C build --destdir "$pkgdir"
}
トラブルシューティング
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 を参照してください。
この場合に取るべき措置は次のとおりです。
- エラーで報告された meson.build にパッチを適用してビルドを修正し、更新された PKGBUILD を公開します。
- パッチを使用してアップストリームリポジトリに貢献して、全員が修正できるようにし、次のバージョンでソース配列にパッチが含まれないようにします。
テンプレート
以上の説明をまとめ、コピー&ペーストのワンポイントを提供するために、以下のテンプレートをご覧ください。
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 の "必要とするパッケージ" のリストにある他のパッケージも参照してください。