aboutsummaryrefslogtreecommitdiffstats
path: root/meson/docs/markdown/Release-notes-for-0.49.0.md
diff options
context:
space:
mode:
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.md327
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.