| # Meson's policy on mixing multiple build systems in one build directory |
| |
| Meson has been designed with the principle that all dependencies are |
| either provided by "the platform" via a mechanism such as Pkg-Config |
| or that they are built as Meson subprojects under the main |
| project. There are several projects that would like to mix build |
| systems, that is, build dependencies in the same build directory as |
| the other build system by having one build system call the other. The |
| build directories do not necessarily need to be inside each other, but |
| that is the common case. |
| |
| This page lists the Meson project's stance on mixing build |
| systems. The tl/dr version is that while we do provide some |
| functionality for this use case, it only works for simple |
| cases. Anything more complex can not be made reliable and trying to do |
| that would burden Meson developers with an effectively infinite |
| maintenance burden. Thus these use cases are not guaranteed to work, |
| and even if a project using them works today there are no guarantees |
| that it will work in any future version. |
| |
| ## The definition of "build system mixing" |
| |
| For the purposes of this page, mixing build systems means any and all |
| mechanisms where one build system uses build artifacts from a |
| different build system's build directory in any way. |
| |
| Note that this definition does not specify what the dependencies are |
| and how they are built, only how they are consumed. For example |
| suppose you have a standalone dependency library that builds with |
| build system X. In this case having Meson call the build system to |
| build the dependency at build time would be interpreted as mixing |
| build systems. On the other hand a "Flatpak-like" approach of building |
| and installing the library with an external mechanism and consuming it |
| via a standard build-system agnostic method such as Pkg-Config would |
| not be considered build system mixing. Use of uninstalled-pkgconfig |
| files is considered mixing, though. |
| |
| ## What does this mean for support and compatibility? |
| |
| The Meson project will not take on any maintenance burden to ensure |
| anything other than the simple builds setups as discussed above will |
| work. Nor will we make changes to support these use cases that would |
| worsen the user experience of users of plain Meson. This includes, but |
| is not limited to, the following: |
| |
| - Any changes in other build systems that cause mixed project breakage |
| will not be considered a bug in Meson. |
| |
| - Breakages in mixed build projects will not be considered regressions |
| and such problems will never be considered release blockers, |
| regardless of what the underlying issue is. |
| |
| - Any use case that would require major changes in Meson to work |
| around missing or broken functionality in the other build system is |
| not supported. These issues must be fixed upstream. |