|
|
|
---
|
|
|
|
title: Release 0.53.0
|
|
|
|
short-description: Release notes for 0.53.0
|
|
|
|
...
|
|
|
|
|
|
|
|
# New features
|
|
|
|
|
|
|
|
## A new module for filesystem operations
|
|
|
|
|
|
|
|
The new `fs` module can be used to examine the contents of the current
|
|
|
|
file system.
|
|
|
|
|
|
|
|
```meson
|
|
|
|
fs = import('fs')
|
|
|
|
assert(fs.exists('important_file'),
|
|
|
|
'The important file is missing.')
|
|
|
|
```
|
|
|
|
|
|
|
|
## meson dist --include-subprojects
|
|
|
|
|
|
|
|
`meson dist` command line now gained `--include-subprojects` command
|
|
|
|
line option. When enabled, the source tree of all subprojects used by
|
|
|
|
the current build will also be included in the final tarball. This is
|
|
|
|
useful to distribute self contained tarball that can be built offline
|
|
|
|
(i.e. `--wrap-mode=nodownload`).
|
|
|
|
|
|
|
|
## Added new Meson templates for `Dlang`, `Rust`, `Objective-C`
|
|
|
|
|
|
|
|
Meson now ships with predefined project templates for `Dlang`,
|
|
|
|
`Fortran`, `Rust`, `Objective-C`, and by passing the associated flags `d`,
|
|
|
|
`fortran`, `rust`, `objc` to `meson init --language`.
|
|
|
|
|
|
|
|
## Add a new summary() function
|
|
|
|
|
|
|
|
A new function [`summary()`](Reference-manual.md#summary) has been
|
|
|
|
added to summarize build configuration at the end of the build
|
|
|
|
process.
|
|
|
|
|
|
|
|
Example:
|
|
|
|
```meson
|
|
|
|
project('My Project', version : '1.0')
|
|
|
|
summary({'bindir': get_option('bindir'),
|
|
|
|
'libdir': get_option('libdir'),
|
|
|
|
'datadir': get_option('datadir'),
|
|
|
|
}, section: 'Directories')
|
|
|
|
summary({'Some boolean': false,
|
|
|
|
'Another boolean': true,
|
|
|
|
'Some string': 'Hello World',
|
|
|
|
'A list': ['string', 1, true],
|
|
|
|
}, section: 'Configuration')
|
|
|
|
```
|
|
|
|
|
|
|
|
Output:
|
|
|
|
```
|
|
|
|
My Project 1.0
|
|
|
|
|
|
|
|
Directories
|
|
|
|
prefix: /opt/gnome
|
|
|
|
bindir: bin
|
|
|
|
libdir: lib/x86_64-linux-gnu
|
|
|
|
datadir: share
|
|
|
|
|
|
|
|
Configuration
|
|
|
|
Some boolean: False
|
|
|
|
Another boolean: True
|
|
|
|
Some string: Hello World
|
|
|
|
A list: string
|
|
|
|
1
|
|
|
|
True
|
|
|
|
```
|
|
|
|
|
|
|
|
## Generic Overrider for Dynamic Linker selection
|
|
|
|
|
|
|
|
Previous to Meson 0.52.0 you set the dynamic linker using compiler
|
|
|
|
specific flags passed via language flags and hoped things worked out.
|
|
|
|
In version 0.52.0 Meson started detecting the linker and making
|
|
|
|
intelligent decisions about using it. Unfortunately this broke
|
|
|
|
choosing a non-default linker.
|
|
|
|
|
|
|
|
Now there is a generic mechanism for doing this. In 0.53.0, you can
|
|
|
|
use the `LD` environment variable. **In 0.53.1** this was changed to
|
|
|
|
`<compiler_variable>_LD`, such as `CC_LD`, `CXX_LD`, `D_LD`, etc due
|
|
|
|
to regressions. The usual Meson [environment variable
|
|
|
|
rules](https://mesonbuild.com/Running-Meson.html#environment-variables)
|
|
|
|
apply. Alternatively, you can add the following to a cross or native
|
|
|
|
file:
|
|
|
|
|
|
|
|
In 0.53.0:
|
|
|
|
|
|
|
|
```ini
|
|
|
|
[binaries]
|
|
|
|
ld = 'gold'
|
|
|
|
```
|
|
|
|
|
|
|
|
**In 0.53.1 or newer**:
|
|
|
|
|
|
|
|
```ini
|
|
|
|
[binaries]
|
|
|
|
c = 'gcc'
|
|
|
|
c_ld = 'gold'
|
|
|
|
```
|
|
|
|
|
|
|
|
```ini
|
|
|
|
[binaries]
|
|
|
|
c = 'clang'
|
|
|
|
c_ld = 'lld'
|
|
|
|
```
|
|
|
|
|
|
|
|
And Meson will select the linker if possible.
|
|
|
|
|
|
|
|
## `fortran_std` option
|
|
|
|
|
|
|
|
**new in 0.53.0** Akin to the `c_std` and `cpp_std` options, the
|
|
|
|
`fortran_std` option sets Fortran compilers to warn or error on
|
|
|
|
non-Fortran standard code. Only the Gfortran and Intel Fortran
|
|
|
|
compilers have support for this option. Other Fortran compilers ignore
|
|
|
|
the `fortran_std` option.
|
|
|
|
|
|
|
|
Supported values for `fortran_std` include:
|
|
|
|
|
|
|
|
* `legacy` for non-conforming code--this is especially important for Gfortran, which by default errors on old non-compliant Fortran code
|
|
|
|
* `f95` for Fortran 95 compliant code.
|
|
|
|
* `f2003` for Fortran 2003 compliant code.
|
|
|
|
* `f2008` for Fortran 2008 compliant code.
|
|
|
|
* `f2018` for Fortran 2018 compliant code.
|
|
|
|
|
|
|
|
## python.dependency() embed kwarg
|
|
|
|
|
|
|
|
Added the `embed` kwarg to the python module dependency function to
|
|
|
|
select the python library that can be used to embed python into an
|
|
|
|
application.
|
|
|
|
|
|
|
|
## Scalapack
|
|
|
|
|
|
|
|
added in **0.53.0**:
|
|
|
|
|
|
|
|
```meson
|
|
|
|
scalapack = dependency('scalapack')
|
|
|
|
```
|
|
|
|
|
|
|
|
Historically and through today, typical Scalapack setups have broken
|
|
|
|
and incomplete pkg-config or FindScalapack.cmake. Meson handles
|
|
|
|
finding Scalapack on setups including:
|
|
|
|
|
|
|
|
* Linux: Intel MKL or OpenMPI + Netlib
|
|
|
|
* MacOS: Intel MKL or OpenMPI + Netlib
|
|
|
|
* Windows: Intel MKL (OpenMPI not available on Windows)
|
|
|
|
|
|
|
|
## Search directories for `find_program()`
|
|
|
|
|
|
|
|
It is now possible to give a list of absolute paths where `find_program()` should
|
|
|
|
also search, using the `dirs` keyword argument.
|
|
|
|
|
|
|
|
For example on Linux `/sbin` and `/usr/sbin` are not always in the `$PATH`:
|
|
|
|
```meson
|
|
|
|
prog = find_program('mytool', dirs : ['/usr/sbin', '/sbin'])
|
|
|
|
```
|
|
|
|
|
|
|
|
## Source tags targets
|
|
|
|
|
|
|
|
When the respective tools are available, 'ctags', 'TAGS' and 'cscope'
|
|
|
|
targets will be generated by Meson, unless you have defined your own.
|
|
|
|
|
|
|
|
## Dictionary entry using string variable as key
|
|
|
|
|
|
|
|
Keys can now be any expression evaluating to a string value, not limited
|
|
|
|
to string literals any more.
|
|
|
|
```meson
|
|
|
|
d = {'a' + 'b' : 42}
|
|
|
|
k = 'cd'
|
|
|
|
d += {k : 43}
|
|
|
|
```
|
|
|
|
|
|
|
|
## Improved CMake subprojects support
|
|
|
|
|
|
|
|
With this release even more CMake projects are supported via [CMake
|
|
|
|
subprojects](CMake-module.md#cmake-subprojects) due to these internal
|
|
|
|
improvements:
|
|
|
|
|
|
|
|
- Use the CMake file API for CMake >=3.14
|
|
|
|
- Handle the explicit dependencies via `add_dependency`
|
|
|
|
- Basic support for `add_custom_target`
|
|
|
|
- Improved `add_custom_command` support
|
|
|
|
- Object library support on Windows
|
|
|
|
|
|
|
|
## compiler.get_linker_id()
|
|
|
|
|
|
|
|
since 0.53.0, `compiler.get_linker_id()` allows retrieving a lowercase
|
|
|
|
name for the linker. Since each compiler family can typically use a
|
|
|
|
variety of linkers depending on operating system, this helps users
|
|
|
|
define logic for corner cases not otherwise easily handled.
|
|
|
|
|
|
|
|
## CUDA dependency
|
|
|
|
|
|
|
|
Native support for compiling and linking against the CUDA Toolkit
|
|
|
|
using the `dependency` function:
|
|
|
|
|
|
|
|
```meson
|
|
|
|
project('CUDA test', 'cpp', meson_version: '>= 0.53.0')
|
|
|
|
exe = executable('prog', 'prog.cc', dependencies: dependency('cuda'))
|
|
|
|
```
|
|
|
|
|
|
|
|
See [the CUDA dependency](Dependencies.md#cuda) for more information.
|
|
|
|
|
|
|
|
## Added global option to disable C++ RTTI
|
|
|
|
|
|
|
|
The new boolean option is called `cpp_rtti`.
|
|
|
|
|
|
|
|
## Introspection API changes
|
|
|
|
|
|
|
|
dependencies (--dependencies, intro-dependencies.json):
|
|
|
|
- added the `version` key
|
|
|
|
|
|
|
|
scanning dependencies (--scan-dependencies):
|
|
|
|
- added the `version` key containing the required dependency version
|
|
|
|
|
|
|
|
tests and benchmarks (--tests, --benchmarks, intro-tests.json,
|
|
|
|
intro-benchmarks.json):
|
|
|
|
- added the `protocol` key
|