aboutsummaryrefslogtreecommitdiffstats
path: root/meson/docs/markdown/Release-notes-for-0.46.0.md
diff options
context:
space:
mode:
authorAngelos Mouzakitis <a.mouzakitis@virtualopensystems.com>2023-10-10 14:33:42 +0000
committerAngelos Mouzakitis <a.mouzakitis@virtualopensystems.com>2023-10-10 14:33:42 +0000
commitaf1a266670d040d2f4083ff309d732d648afba2a (patch)
tree2fc46203448ddcc6f81546d379abfaeb323575e9 /meson/docs/markdown/Release-notes-for-0.46.0.md
parente02cda008591317b1625707ff8e115a4841aa889 (diff)
Add submodule dependency filesHEADmaster
Change-Id: Iaf8d18082d3991dec7c0ebbea540f092188eb4ec
Diffstat (limited to 'meson/docs/markdown/Release-notes-for-0.46.0.md')
-rw-r--r--meson/docs/markdown/Release-notes-for-0.46.0.md329
1 files changed, 329 insertions, 0 deletions
diff --git a/meson/docs/markdown/Release-notes-for-0.46.0.md b/meson/docs/markdown/Release-notes-for-0.46.0.md
new file mode 100644
index 000000000..64e237d0e
--- /dev/null
+++ b/meson/docs/markdown/Release-notes-for-0.46.0.md
@@ -0,0 +1,329 @@
+---
+title: Release 0.46
+short-description: Release notes for 0.46
+...
+
+# New features
+
+## Allow early return from a script
+
+Added the function `subdir_done()`. Its invocation exits the current
+script at the point of invocation. All previously invoked build
+targets and commands are build/executed. All following ones are
+ignored. If the current script was invoked via `subdir()` the parent
+script continues normally.
+
+## Log output slightly changed
+
+The format of some human-readable diagnostic messages has changed in
+minor ways. In case you are parsing these messages, you may need to
+adjust your code.
+
+## ARM compiler for C and CPP
+
+Cross-compilation is now supported for ARM targets using ARM compiler
+- ARMCC. The current implementation does not support shareable
+libraries. The default extension of the output is .axf. The
+environment path should be set properly for the ARM compiler
+executables. The '--cpu' option with the appropriate target type
+should be mentioned in the cross file as shown in the snippet below.
+
+```ini
+[properties]
+c_args = ['--cpu=Cortex-M0plus']
+cpp_args = ['--cpu=Cortex-M0plus']
+
+```
+
+## Building both shared and static libraries
+
+A new function `both_libraries()` has been added to build both shared
+and static libraries at the same time. Source files will be compiled
+only once and object files will be reused to build both shared and
+static libraries, unless `b_staticpic` user option or `pic:` keyword
+argument are set to false in which case sources will be compiled
+twice.
+
+The returned `buildtarget` object always represents the shared library.
+
+## Compiler object can now be passed to run_command()
+
+This can be used to run the current compiler with the specified
+arguments to obtain additional information from it. One of the use
+cases is to get the location of development files for the GCC plugins:
+
+```meson
+cc = meson.get_compiler('c')
+result = run_command(cc, '-print-file-name=plugin')
+plugin_dev_path = result.stdout().strip()
+```
+
+## declare_dependency() now supports `link_whole:`
+
+`declare_dependency()` now supports the `link_whole:` keyword argument which
+transparently works for build targets which use that dependency.
+
+## Old command names are now errors
+
+The old executable names `mesonintrospect`, `mesonconf`,
+`mesonrewriter` and `mesontest` have been deprecated for a long time.
+Starting from this version they no longer do anything but instead
+always error out. All functionality is available as subcommands in the
+main `meson` binary.
+
+## Meson and meson configure now accept the same arguments
+
+Previously Meson required that builtin arguments (like prefix) be
+passed as `--prefix` to `meson` and `-Dprefix` to `meson configure`.
+`meson` now accepts -D form like `meson configure` has. `meson
+configure` also accepts the `--prefix` form, like `meson` has.
+
+## Recursively extract objects
+
+The `recursive:` keyword argument has been added to
+`extract_all_objects()`. When set to `true` it will also return
+objects passed to the `objects:` argument of this target. By default
+only objects built for this target are returned to maintain backward
+compatibility with previous versions. The default will eventually be
+changed to `true` in a future version.
+
+```meson
+lib1 = static_library('a', 'source.c', objects : 'prebuilt.o')
+lib2 = static_library('b', objects : lib1.extract_all_objects(recursive : true))
+```
+
+## Can override find_program()
+
+It is now possible to override the result of `find_program` to point
+to a custom program you want. The overriding is global and applies to
+every subproject from there on. Here is how you would use it.
+
+In master project
+
+```meson
+subproject('mydep')
+```
+
+In the called subproject:
+
+```meson
+prog = find_program('my_custom_script')
+meson.override_find_program('mycodegen', prog)
+```
+
+In master project (or, in fact, any subproject):
+
+```meson
+genprog = find_program('mycodegen')
+```
+
+Now `genprog` points to the custom script. If the dependency had come
+from the system, then it would point to the system version.
+
+You can also use the return value of `configure_file()` to override
+a program in the same way as above:
+
+```meson
+prog_script = configure_file(input : 'script.sh.in',
+ output : 'script.sh',
+ configuration : cdata)
+meson.override_find_program('mycodegen', prog_script)
+```
+
+## New functions: has_link_argument() and friends
+
+A new set of methods has been added to [compiler
+objects](Reference-manual.md#compiler-object) to test if the linker
+supports given arguments.
+
+- `has_link_argument()`
+- `has_multi_link_arguments()`
+- `get_supported_link_arguments()`
+- `first_supported_link_argument()`
+
+## "meson help" now shows command line help
+
+Command line parsing is now less surprising. "meson help" is now
+equivalent to "meson --help" and "meson help <subcommand>" is
+equivalent to "meson <subcommand> --help", instead of creating a build
+directory called "help" in these cases.
+
+## Autogeneration of simple meson.build files
+
+A feature to generate a meson.build file compiling given C/C++ source
+files into a single executable has been added to "meson init". By
+default, it will take all recognizable source files in the current
+directory. You can also specify a list of dependencies with the -d
+flag and automatically invoke a build with the -b flag to check if the
+code builds with those dependencies.
+
+For example,
+
+```meson
+meson init -fbd sdl2,gl
+```
+
+will look for C or C++ files in the current directory, generate a
+meson.build for them with the dependencies of sdl2 and gl and
+immediately try to build it, overwriting any previous meson.build and
+build directory.
+
+## install_data() supports `rename:`
+
+The `rename:` keyword argument is used to change names of the installed
+files. Here's how you install and rename the following files:
+
+- `file1.txt` into `share/myapp/dir1/data.txt`
+- `file2.txt` into `share/myapp/dir2/data.txt`
+
+```meson
+install_data(['file1.txt', 'file2.txt'],
+ rename : ['dir1/data.txt', 'dir2/data.txt'],
+ install_dir : 'share/myapp')
+```
+
+## Support for lcc compiler for e2k (Elbrus) architecture
+
+In this version, a support for lcc compiler for Elbrus processors
+based on [e2k
+microarchitecture](https://en.wikipedia.org/wiki/Elbrus_2000) has been
+added.
+
+Examples of such CPUs:
+* [Elbrus-8S](https://en.wikipedia.org/wiki/Elbrus-8S);
+* Elbrus-4S;
+* [Elbrus-2S+](https://en.wikipedia.org/wiki/Elbrus-2S%2B).
+
+Such compiler have a similar behavior as gcc (basic option compatibility),
+but, in is not strictly compatible with gcc as of current version.
+
+Major differences as of version 1.21.22:
+* it does not support LTO and PCH;
+* it suffers from the same dependency file creation error as icc;
+* it has minor differences in output, especially version output;
+* it differently reacts to lchmod() detection;
+* some backend messages are produced in ru_RU.KOI8-R even if LANG=C;
+* its preprocessor treats some characters differently.
+
+So every noted difference is properly handled now in Meson.
+
+## String escape character sequence update
+
+Single-quoted strings in Meson have been taught the same set of escape
+sequences as in Python. It is therefore now possible to use arbitrary
+bytes in strings, like for example `NUL` (`\0`) and other ASCII
+control characters. See the chapter about [*Strings* in
+*Syntax*](Syntax.md#strings) for more details.
+
+Potential backwards compatibility issue: Any valid escape sequence
+according to the new rules will be interpreted as an escape sequence
+instead of the literal characters. Previously only the following
+escape sequences were supported in single-quote strings: `\'`, `\\`
+and `\n`.
+
+Note that the behaviour of triple-quoted (multiline) strings has not
+changed. They behave like raw strings and do not support any escape
+sequences.
+
+## New `forcefallback` wrap mode
+
+A new wrap mode was added, `--wrap-mode=forcefallback`. When this is
+set, dependencies for which a fallback was provided will always use
+it, even if an external dependency exists and satisfies the version
+requirements.
+
+## Relaxing of target name requirements
+
+In earlier versions of Meson you could only have one target of a given
+name for each type. For example you could not have two executables
+named `foo`. This requirement is now relaxed so that you can have
+multiple targets with the same name, as long as they are in different
+subdirectories.
+
+Note that projects that have multiple targets with the same name can
+not be built with the `flat` layout or any backend that writes outputs
+in the same directory.
+
+## Addition of OpenMP dependency
+
+An OpenMP dependency (`openmp`) has been added that encapsulates the
+various flags used by compilers to enable OpenMP and checks for the
+existence of the `omp.h` header. The `language` keyword may be passed
+to force the use of a specific compiler for the checks.
+
+## Added new partial_dependency method to dependencies and libraries
+
+It is now possible to use only part of a dependency in a target. This
+allows, for example, to only use headers with convenience libraries to
+avoid linking to the same library multiple times.
+
+```meson
+dep = dependency('xcb')
+
+helper = static_library(
+ 'helper',
+ ['helper1.c', 'helper2.c'],
+ dependencies : dep.partial_dependency(includes : true),
+]
+
+final = shared_library(
+ 'final',
+ ['final.c'],
+ dependencyes : dep,
+)
+```
+
+A partial dependency will have the same name version as the full
+dependency it is derived from, as well as any values requested.
+
+## Improved generation of pkg-config files for static only libraries.
+
+Previously pkg-config files generated by the pkgconfig modules for
+static libraries with dependencies could only be used in a
+dependencies with `static: true`.
+
+Now the generated file contains the needed dependencies libraries
+directly within `Requires` and `Libs` for build static libraries
+passed via the `libraries` keyword argument.
+
+Projects that install both a static and a shared version of a library
+should use the result of
+[`both_libraries()`](Reference-manual.md#both_libraries) to the
+pkg-config file generator or use
+[`configure_file()`](Reference-manual.md#configure_file) for more
+complicated setups.
+
+## Improvements to pkgconfig module
+
+A `StaticLibrary` or `SharedLibrary` object can optionally be passed
+as first positional argument of the `generate()` method. If one is provided a
+default value will be provided for all required fields of the pc file:
+- `install_dir` is set to `pkgconfig` folder in the same location than the provided library.
+- `description` is set to the project's name followed by the library's name.
+- `name` is set to the library's name.
+
+Generating a .pc file is now as simple as:
+
+```meson
+pkgconfig.generate(mylib)
+```
+
+## pkgconfig.generate() requires parameters non-string arguments
+
+`pkgconfig.generate()` `requires:` and `requires_private:` keyword
+arguments now accept pkgconfig-dependencies and libraries that
+pkgconfig-files were generated for.
+
+## Generic python module
+
+Meson now has is a revamped and generic (python 2 and 3) version of
+the python3 module. With [this new interface](Python-module.md),
+projects can now fully specify the version of python they want to
+build against / install sources to, and can do so against multiple
+major or minor versions in parallel.
+
+## test() now supports the `depends:` keyword argument
+
+Build targets and custom targets can be listed in the `depends:`
+keyword argument of test function. These targets will be built before
+test is run even if they have `build_by_default : false`.