build system release , which is used to build projects such as X.Org Server, Mesa, Lighttpd, systemd, GStreamer, Wayland, GNOME, and GTK+. The Meson code is written in Python and licensed under Apache 2.0.
The key development goal of Meson is to provide a high speed assembly process combined with convenience and ease of use. Instrumentation is used instead of make when building by default , but other backends such as xcode and VisualStudio are also possible. The system has a built-in multi-platform dependency handler that allows you to use Meson to build packages for distributions. Assembly rules are set in a simplified domain-specific language, they are well readable and understandable to the user (according to the authors' idea, the developer should spend a minimum of time writing rules).
Cross-compilation and assembly are supported. Linux, macOS и Windows Using GCC, Clang, Visual Studio, and other compilers. Projects can be built in various programming languages, including C, C++, Fortran, Java, and Rust. Incremental build mode is supported, which rebuilds only components directly related to changes made since the previous build. Meson can be used to create repeatable builds, where running the build in different environments results in the generation of completely identical executable files.
All Meson 0.51:
- Added support for transparent building of existing projects that use CMake build scripts. Meson can now directly build simple subprojects (such as single libraries) using the CMake module, similar to regular subprojects (including CMake subprojects can be placed in the subprojects directory);
- For all compilers used, preliminary testing is enabled through the assembly and execution of the simplest test files (sanity check), not limited to testing flags specified by the user for cross-compilers (from now on compilers native to the current platform are also checked).
- Added the ability to define command line options used during cross-compilation, with binding through setting the platform prefix before the option. Previously, command line options only covered native builds and could not be specified for cross compilation. Command line options now apply whether native or cross-compiled, ensuring that native and cross-builds produce identical results;
- Added the ability to specify the "--cross-file" flag more than once on the command line to list multiple cross-files;
- Added support for the ICL (Intel C/C++ Compiler) compiler for the platform Windows (ICL.EXE and ifort);
- Added initial instrumentation support for CPU Xtensa (xt-xcc, xt-xc++, xt-nm);
- The "get_variable" method has been added to the "dependency" object, which allows you to get the value of a variable without taking into account the type of the current dependency (for example, dep.get_variable(pkg-config : 'var-name', cmake : 'COP_VAR_NAME));
- Added a new target build options argument, "link_language", to explicitly specify the language to use when invoking the linker. For example, a Fortran main program could call C/C++ code, which would automatically select C/C++ when the Fortran linker should be used;
- Changed processing of CPPFLAGS preprocessor flags. If Meson previously stored CPPFLAGS and language-specific compilation flags (CFLAGS, CXXFLAGS) separately, now they are processed inseparably and the flags listed in CPPFLAGS are used as another source of compilation flags for languages that support them;
- The output of custom_target and custom_target[i] can now be used as arguments in the link_with and link_whole operations;
- In generators, the ability to specify additional dependencies has been added using the "depends" option (for example, generator(program_runner, output: ['@BASENAME@.c'], depends: exe));
- Added static option to find_library to only search for statically linked libraries;
- For python.find_installation, the ability to determine the presence of a given Python module for a specific version of Python has been added;
- Added new unstable-kconfig module to parse kconfig files;
- Added a new command "subprojects foreach" that takes a command with arguments and runs it in all subproject directories;
Source: opennet.ru
