Meson パッケージガイドライン
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 を書くための標準ガイドラインを扱っています。
目次
Usage
必要条件
meson は PKGBUILD の makedepends の配列に含まれなければなりません。
build()
Configuring and building is normally done using meson binary, but it can also be done by 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:
- options: must include at least
--prefix /usr
, but make sure to check other options withmeson configure --help
; also check software-specific build options. - source directory (or "sourcedir"): where the software's source code is stored, e.g.
.
,$pkgname
or$pkgname-$pkgver
. - build directory (or "builddir"): where the build files will stored by Meson; commonly named
build
or_build
, but it is discretionary.
Using meson binary directly
Notice --prefix=/usr
always needs to be passed to meson binary because Arch Linux packages must not install files to /usr/local
, according Arch package guidelines#Package etiquette. The --buildtype=plain
built-in option can be set to another value, if you know what you are doing.
Example:
build() { meson --prefix=/usr --buildtype=plain source build meson compile -C build }
meson compile
is a wrapper for supported back-end build systems, which currently defaults to ninja[1]
Using arch-meson wrapper script
arch-meson is a wrapper script included in 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() { arch-meson source build meson compile -C build }
Setting software-specific build options
While Meson has some built-in build options (e.g. --prefix
), the software being packaged could have other build options which the packager should consider. Valid software-specific build options are normally found in a file named meson_options.txt
(if present) and in meson.build
. Look for option(settings)
in these files, then read the settings
.
To use a software-specific build option, use the notation -D key=value
, where key
is the build option name set in the project and value
is a valid value, like e.g. true
.
For instance, gtranslator has the following build options:
meson_options.txt
option('gtk_doc', type: 'boolean', value: false, description: 'use gtk-doc to build documentation')
So, to build its documentation, one must run Meson appending -D gtk_doc=true
build option, resulting in a command line like e.g.
arch-meson $pkgname-$pkgver build -Dgtk_doc=true
check()
If the software being packaged provides test suite, consider running it in the PKGBUILD's check() function. This can be accomplished with meson test
command.
Example:
check() { meson test -C build }
where build
is the same build directory name used in the above #build() step.
See meson test --help
and Unit tests in Meson docs for more info.
package()
Packaging normally requires running only meson install
, but check if another installation command is required (e.g. an uncommon license). Use the same build directory as above and set the --destdir
flag:
package() { meson install -C build --destdir "$pkgdir" }
Template
To sum up the above instructions and to provide a single copy-and-paste point, see the template below:
makedepends=(meson) build() { arch-meson $pkgname-$pkgver build meson compile -C build } check() { meson test -C build } package() { meson install -C build --destdir "$pkgdir" }
Example packages
This is a small list of packages that use Meson. See other packages in the list "Required by" in meson.