meson/docs/markdown/Release-notes-for-0.49.0.md

315 lines
9.3 KiB
Markdown
Raw Normal View History

2018-09-23 04:11:59 +08:00
---
title: Release 0.49
2018-12-09 22:32:12 +08:00
short-description: Release notes for 0.49
2018-09-23 04:11:59 +08:00
...
# New features
2018-12-09 22:32:12 +08:00
## Libgcrypt dependency now supports libgcrypt-config
2018-09-23 04:11:59 +08:00
2018-12-09 22:32:12 +08:00
Earlier, `dependency('libgcrypt')` could only detect the library with pkg-config
files. Now, if pkg-config files are not found, Meson will look for
`libgcrypt-config` and if it's found, will use that to find the library.
2018-09-23 04:11:59 +08:00
2018-12-09 22:32:12 +08:00
## New `section` key for the buildoptions introspection
2018-09-23 04:11:59 +08:00
2018-12-09 22:32:12 +08:00
Meson now has a new `section` key in each build option. This allows
IDEs to group these options similar to `meson configure`.
2018-09-23 04:11:59 +08:00
2018-12-09 22:32:12 +08:00
The possible values for `section` are:
2018-09-23 04:11:59 +08:00
2018-12-09 22:32:12 +08:00
- core
- backend
- base
- compiler
- directory
- user
- test
2018-12-09 22:32:12 +08:00
## CC-RX compiler for C and CPP
Cross-compilation is now supported for Renesas RX targets with the
CC-RX compiler.
The environment path should be set properly for the CC-RX compiler
executables. The `-cpu` option with the appropriate value should be
mentioned in the cross-file as shown in the snippet below.
```ini
[properties]
c_args = ['-cpu=rx600']
cpp_args = ['-cpu=rx600']
```
The default extension of the executable output is `.abs`. Other
target specific arguments to the compiler and linker will need to be
added explicitly from the
cross-file(`c_args`/`c_link_args`/`cpp_args`/`cpp_link_args`) or some
other way. Refer to the CC-RX User's manual for additional compiler
and linker options.
## CMake `find_package` dependency backend
2018-12-09 22:32:12 +08:00
Meson can now use the CMake `find_package` ecosystem to
detect dependencies. Both the old-style `<NAME>_LIBRARIES`
variables as well as imported targets are supported. Meson
can automatically guess the correct CMake target in most
cases but it is also possible to manually specify a target
with the `modules` property.
```meson
# Implicitly uses CMake as a fallback and guesses a target
dep1 = dependency('KF5TextEditor')
# Manually specify one or more CMake targets to use
dep2 = dependency('ZLIB', method : 'cmake', modules : ['ZLIB::ZLIB'])
```
CMake is automatically used after `pkg-config` fails when
no `method` (or `auto`) was provided in the dependency options.
## New compiler method `get_argument_syntax`
The compiler object now has `get_argument_syntax` method, which returns a
string value of `gcc`, `msvc`, or an undefined value string value. This can be
used to determine if a compiler uses gcc syntax (`-Wfoo`), msvc syntax
(`/w1234`), or some other kind of arguments.
```meson
cc = meson.get_compiler('c')
if cc.get_argument_syntax() == 'msvc'
if cc.has_argument('/w1235')
add_project_arguments('/w1235', language : ['c'])
endif
elif cc.get_argument_syntax() == 'gcc'
if cc.has_argument('-Wfoo')
add_project_arguments('-Wfoo', language : ['c'])
endif
elif cc.get_id() == 'some other compiler'
add_project_arguments('--error-on-foo', language : ['c'])
endif
```
## Return `Disabler()` instead of not-found object
Functions such as `dependency()`, `find_library()`, `find_program()`, and
`python.find_installation()` have a new keyword argument: `disabler`. When set
to `true` those functions return `Disabler()` objects instead of not-found
objects.
## `introspect --projectinfo` can now be used without configured build directory
This allows IDE integration to get information about the project before the user has configured a build directory.
Before you could use `meson.py introspect --projectinfo build-directory`.
Now you also can use `meson.py introspect --projectinfo project-dir/meson.build`.
The output is similiar to the output with a build directory but additionally also includes information from `introspect --buildsystem-files`.
For example `meson.py introspect --projectinfo test\ cases/common/47\ subproject\ options/meson.build`
This outputs (pretty printed for readability):
```
{
"buildsystem_files": [
"meson_options.txt",
"meson.build"
],
"name": "suboptions",
"version": null,
"descriptive_name": "suboptions",
"subprojects": [
{
"buildsystem_files": [
"subprojects/subproject/meson_options.txt",
"subprojects/subproject/meson.build"
],
"name": "subproject",
"version": "undefined",
"descriptive_name": "subproject"
}
]
}
```
Both usages now include a new `descriptive_name` property which always
shows the name set in the project.
## Can specify keyword arguments with a dictionary
You can now specify keyword arguments for any function and method call
with the `kwargs` keyword argument. This is perhaps best described
with an example:
```meson
options = {'include_directories': include_directories('inc')}
...
executable(...
kwargs: options)
```
The above code is identical to this:
```meson
executable(...
include_directories: include_directories('inc'))
```
That is, Meson will expand the dictionary given to `kwargs` as if the
entries in it had been given as keyword arguments directly.
Note that any individual argument can be specified either directly or
with the `kwarg` dict but not both. If a key is specified twice, it
is a hard error.
## Manpages are no longer compressed implicitly
Earlier, the `install_man` command has automatically compressed installed
manpages into `.gz` format. This collided with manpage compression hooks
already used by various distributions. Now, manpages are installed uncompressed
and distributors are expected to handle compressing them according to their own
compression preferences.
## Native config files
Native files (`--native-file`) are the counterpart to cross files (`--cross-file`),
and allow specifying information about the build machine, both when cross compiling
and when not.
2018-12-09 22:32:12 +08:00
Currently the native files only allow specifying the names of binaries, similar
to the cross file, for example:
```ini
[binaries]
llvm-config = "/opt/llvm-custom/bin/llvm-config"
```
Will override the llvm-config used for *native* binaries. Targets for the host
machine will continue to use the cross file.
## Foreach `break` and `continue`
`break` and `continue` keywords can be used inside foreach loops.
```meson
items = ['a', 'continue', 'b', 'break', 'c']
result = []
foreach i : items
if i == 'continue'
continue
elif i == 'break'
break
endif
result += i
endforeach
# result is ['a', 'b']
```
You can check if an array contains an element like this:
```meson
my_array = [1, 2]
if 1 in my_array
# This condition is true
endif
if 1 not in my_array
# This condition is false
endif
```
You can check if a dictionary contains a key like this:
```meson
my_dict = {'foo': 42, 'foo': 43}
if 'foo' in my_dict
# This condition is true
endif
if 42 in my_dict
# This condition is false
endif
if 'foo' not in my_dict
# This condition is false
endif
```
## Joining paths with /
Joining two paths has traditionally been done with the `join_paths` function.
```meson
joined = join_paths('foo', 'bar')
```
Now you can use the simpler notation using the `/` operator.
```meson
joined = 'foo' / 'bar'
```
This only works for strings.
## Position-independent executables
When `b_pie` option, or `executable()`'s `pie` keyword argument is set to
`true`, position-independent executables are built. All their objects are built
with `-fPIE` and the executable is linked with `-pie`. Any static library they
link must be built with `pic` set to `true` (see `b_staticpic` option).
## Deprecation warning in pkg-config generator
All libraries passed to the `libraries` keyword argument of the `generate()`
method used to be associated with that generated pkg-config file. That means
that any subsequent call to `generate()` where those libraries appear would add
the filebase of the `generate()` that first contained them into `Requires:` or
`Requires.private:` field instead of adding an `-l` to `Libs:` or `Libs.private:`.
This behaviour is now deprecated. The library that should be associated with
the generated pkg-config file should be passed as first positional argument
instead of in the `libraries` keyword argument. The previous behaviour is
maintained but prints a deprecation warning and support for this will be removed
in a future Meson release. If you can not create the needed pkg-config file
without this warning, please file an issue with as much details as possible
about the situation.
For example this sample will write `Requires: liba` into `libb.pc` but print a
deprecation warning:
```meson
liba = library(...)
pkg.generate(libraries : liba)
libb = library(...)
pkg.generate(libraries : [liba, libb])
```
It can be fixed by passing `liba` as first positional argument::
```meson
liba = library(...)
pkg.generate(liba)
libb = library(...)
pkg.generate(libb, libraries : [liba])
```
## Subprojects download, checkout, update command-line
New command-line tool has been added to manage subprojects:
- `meson subprojects download` to download all subprojects that have a wrap file.
- `meson subprojects update` to update all subprojects to latest version.
- `meson subprojects checkout` to checkout or create a branch in all git subprojects.
## New keyword argument `is_default` to `add_test_setup()`
The keyword argument `is_default` may be used to set whether the test
setup should be used by default whenever `meson test` is run without
the `--setup` option.
```meson
add_test_setup('default', is_default: true, env: 'G_SLICE=debug-blocks')
add_test_setup('valgrind', env: 'G_SLICE=always-malloc', ...)
test('mytest', exe)
```
For the example above, running `meson test` and `meson test
--setup=default` is now equivalent.