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

# New features

## Distribution tarballs from Mercurial repositories

Creating distribution tarballs can now be made out of projects based on
Mercurial. As before, this remains possible only with the Ninja backend.

## Keyword argument verification

Meson will now check the keyword arguments used when calling any function
and print a warning if any of the keyword arguments is not known. In the
future this will become a hard error.

## Add support for Genie to Vala compiler

The Vala compiler has an alternative syntax, Genie, that uses the `.gs`
file extension. Meson now recognises and uses Genie files.

## Pkgconfig support for additional cflags

The Pkgconfig module object can add arbitrary extra cflags to the Cflags
value in the .pc file, using the "extra_cflags" keyword:
```meson
pkg.generate(libraries : libs,
             subdirs : h,
             version : '1.0',
             name : 'libsimple',
             filebase : 'simple',
             description : 'A simple demo library.',
             extra_cflags : '-Dfoo' )
```

## Base options accessible via get_option()

Base options are now accessible via the get_option() function.
```meson
uses_lto = get_option('b_lto')
```

## Allow crate type configuration for Rust compiler

Rust targets now take an optional `rust_crate_type` keyword, allowing
you to set the crate type of the resulting artifact. Valid crate types
are `dylib` or `cdylib` for shared libraries, and `rlib` or
`staticlib` for static libraries. For more, see
Rust's [linkage reference][rust-linkage].

[rust-linkage]: https://doc.rust-lang.org/reference/linkage.html

## Simultaneous use of Address- and Undefined Behavior Sanitizers

Both the address- and undefined behavior sanitizers can now be used
simultaneously by passing `-Db_sanitize=address,undefined` to Meson.

## Unstable SIMD module

A new experimental module to compile code with many different SIMD
instruction sets and selecting the best one at runtime. This module
is unstable, meaning its API is subject to change in later releases.
It might also be removed altogether.


## Import libraries for executables on Windows

The new keyword `implib` to `executable()` allows generation of an import
library for the executable.

## Added build_rpath keyword argument

You can specify `build_rpath : '/foo/bar'` in build targets and the
given path will get added to the target's rpath in the build tree. It
is removed during the install step.

Meson will print a warning when the user tries to add an rpath linker
flag manually, e.g. via `link_args` to a target. This is not
recommended because having multiple rpath causes them to stomp on each
other. This warning will become a hard error in some future release.

## Vulkan dependency module

Vulkan can now be used as native dependency. The dependency module
will detect the VULKAN_SDK environment variable or otherwise try to
receive the vulkan library and header via pkgconfig or from the
system.

## Limiting the maximum number of linker processes

With the Ninja backend it is now possible to limit the maximum number of
concurrent linker processes. This is usually only needed for projects
that have many large link steps that cause the system to run out of
memory if they are run in parallel. This limit can be set with the
new `backend_max_links` option.

## Disable implicit include directories

By default Meson adds the current source and build directories to the
header search path. On some rare occasions this is not desired. Setting
the `implicit_include_directories` keyword argument to `false` these
directories are not used.

## Support for MPI dependency

MPI is now supported as a dependency. Because dependencies are
language-specific, you must specify the requested language with the
`language` keyword, i.e., `dependency('mpi', language='c')` will
request the C MPI headers and libraries. See [the MPI
dependency](Dependencies.md#mpi) for more information.

## Allow excluding files or directories from `install_subdir`

The [`install_subdir`](Reference-manual.md#install_subdir) command
accepts the new `exclude_files` and `exclude_directories` keyword
arguments that allow specified files or directories to be excluded
from the installed subdirectory.

## Make all Meson functionality invokable via the main executable

Previously Meson had multiple executables such as `mesonintrospect`
and `mesontest`. They are now invokable via the main Meson executable
like this:

    meson configure <arguments> # equivalent to mesonconf <options>
    meson test <arguments> # equivalent to mesontest <arguments>

The old commands are still available but they are deprecated
and will be removed in some future release.

## Pcap dependency detector

Meson will automatically obtain dependency information for pcap
using the `pcap-config` tool. It is used like any other dependency:

```meson
pcap_dep = dependency('pcap', version : '>=1.0')
```

## GNOME module mkenums_simple() addition

Most libraries and applications use the same standard templates for
glib-mkenums. There is now a new `mkenums_simple()` convenience method
that passes those default templates to glib-mkenums and allows some tweaks
such as optional function decorators or leading underscores.
