diff options
Diffstat (limited to 'meson/docs/markdown/Release-notes-for-0.49.0.md')
-rw-r--r-- | meson/docs/markdown/Release-notes-for-0.49.0.md | 327 |
1 files changed, 327 insertions, 0 deletions
diff --git a/meson/docs/markdown/Release-notes-for-0.49.0.md b/meson/docs/markdown/Release-notes-for-0.49.0.md new file mode 100644 index 000000000..6b84af19c --- /dev/null +++ b/meson/docs/markdown/Release-notes-for-0.49.0.md @@ -0,0 +1,327 @@ +--- +title: Release 0.49 +short-description: Release notes for 0.49 +... + +# New features + +## Libgcrypt dependency now supports libgcrypt-config + +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. + +## New `section` key for the buildoptions introspection + +Meson now has a new `section` key in each build option. This allows +IDEs to group these options similar to `meson configure`. + +The possible values for `section` are: + + - core + - backend + - base + - compiler + - directory + - user + - test + +## 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 similar 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. + +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 / + +For clarity and conciseness, we recommend using the `/` operator to separate +path elements: + +```meson +joined = 'foo' / 'bar' +``` + +Before Meson 0.49, joining path elements was done with the legacy +`join_paths` function, but the `/` syntax above is now recommended. + +```meson +joined = join_paths('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. |