forked from mesonbuild/meson
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Update everything for release 0.49.0
- Loading branch information
Showing
20 changed files
with
319 additions
and
294 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,22 +1,309 @@ | ||
--- | ||
title: Release 0.49 | ||
short-description: Release notes for 0.49 (preliminary) | ||
short-description: Release notes for 0.49 | ||
... | ||
|
||
# New features | ||
## Libgcrypt dependency now supports libgcrypt-config | ||
|
||
This page is a placeholder for the eventual release notes. | ||
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. | ||
|
||
Notable new features should come with release note updates. This is | ||
done by creating a file snippet called `snippets/featurename.md` and | ||
whose contents should look like this: | ||
## New `section` key for the buildoptions introspection | ||
|
||
## Feature name | ||
Meson now has a new `section` key in each build option. This allows | ||
IDEs to group these options similar to `meson configure`. | ||
|
||
A short description explaining the new feature and how it should be used. | ||
The possible values for `section` are: | ||
|
||
## Libgcrypt dependency now supports libgcrypt-config | ||
- core | ||
- backend | ||
- base | ||
- compiler | ||
- directory | ||
- user | ||
- test | ||
|
||
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. | ||
## 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 | ||
|
||
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 are the counterpart to cross files, and allow specifying | ||
information about the build machine, both when cross compiling and when not. | ||
|
||
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. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,17 @@ | ||
--- | ||
title: Release 0.50 | ||
short-description: Release notes for 0.49 (preliminary) | ||
... | ||
|
||
# New features | ||
|
||
This page is a placeholder for the eventual release notes. | ||
|
||
Notable new features should come with release note updates. This is | ||
done by creating a file snippet called `snippets/featurename.md` and | ||
whose contents should look like this: | ||
|
||
## Feature name | ||
|
||
A short description explaining the new feature and how it should be used. | ||
|
This file was deleted.
Oops, something went wrong.
This file was deleted.
Oops, something went wrong.
This file was deleted.
Oops, something went wrong.
Oops, something went wrong.