---
title: Release 0.52.0
short-description: Release notes for 0.52.0
...

# New features

## Gettext targets are ignored if `gettext` is not installed

Previously the `i18n` module has errored out when `gettext` tools are
not installed on the system. Starting with this version they will
become no-ops instead. This makes it easier to build projects on
minimal environments (such as when bootstrapping) that do not have
translation tools installed.

## Support taking environment values from a dictionary

`environment()` now accepts a dictionary as first argument.  If
provided, each key/value pair is added into the `environment_object`
as if `set()` method was called for each of them.

On the various functions that take an `env:` keyword argument, you may
now give a dictionary.

## alias_target

``` meson
runtarget alias_target(target_name, dep1, ...)
```

This function creates a new top-level target. Like all top-level
targets, this integrates with the selected backend. For instance, with
Ninja you can run it as `ninja target_name`. This is a dummy target
that does not execute any command, but ensures that all dependencies
are built. Dependencies can be any build target (e.g. return value of
executable(), custom_target(), etc)


## Enhancements to the pkg_config_path argument

Setting sys_root in the [properties] section of your cross file will
now set PKG_CONFIG_SYSROOT_DIR automatically for host system
dependencies when cross compiling.

## The Meson test program now accepts an additional "--gdb-path" argument to specify the GDB binary

`meson test --gdb testname` invokes GDB with the specific test case. However, sometimes GDB is not in the path or a GDB replacement is wanted.
Therefore, a `--gdb-path` argument was added to specify which binary is executed (per default `gdb`):

```console
$ meson test --gdb --gdb-path /my/special/location/for/gdb testname
$ meson test --gdb --gdb-path cgdb testname
```

## Better support for illumos and Solaris

illumos (and hopefully Solaris) support has been dramatically
improved, and one can reasonably expect projects to compile.

## Splitting of Compiler.get_function_attribute('visibility')

On macOS there is no `protected` visibility, which results in the
visbility check always failing. 0.52.0 introduces two changes to
improve this situation:

1. the "visibility" check no longer includes "protected"
2. a new set of "split" checks are introduced which check for a single
   attribute instead of all attributes.

These new attributes are:
* visibility:default
* visibility:hidden
* visibility:internal
* visibility:protected

## Clang-tidy target

If `clang-tidy` is installed and the project's source root contains a
`.clang-tidy` (or `_clang-tidy`) file, Meson will automatically define
a `clang-tidy` target that runs Clang-Tidy on all source files.

If you have defined your own `clang-tidy` target, Meson will not
generate its own target.

## Add blocks dependency

Add `dependency('blocks')` to use the Clang blocks extension.

## Meson's builtin b_lundef is now supported on macOS

This has always been possible, but there are some additional
restrictions on macOS (mainly do to Apple only features). With the
linker internal re-architecture this has become possible

## Compiler and dynamic linker representation split

0.52.0 inclues a massive refactor of the representaitons of compilers to
tease apart the representations of compilers and dynamic linkers (ld). This
fixes a number of compiler/linker combinations. In particular this fixes
use GCC and vanilla clang on macOS.

## Add `depth` option to `wrap-git`

To allow shallow cloning, an option `depth` has been added to `wrap-git`.
This applies recursively to submodules when `clone-recursive` is set to `true`.

Note that the git server may have to be configured to support shallow cloning
not only for branches but also for tags.

## Enhancements to the source_set module

`SourceSet` objects now provide the `all_dependencies()` method, that
complement the existing `all_sources()` method.

## added `--only test(s)` option to run_project_tests.py

Individual tests or a list of tests from run_project_tests.py can be selected like:
```
python run_project_tests.py --only fortran

python run_project_tests.py --only fortran python3
```

This assists Meson development by only running the tests for the
portion of Meson being worked on during local development.

## Experimental Webassembly support via Emscripten

Meson now supports compiling code to Webassembly using the Emscripten
compiler. As with most things regarding Webassembly, this support is
subject to change.

## Version check in `find_program()`

A new `version` keyword argument has been added to `find_program` to
specify the required version. See [`dependency()`](#dependency) for
argument format. The version of the program is determined by running
`program_name --version` command. If stdout is empty it fallbacks to
stderr. If the output contains more text than simply a version number,
only the first occurrence of numbers separated by dots is kept. If the
output is more complicated than that, the version checking will have
to be done manually using [`run_command()`](#run_command).

## Added `vs_module_defs` to `shared_module()`

Like `shared_library()`, `shared_module()` now accepts
`vs_module_defs` argument for controlling symbol exports, etc.

## Improved support for static libraries

Static libraries had numerous shortcomings in the past, especially
when using uninstalled static libraries. This release brings many
internal changes in the way they are handled, including:

- `link_whole:` of static libraries. In the example below, lib2 used to miss
  symbols from lib1 and was unusable.
```meson
lib1 = static_library(sources)
lib2 = static_library(other_sources, link_whole : lib1, install : true)
```
- `link_with:` of a static library with an uninstalled static library. In the
example below, lib2 now implicitly promote `link_with:` to `link_whole:` because
the installed lib2 would oterhwise be unusable.
```meson
lib1 = static_library(sources, install : false)
lib2 = static_library(sources, link_with : lib1, install : true)
```
- pkg-config generator do not include uninstalled static libraries. In the example
  below, the generated `.pc` file used to be unusable because it contained
  `Libs.private: -llib1` and `lib1.a` is not installed. `lib1` is now omitted
  from the `.pc` file because the `link_with:` has been promoted to
  `link_whole:` (see above) and thus lib1 is not needed to use lib2.
```meson
lib1 = static_library(sources, install : false)
lib2 = both_libraries(sources, link_with : lib1, install : true)
pkg.generate(lib2)
```

Many projects have been using `extract_all_objects()` to work around
those issues, and hopefully those hacks could now be removed. Since
this is a pretty large change, please double check if your static
libraries behave correctly, and report any regression.

## Enhancements to the kconfig module

`kconfig.load()` may now accept a `configure_file()` as input file.

## Added `include_type` kwarg to `dependency`

The `dependency()` function now has a `include_type` kwarg. It can take the
values `'preserve'`, `'system'` and `'non-system'`. If it is set to `'system'`,
all include directories of the dependency are marked as system dependencies.

The default value of `include_type` is `'preserve'`.

Additionally, it is also possible to check and change the
`include_type` state of an existing dependency object with the new
`include_type()` and `as_system()` methods.

## Enhancements to `configure_file()`

`input:` now accepts multiple input file names for `command:`-configured file.

`depfile:` keyword argument is now accepted. The dependency file can
list all the additional files the configure target depends on.

## Projects args can be set separately for build and host machines (potentially breaking change)

Simplify `native` flag behavior in `add_global_arguments`,
`add_global_link_arguments`, `add_project_arguments` and
`add_project_link_arguments`. The rules are now very simple:

 - `native: true` affects `native: true` targets

 - `native: false` affects `native: false` targets

 - No native flag is the same as `native: false`

This further simplifies behavior to match the "build vs host" decision
done in last release with `c_args` vs `build_c_args`. The underlying
motivation in both cases is to execute the same commands whether the
overall build is native or cross.

## Allow checking if a variable is a disabler

Added the function `is_disabler(var)`. Returns true if a variable is a disabler
and false otherwise.


## gtkdoc-check support

`gnome.gtkdoc()` now has a `check` keyword argument. If `true` runs it
will run `gtkdoc-check` when running unit tests. Note that this has
the downside of rebuilding the doc for each build, which is often very
slow. It usually should be enabled only in CI.

## `gnome.gtkdoc()` returns target object

`gnome.gtkdoc()` now returns a target object that can be passed as
dependency to other targets using generated doc files (e.g. in
`content_files` of another doc).

## Dist is now a top level command

Previously creating a source archive could only be done with `ninja
dist`. Starting with this release Meson provides a top level `dist`
that can be invoked directly. It also has a command line option to
determine which kinds of archives to create:

```meson
meson dist --formats=xztar,zip
```
