This is a collection of projects that use Meson as their build system, or have a meson port maintained by the Meson team. They can be used as subproject to any Meson project that needs them as dependency.
Clone this repository locally, and set the wraps
option with a comma separated
list of wraps that needs to be built.
For example to test libjpeg-turbo and zlib:
meson setup builddir -Dwraps=libjpeg-turbo,zlib
meson compile -C builddir
-
Write
my-project.wrap
file and add it insubprojects/
directory. -
If upstream project's build system is not Meson, a port can be added in
subprojects/packagefiles/my-project/meson.build
andpatch_directory = my-subproject
should be added into the wrap file. Note that the wholesubprojects/packagefiles/my-project
subtree will be copied onto the upstream's source tree, but it is generally not accepted to override upstream files. -
It is often easier to develop in
subprojects/my-project
directory and update packagefiles directory at the end. This can be done usingtools/update-packagefiles.py
script. -
Add your release information in
releases.json
. It is a dictionary where the key is the wrap name and the value is a dictionary containing with the following keys:versions
: Sorted list (newest first) of release tags in the format<upstream version>-<revision>
where the revision starts at 1 and is incremented when a changed is made in the meson port.dependency_names
: (Optional) List of dependency names (e.g. pkg-config name such asglib-2.0
) provided by the wrap. It must match information from wrap's[provide]
section.program_names
: (Optional) List of program names (e.g.glib-compile-resources
) provided by the wrap. It must match information from wrap's[provide]
section.
-
Configure CI in
ci_config.json
. It is a dictionary where the key is the wrap name and the value is a dictionary containing with the following keys:build_options
: (Optional) List ofoption=value
strings that will be used to build the project on the CI.debian_packages
: (Optional) List of extra packages that will be installed on debian-like CI runners. Dependencies that can be provided by other wraps should not be added here because it's better to test that fallbacks works. When runningtools/sanity_checks.py
locally, this list will be printed but not installed.brew_packages
: (Optional) List of extra packages that will be installed on MacOS CI runners.choco_packages
: (Optional) List of extra packages that will be installed on Windows CI runners.linux_only
: (Optional) If set totrue
, indicates the wrap should be tested only on Linux CI.fatal_warnings
: (Optional) If set tofalse
removes --fatal-meson-warning. Use this only when there is no other way to fix the warning.skip_dependency_check
: (Optional) List of platform specific dependency names that are not always provided by the project.test_options
: (Optional) List of arguments that will be passed tomeson test
command (e.g.--timeout-multiplier
,--no-suite
).skip_tests
: (Optional) If set totrue
tests will not be run. This is useful when tests are known to fail because of upstream issues, or requires specific environment hard to setup.
-
Test locally by running
tools/sanity_checks.py
script. It will be executed on the CI and must always return success before merging any PR. -
Create Pull Request with your changes.
Run meson wrap install <name>
on the top source dir of your project. It
will install subprojects/<name>.wrap
file used by Meson to download the
dependency.