commit
c73863fca2
1292 changed files with 24094 additions and 11466 deletions
@ -0,0 +1,8 @@ |
||||
{ |
||||
"base_image": "gentoo/stage3:desktop", |
||||
"env": { |
||||
"CI": "1", |
||||
"MESON_CI_JOBNAME": "linux-gentoo-gcc", |
||||
"SKIP_STATIC_BOOST": "1" |
||||
} |
||||
} |
@ -0,0 +1,167 @@ |
||||
#!/bin/bash |
||||
set -e |
||||
|
||||
source /ci/common.sh |
||||
|
||||
# We divide the package list into 'pkgs_stable' and 'pkgs_latest'. The trade-off |
||||
# is that latest stuff may not have a binpkg available, but of course we get |
||||
# better test coverage with the bleeding edge then. |
||||
pkgs_stable=( |
||||
app-portage/portage-utils |
||||
dev-build/cmake |
||||
dev-vcs/git |
||||
|
||||
# language support |
||||
dev-python/cython |
||||
dev-python/lxml |
||||
dev-python/pip |
||||
virtual/fortran |
||||
dev-lang/nasm |
||||
dev-lang/vala |
||||
dev-lang/python:2.7 |
||||
dev-java/openjdk-bin |
||||
# requires rustfmt, bin rebuild (TODO: file bug) |
||||
#dev-util/bindgen |
||||
|
||||
dev-libs/elfutils |
||||
dev-util/gdbus-codegen |
||||
dev-libs/gobject-introspection |
||||
dev-util/itstool |
||||
dev-libs/protobuf |
||||
|
||||
# custom deps |
||||
net-libs/libpcap |
||||
dev-util/gtk-doc |
||||
media-libs/libwmf |
||||
sys-cluster/openmpi |
||||
sci-libs/netcdf |
||||
media-libs/libsdl2 |
||||
dev-cpp/gtest |
||||
sci-libs/hdf5 |
||||
dev-qt/linguist-tools |
||||
sys-devel/llvm |
||||
dev-qt/qttools |
||||
|
||||
# misc |
||||
app-admin/sudo |
||||
app-text/doxygen |
||||
sys-apps/fakeroot |
||||
sys-devel/bison |
||||
sys-devel/gettext |
||||
|
||||
# TODO: vulkan-validation-layers |
||||
# TODO: cuda |
||||
#dev-cpp/gtkmm:3.0 |
||||
#dev-java/openjdk-bin:8 |
||||
#dev-lang/go |
||||
#dev-lang/mono |
||||
#dev-lang/python |
||||
#dev-lang/rust-bin |
||||
#dev-libs/wayland |
||||
#dev-libs/wayland-protocols |
||||
#dev-python/pypy3 |
||||
#dev-qt/qtbase:6 |
||||
#dev-qt/qtcore:5 |
||||
#dev-qt/qttools:6 |
||||
#dev-vcs/mercurial |
||||
#gnustep-base/gnustep-base |
||||
#media-gfx/graphviz |
||||
#sci-libs/netcdf-fortran |
||||
#sys-devel/clang |
||||
#x11-libs/gtk+:3 |
||||
) |
||||
pkgs_latest=( |
||||
# ~arch boost needed for py3.12 for now (needs 1.84) |
||||
dev-build/b2 |
||||
dev-libs/boost |
||||
|
||||
dev-build/autoconf |
||||
dev-build/automake |
||||
|
||||
# ~arch only |
||||
sci-libs/scalapack |
||||
) |
||||
pkgs=( "${pkgs_stable[@]}" "${pkgs_latest[@]}" ) |
||||
|
||||
emerge-webrsync --quiet |
||||
|
||||
# This means we can't really take advantage of the binhost but a lot of the |
||||
# advantages of using Gentoo in CI come from the bleeding edge side. |
||||
# With full ~arch, we don't get binpkgs for much at all. Instead, let's just |
||||
# do ~arch for the test deps we have. |
||||
#echo 'ACCEPT_KEYWORDS="~amd64"' >> /etc/portage/make.conf |
||||
|
||||
printf "%s\n" ${pkgs[@]} >> /var/lib/portage/world |
||||
printf "%s\n" ${pkgs_latest[@]} >> /etc/portage/package.accept_keywords/meson |
||||
cat /etc/portage/package.accept_keywords/meson |
||||
|
||||
cat <<-EOF > /etc/portage/package.accept_keywords/misc |
||||
dev-lang/python-exec |
||||
dev-lang/python |
||||
EOF |
||||
|
||||
mkdir /etc/portage/binrepos.conf || true |
||||
mkdir /etc/portage/profile || true |
||||
cat <<-EOF > /etc/portage/package.use/ci |
||||
dev-cpp/gtkmm X |
||||
|
||||
dev-libs/boost python |
||||
sys-libs/zlib static-libs |
||||
EOF |
||||
|
||||
cat <<-EOF >> /etc/portage/make.conf |
||||
EMERGE_DEFAULT_OPTS="--complete-graph --quiet=y --quiet-build=y --jobs=$(nproc) --load-average=$(nproc)" |
||||
EMERGE_DEFAULT_OPTS="\${EMERGE_DEFAULT_OPTS} --autounmask-write --autounmask-continue --autounmask-keep-keywords=y --autounmask-use=y" |
||||
EMERGE_DEFAULT_OPTS="\${EMERGE_DEFAULT_OPTS} --binpkg-respect-use=y" |
||||
|
||||
# prevent painfully verbose Github Actions logs. |
||||
FETCHCOMMAND='wget --no-show-progress -t 3 -T 60 --passive-ftp -O "\\\${DISTDIR}/\\\${FILE}" "\\\${URI}"' |
||||
|
||||
# Fortran is no longer enabled by default in 23.0, but we do need and use it. |
||||
USE="\${USE} fortran" |
||||
|
||||
FEATURES="\${FEATURES} parallel-fetch parallel-install -merge-sync" |
||||
FEATURES="\${FEATURES} getbinpkg binpkg-request-signature" |
||||
|
||||
# These don't work in Docker, so reduce noise in logs |
||||
FEATURES="\${FEATURES} -ipc-sandbox -network-sandbox -pid-sandbox" |
||||
EOF |
||||
|
||||
# TODO: Enable all Pythons / add multiple jobs with diff. Python impls? |
||||
#echo '*/* PYTHON_TARGETS: python3_10 python3_11 python3_12' >> /etc/portage/package.use/python |
||||
echo '*/* PYTHON_TARGETS: python3_12' >> /etc/portage/package.use/python |
||||
cat <<-EOF >> /etc/portage/profile/use.mask |
||||
-python_targets_python3_12 |
||||
-python_single_target_python3_12 |
||||
EOF |
||||
cat <<-EOF >> /etc/portage/profile/use.stable.mask |
||||
-python_targets_python3_12 |
||||
-python_single_target_python3_12 |
||||
EOF |
||||
|
||||
echo 'dev-lang/python ensurepip' >> /etc/portage/package.use/python |
||||
|
||||
# Silly mono circular dep |
||||
#USE=minimal emerge --oneshot dev-lang/mono |
||||
|
||||
# If we don't want to do this, we could use the 'portage' container instead |
||||
# so the stage3/repo match. |
||||
emerge --update --deep --changed-use @world |
||||
qlop -d 'yesterday' |
||||
|
||||
env-update && . /etc/profile |
||||
|
||||
rm /usr/lib/python/EXTERNALLY-MANAGED |
||||
python3 -m ensurepip |
||||
install_python_packages |
||||
python3 -m pip install "${base_python_pkgs[@]}" |
||||
|
||||
echo "source /etc/profile" >> /ci/env_vars.sh |
||||
|
||||
# Cleanup to avoid including large contents in the docker image. |
||||
# We don't need cache files that are side artifacts of installing packages. |
||||
# We also don't need the gentoo tree -- the official docker image doesn't |
||||
# either, and expects you to use emerge-webrsync once you need it. |
||||
rm -rf /var/cache/binpkgs |
||||
rm -rf /var/cache/distfiles |
||||
rm -rf /var/db/repos/gentoo |
@ -1,19 +1,5 @@ |
||||
# SPDX-License-Identifier: Apache-2.0 |
||||
# Copyright 2021 The Meson development team |
||||
|
||||
# Licensed under the Apache License, Version 2.0 (the "License"); |
||||
# you may not use this file except in compliance with the License. |
||||
# You may obtain a copy of the License at |
||||
|
||||
# http://www.apache.org/licenses/LICENSE-2.0 |
||||
|
||||
# Unless required by applicable law or agreed to in writing, software |
||||
# distributed under the License is distributed on an "AS IS" BASIS, |
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||
# See the License for the specific language governing permissions and |
||||
# limitations under the License. |
||||
|
||||
# This script is used by coverage (see tools/run_with_cov.py) to enable coverage |
||||
# reports in python subprocesses |
||||
|
||||
import coverage |
||||
coverage.process_startup() |
||||
|
@ -0,0 +1,22 @@ |
||||
# Cross file tested on Texas Instruments C6000 compiler (bare metal DSP devices) |
||||
# This file assumes that path to the Texas Instruments C6000 toolchain is added |
||||
# to the environment(PATH) variable. |
||||
|
||||
[host_machine] |
||||
system = 'c6000' |
||||
cpu_family = 'c6000' |
||||
cpu = 'c64x' |
||||
endian = 'little' |
||||
|
||||
[binaries] |
||||
c = 'cl6x' |
||||
cpp = 'cl6x' |
||||
ar = 'ar6x' |
||||
strip = 'strip6x' |
||||
nm = 'nm6x' |
||||
as = 'asm6x' |
||||
|
||||
[properties] |
||||
needs_exe_wrapper = true |
||||
has_function_printf = true |
||||
bits = 32 |
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,338 @@ |
||||
--- |
||||
title: Release 1.3.0 |
||||
short-description: Release notes for 1.3.0 |
||||
... |
||||
|
||||
# New features |
||||
|
||||
Meson 1.3.0 was released on 19 November 2023 |
||||
## Clarify implicitly-included headers in C-like compiler checks |
||||
|
||||
Compiler check methods `compiler.compute_int()`, `compiler.alignment()` |
||||
and `compiler.sizeof()` now have their implicitly-included headers |
||||
corrected and documented. |
||||
|
||||
`<stdio.h>` was included unintentionally when cross-compiling, which |
||||
is less than ideal because there is no guarantee that a standard library |
||||
is available for the target platform. Only `<stddef.h>` is included instead. |
||||
|
||||
For projects that depend on the old behavior, the compiler check methods |
||||
have an optional argument `prefix`, which can be used to specify additional |
||||
`#include` directives. |
||||
|
||||
## Treat warnings as error in compiler checks |
||||
|
||||
Compiler check methods `compiler.compiles()`, `compiler.links()` and `compiler.run()` |
||||
now have a new `werror: true` keyword argument to treat compiler warnings as error. |
||||
This can be used to check if code compiles without warnings. |
||||
|
||||
## Compilers now have a `has_define` method |
||||
|
||||
This method returns true if the given preprocessor symbol is |
||||
defined, else false is returned. This is useful is cases where |
||||
an empty define has to be distinguished from a non-set one, which |
||||
is not possible using `get_define`. |
||||
|
||||
Additionally it makes intent clearer for code that only needs |
||||
to check if a specific define is set at all and does not care |
||||
about its value. |
||||
|
||||
## [[configure_file]] now has a `macro_name` parameter. |
||||
|
||||
This new parameter, `macro_name` allows C macro-style include guards to be added |
||||
to [[configure_file]]'s output when a template file is not given. This change |
||||
simplifies the creation of configure files that define macros with dynamic names |
||||
and want the C-style include guards. |
||||
|
||||
## `c_std` and `cpp_std` options now accepts a list of values |
||||
|
||||
Projects that prefer GNU C, but can fallback to ISO C, can now set, for |
||||
example, `default_options: 'c_std=gnu11,c11'`, and it will use `gnu11` when |
||||
available, but fallback to `c11` otherwise. It is an error only if none of the |
||||
values are supported by the current compiler. |
||||
|
||||
Likewise, a project that can take benefit of `c++17` but can still build with |
||||
`c++11` can set `default_options: 'cpp_std=c++17,c++11'`. |
||||
|
||||
This allows us to deprecate `gnuXX` values from the MSVC compiler. That means |
||||
that `default_options: 'c_std=gnu11'` will now print a warning with MSVC |
||||
but fallback to `c11`. No warning is printed if at least one |
||||
of the values is valid, i.e. `default_options: 'c_std=gnu11,c11'`. |
||||
|
||||
In the future that deprecation warning will become an hard error because |
||||
`c_std=gnu11` should mean GNU is required, for projects that cannot be |
||||
built with MSVC for example. |
||||
|
||||
## More meaningful description of many generative tasks |
||||
|
||||
When a module uses a `CustomTarget` to process files, it now has the possibility |
||||
to customize the message displayed by ninja. |
||||
|
||||
Many modules were updated to take advantage of this new feature. |
||||
|
||||
## Deprecate 'jar' as a build_target type |
||||
|
||||
The point of `build_target()` is that what is produced can be conditionally |
||||
changed. However, `jar()` has a significant number of non-overlapping arguments |
||||
from other build_targets, including the kinds of sources it can include. Because |
||||
of this crafting a `build_target` that can be used as a Jar and as something |
||||
else is incredibly hard to do. As such, it has been deprecated, and using |
||||
`jar()` directly is recommended. |
||||
|
||||
## generator.process() gains 'env' keyword argument |
||||
|
||||
Like the kwarg of the same name in `custom_target()`, `env` allows |
||||
you to set the environment in which the generator will process inputs. |
||||
|
||||
## Target names for executables now take into account suffixes. |
||||
|
||||
In previous versions of meson, a `meson.build` file like this: |
||||
|
||||
``` |
||||
executable('foo', 'main.c') |
||||
executable('foo', 'main.c', name_suffix: 'bar') |
||||
``` |
||||
|
||||
would result in a configure error because meson internally used |
||||
the same id for both executables. This build file is now allowed |
||||
since meson takes into account the `bar` suffix when generating the |
||||
second executable. This allows for executables with the same basename |
||||
but different suffixes to be built in the same subdirectory. |
||||
|
||||
## Executable gains vs_module_defs keyword |
||||
|
||||
This allows using a .def file to control which functions an [[executable]] will |
||||
expose to a [[shared_module]]. |
||||
|
||||
## find_program() now supports the 'default_options' argument |
||||
|
||||
In a similar fashion as dependency(), find_program() now also allows you to set default |
||||
options for the subproject that gets built in case of a fallback. |
||||
|
||||
## `fs.relative_to()` |
||||
|
||||
The `fs` module now has a `relative_to` method. The method will return the |
||||
relative path from argument one to argument two, if one exists. Otherwise, the |
||||
absolute path to argument one is returned. |
||||
|
||||
```meson |
||||
assert(fs.relative_to('c:\\prefix\\lib', 'c:\\prefix\\bin') == '..\\lib') |
||||
assert(fs.relative_to('c:\\proj1\\foo', 'd:\\proj1\\bar') == 'c:\\proj1\\foo') |
||||
assert(fs.relative_to('prefix\\lib\\foo', 'prefix') == 'lib\\foo') |
||||
|
||||
assert(fs.relative_to('/prefix/lib', '/prefix/bin') == '../lib') |
||||
assert(fs.relative_to('prefix/lib/foo', 'prefix') == 'lib/foo') |
||||
``` |
||||
|
||||
In addition to strings, it can handle files, custom targets, custom target |
||||
indices, and build targets. |
||||
|
||||
## Added follow_symlinks arg to install_data, install_header, and install_subdir |
||||
|
||||
The [[install_data]], [[install_headers]], [[install_subdir]] functions now |
||||
have an optional argument `follow_symlinks` that, if set to `true`, makes it so |
||||
symbolic links in the source are followed, rather than copied into the |
||||
destination tree, to match the old behavior. The default, which is currently |
||||
to follow links, is subject to change in the future. |
||||
|
||||
## Added 'fill' kwarg to int.to_string() |
||||
|
||||
int.to_string() now accepts a `fill` argument. This allows you to pad the |
||||
string representation of the integer with leading zeroes: |
||||
|
||||
```meson |
||||
n = 4 |
||||
message(n.to_string()) |
||||
message(n.to_string(fill: 3)) |
||||
|
||||
n = -4 |
||||
message(n.to_string(fill: 3)) |
||||
``` |
||||
|
||||
OUTPUT: |
||||
```meson |
||||
4 |
||||
004 |
||||
-04 |
||||
``` |
||||
|
||||
## Added 'json' output_format to configure_file() |
||||
|
||||
When no input file is specified, [[configure_file]] can now |
||||
generate a `json` file from given [[@cfg_data]]. |
||||
Field descriptions are not preserved in the json file. |
||||
|
||||
## `@GLOBAL_SOURCE_ROOT@` and `@DIRNAME@` in machine files |
||||
|
||||
Some tokens are now replaced in the machine file before parsing it: |
||||
- `@GLOBAL_SOURCE_ROOT@`: the absolute path to the project's source tree |
||||
- `@DIRNAME@`: the absolute path to the machine file's parent directory. |
||||
|
||||
It can be used, for example, to have paths relative to the source directory, or |
||||
relative to toolchain's installation directory. |
||||
```ini |
||||
[binaries] |
||||
c = '@DIRNAME@/toolchain/gcc' |
||||
exe_wrapper = '@GLOBAL_SOURCE_ROOT@' / 'build-aux' / 'my-exe-wrapper.sh' |
||||
``` |
||||
|
||||
## clang-tidy-fix target |
||||
|
||||
If `clang-tidy` is installed and the project's source root contains a |
||||
`.clang-tidy` (or `_clang-tidy`) file, Meson will automatically define |
||||
a `clang-tidy-fix` target that runs `run-clang-tidy` tool with `-fix` |
||||
option to apply the changes found by clang-tidy to the source code. |
||||
|
||||
If you have defined your own `clang-tidy-fix` target, Meson will not |
||||
generate its own target. |
||||
|
||||
## Meson compile command now accepts suffixes for TARGET |
||||
|
||||
The syntax for specifying a target for meson compile is now |
||||
`[PATH_TO_TARGET/]TARGET_NAME.TARGET_SUFFIX[:TARGET_TYPE]` where |
||||
`TARGET_SUFFIX` is the suffix argument given in the build target |
||||
within meson.build. It is optional and `TARGET_NAME` remains |
||||
sufficient if it uniquely resolves to one single target. |
||||
|
||||
## New environment variable `MESON_PACKAGE_CACHE_DIR` |
||||
|
||||
If the `MESON_PACKAGE_CACHE_DIR` environment variable is set, it is used instead of the |
||||
project's `subprojects/packagecache`. This allows sharing the cache across multiple |
||||
projects. In addition it can contain an already extracted source tree as long as it |
||||
has the same directory name as the `directory` field in the wrap file. In that |
||||
case, the directory will be copied into `subprojects/` before applying patches. |
||||
|
||||
## Update options with `meson setup <builddir> -Dopt=value` |
||||
|
||||
If the build directory already exists, options are updated with their new value |
||||
given on the command line (`-Dopt=value`). Unless `--reconfigure` is also specified, |
||||
this won't reconfigure immediately. This has the same behaviour as |
||||
`meson configure <builddir> -Dopt=value`. |
||||
|
||||
Previous Meson versions were simply a no-op. |
||||
|
||||
## Clear persistent cache with `meson setup --clearcache` |
||||
|
||||
Just like `meson configure --clearcache`, it is now possible to clear the cache |
||||
and reconfigure in a single command with `meson setup --clearcache --reconfigure <builddir>`. |
||||
|
||||
## pkg-config dependencies can now get a variable with multiple replacements |
||||
|
||||
When using [[dep.get_variable]] and defining a `pkgconfig_define`, it is |
||||
sometimes useful to remap multiple dependency variables. For example, if the |
||||
upstream project changed the variable name that is interpolated and it is |
||||
desirable to support both versions. |
||||
|
||||
It is now possible to pass multiple pairs of variable/value. |
||||
|
||||
The same applies to the compatibility [[dep.get_pkgconfig_variable]] method. |
||||
|
||||
## Machine files: `pkgconfig` field deprecated and replaced by `pkg-config` |
||||
|
||||
Meson used to allow both `pkgconfig` and `pkg-config` entries in machine files, |
||||
the former was used for `dependency()` lookup and the latter was used as return |
||||
value for `find_program('pkg-config')`. |
||||
|
||||
This inconsistency is now fixed by deprecating `pkgconfig` in favor of |
||||
`pkg-config` which matches the name of the binary. For backward compatibility |
||||
it is still allowed to define both with the same value, in that case no |
||||
deprecation warning is printed. |
||||
|
||||
## Support targeting Python's limited C API |
||||
|
||||
The Python module's `extension_module` function has gained the ability |
||||
to build extensions which target Python's limited C API via a new keyword |
||||
argument: `limited_api`. |
||||
|
||||
## All compiler `has_*` methods support the `required` keyword |
||||
|
||||
Now instead of |
||||
|
||||
```meson |
||||
assert(cc.has_function('some_function')) |
||||
assert(cc.has_type('some_type')) |
||||
assert(cc.has_member('struct some_type', 'x')) |
||||
assert(cc.has_members('struct some_type', ['x', 'y'])) |
||||
``` |
||||
|
||||
we can use |
||||
|
||||
```meson |
||||
cc.has_function('some_function', required: true) |
||||
cc.has_type('some_type', required: true) |
||||
cc.has_member('struct some_type', 'x', required: true) |
||||
cc.has_members('struct some_type', ['x', 'y'], required: true) |
||||
``` |
||||
|
||||
## Deprecated `rust_crate_type` and replaced by `rust_abi` |
||||
|
||||
The new `rust_abi` keyword argument is accepted by [[shared_library]], |
||||
[[static_library]], [[library]] and [[shared_module]] functions. It can be either |
||||
`'rust'` (the default) or `'c'` strings. |
||||
|
||||
`rust_crate_type` is now deprecated because Meson already knows if it's a shared |
||||
or static library, user only need to specify the ABI (Rust or C). |
||||
|
||||
`proc_macro` crates are now handled by the [`rust.proc_macro()`](Rust-module.md#proc_macro) |
||||
method. |
||||
|
||||
## Tests now abort on errors by default under sanitizers |
||||
|
||||
Sanitizers like AddressSanitizer and UndefinedBehaviorSanitizer do not abort |
||||
by default on detected violations. Meson now exports `ASAN_OPTIONS` and `UBSAN_OPTIONS` |
||||
when unset in the environment to provide sensible abort-by-default behavior. |
||||
|
||||
## `<lang>_(shared|static)_args` for both_library, library, and build_target |
||||
|
||||
We now allow passing arguments like `c_static_args` and `c_shared_args`. This |
||||
allows a [[both_libraries]] to have arguments specific to either the shared or |
||||
static library, as well as common arguments to both. |
||||
|
||||
There is a drawback to this, since Meson now cannot re-use object files between |
||||
the static and shared targets. This could lead to much higher compilation time |
||||
when using a [[both_libraries]] if there are many sources. |
||||
|
||||
## `-j` shorthand for `--num-processes` |
||||
|
||||
`-j` now means the same thing as `--num-processes`. It was inconsistently |
||||
supported only in some subcommands. Now you may use it everywhere |
||||
|
||||
## Unified message(), str.format() and f-string formatting |
||||
|
||||
They now all support the same set of values: strings, integers, bools, options, |
||||
dictionaries and lists thereof. |
||||
|
||||
- Feature options (i.e. enabled, disabled, auto) were not previously supported |
||||
by any of those functions. |
||||
- Lists and dictionaries were not previously supported by f-string. |
||||
- str.format() allowed any type and often resulted in printing the internal |
||||
representation which is now deprecated. |
||||
|
||||
## Subprojects excluded from scan-build reports |
||||
|
||||
The `scan-build` target, created when using the `ninja` backend with `scan-build` |
||||
present, now excludes bugs found in subprojects from its final report. |
||||
|
||||
## vs_module_defs keyword now supports indexes of custom_target |
||||
|
||||
This means you can do something like: |
||||
```meson |
||||
defs = custom_target('generate_module_defs', ...) |
||||
shared_library('lib1', vs_module_defs : defs[0]) |
||||
shared_library('lib2', vs_module_defs : defs[2]) |
||||
``` |
||||
|
||||
## Automatic fallback to `cmake` and `cargo` subproject |
||||
|
||||
CMake subprojects have been supported for a while using the `cmake.subproject()` |
||||
module method. However until now it was not possible to use a CMake subproject |
||||
as fallback in a `dependency()` call. |
||||
|
||||
A wrap file can now specify the method used to build it by setting the `method` |
||||
key in the wrap file's first section. The method defaults to `meson`. |
||||
|
||||
Supported methods: |
||||
- `meson` requires `meson.build` file. |
||||
- `cmake` requires `CMakeLists.txt` file. [See details](Wrap-dependency-system-manual.md#cmake-wraps). |
||||
- `cargo` requires `Cargo.toml` file. [See details](Wrap-dependency-system-manual.md#cargo-wraps). |
||||
|
@ -0,0 +1,111 @@ |
||||
--- |
||||
title: Release 1.4.0 |
||||
short-description: Release notes for 1.4.0 |
||||
... |
||||
|
||||
# New features |
||||
|
||||
Meson 1.4.0 was released on 12 March 2024 |
||||
|
||||
## Added support for `[[@build_tgt]]`, `[[@custom_tgt]]`, and `[[@custom_idx]]` to certain FS module functions |
||||
|
||||
Support for `[[@build_tgt]]`, `[[@custom_tgt]]`, and `[[@custom_idx]]` was |
||||
added to the following FS module APIs: |
||||
|
||||
- `fs.name` |
||||
- `fs.parent` |
||||
- `fs.replace_suffix` |
||||
- `fs.stem` |
||||
|
||||
## Meson now reads the project version of cmake subprojects |
||||
|
||||
CMake subprojects configured by meson will now have their project |
||||
version set to the project version in their CMakeLists.txt. This |
||||
allows version constraints to be properly checked when falling back to |
||||
a cmake subproject. |
||||
|
||||
## `ndebug` setting now controls C++ stdlib assertions |
||||
|
||||
The `ndebug` setting, if disabled, now passes preprocessor defines to enable |
||||
debugging assertions within the C++ standard library. |
||||
|
||||
For GCC, `-D_GLIBCXX_ASSERTIONS=1` is set. |
||||
|
||||
For Clang, `-D_GLIBCXX_ASSERTIONS=1` is set to cover libstdc++ usage, |
||||
and `-D_LIBCPP_HARDENING_MODE=_LIBCPP_HARDENING_MODE_EXTENSIVE` or |
||||
`-D_LIBCPP_ENABLE_ASSERTIONS=1` is used depending on the Clang version. |
||||
|
||||
## `stldebug` gains Clang support |
||||
|
||||
For Clang, we now pass `-D_GLIBCXX_DEBUG=1` if `debugstl` is enabled, and |
||||
we also pass `-D_LIBCPP_HARDENING_MODE=_LIBCPP_HARDENING_MODE_DEBUG`. |
||||
|
||||
## New `unset()` method on `environment` objects |
||||
|
||||
[[@env]] now has an [[env.unset]] method to ensure an existing environment |
||||
is *not* defined. |
||||
|
||||
## File object now has `full_path()` method |
||||
|
||||
Returns a full path pointing to the file. This is useful for printing the path |
||||
with e.g [[message]] function for debugging purpose. |
||||
|
||||
**NOTE:** In most cases using the object itself will do the same job |
||||
as this and will also allow Meson to setup dependencies correctly. |
||||
|
||||
## New numpy custom dependency |
||||
|
||||
Support for `dependency('numpy')` was added, via supporting the `numpy-config` tool and |
||||
pkg-config support, both of which are available since NumPy 2.0.0. |
||||
|
||||
Config-tool support is useful because it will work out of the box when |
||||
``numpy`` is installed, while the pkg-config file is located inside python's |
||||
site-packages, which makes it impossible to use in an out of the box manner |
||||
without setting `PKG_CONFIG_PATH`. |
||||
|
||||
## `depends` kwarg now supported by compiler.preprocess() |
||||
|
||||
It is now possible to specify the dependent targets with `depends:` |
||||
for compiler.preprocess(). These targets should be built before the |
||||
preprocessing starts. |
||||
|
||||
## Added `preserve_paths` keyword argument to qt module functions. |
||||
|
||||
In `qt4`, `qt5`, and `qt6` modules, `compile_ui`, `compile_moc`, and |
||||
`preprocess` functions now have a `preserve_paths` keyword argument. |
||||
|
||||
If `'true`, it specifies that the output files need to maintain their directory |
||||
structure inside the target temporary directory. For instance, when a file |
||||
called `subdir/one.input` is processed it generates a file |
||||
`{target private directory}/subdir/one.out` when `true`, |
||||
and `{target private directory}/one.out` when `false` (default). |
||||
|
||||
## Bindgen will now use Meson's heuristic for what is a C++ header |
||||
|
||||
Bindgen natively assumes that a file with the extension `.hpp` is a C++ header, |
||||
but that everything else is a C header. Meson has a whole list of extensions it |
||||
considers to be C++, and now will automatically look for those extensions and |
||||
set bindgen to treat those as C++ |
||||
|
||||
## Overriding bindgen language setting |
||||
|
||||
Even though Meson will now tell bindgen to do the right thing in most cases, |
||||
there may still be cases where Meson does not have the intended behavior, |
||||
specifically with headers with a `.h` suffix, but are C++ headers. |
||||
|
||||
## Bindgen now uses the same C/C++ std as the project as a whole |
||||
|
||||
Which is very important for C++ bindings. |
||||
|
||||
## Tests now abort on errors by default under more sanitizers |
||||
|
||||
Sanitizers like MemorySanitizer do not abort |
||||
by default on detected violations. Meson now exports `MSAN_OPTIONS` (in addition to |
||||
`ASAN_OPTIONS` and `UBSAN_OPTIONS` from a previous release) when unset in the |
||||
environment to provide sensible abort-by-default behavior. |
||||
|
||||
## Use `custom_target` as test executable |
||||
|
||||
The [[test]] function now accepts [[@custom_tgt]] and [[@custom_idx]] for the |
||||
command to execute. |
||||
|
@ -0,0 +1,214 @@ |
||||
--- |
||||
title: Release 1.5.0 |
||||
short-description: Release notes for 1.5.0 |
||||
... |
||||
|
||||
# New features |
||||
|
||||
Meson 1.5.0 was released on 10 July 2024 |
||||
## Support for `bztar` in `meson dist` |
||||
|
||||
The `bztar` format is now supported in `meson dist`. This format is also known |
||||
as `bzip2`. |
||||
|
||||
## Cargo dependencies names now include the API version |
||||
|
||||
Cargo dependencies names are now in the format `<package_name>-<version>-rs`: |
||||
- `package_name` is defined in `[package] name = ...` section of the `Cargo.toml`. |
||||
- `version` is the API version deduced from `[package] version = ...` as follow: |
||||
* `x.y.z` -> 'x' |
||||
* `0.x.y` -> '0.x' |
||||
* `0.0.x` -> '0' |
||||
It allows to make different dependencies for incompatible versions of the same |
||||
crate. |
||||
- `-rs` suffix is added to distinguish from regular system dependencies, for |
||||
example `gstreamer-1.0` is a system pkg-config dependency and `gstreamer-0.22-rs` |
||||
is a Cargo dependency. |
||||
|
||||
That means the `.wrap` file should have `dependency_names = foo-1-rs` in their |
||||
`[provide]` section when `Cargo.toml` has package name `foo` and version `1.2`. |
||||
|
||||
This is a breaking change (Cargo subprojects are still experimental), previous |
||||
versions were using `<package_name>-rs` format. |
||||
|
||||
## Added support `Cargo.lock` file |
||||
|
||||
When a (sub)project has a `Cargo.lock` file at its root, it is loaded to provide |
||||
an automatic fallback for dependencies it defines, fetching code from |
||||
https://crates.io or git. This is identical as providing `subprojects/*.wrap`, |
||||
see [cargo wraps](Wrap-dependency-system-manual.md#cargo-wraps) dependency naming convention. |
||||
|
||||
## Meson now propagates its build type to CMake |
||||
|
||||
When the CMake build type variable, `CMAKE_BUILD_TYPE`, is not set via the |
||||
`add_cmake_defines` method of the [`cmake options` object](CMake-module.md#cmake-options-object), |
||||
it is inferred from the [Meson build type](Builtin-options.md#details-for-buildtype). |
||||
Build types of the two build systems do not match perfectly. The mapping from |
||||
Meson build type to CMake build type is as follows: |
||||
|
||||
- `debug` -> `Debug` |
||||
- `debugoptimized` -> `RelWithDebInfo` |
||||
- `release` -> `Release` |
||||
- `minsize` -> `MinSizeRel` |
||||
|
||||
No CMake build type is set for the `plain` Meson build type. The inferred CMake |
||||
build type overrides any `CMAKE_BUILD_TYPE` environment variable. |
||||
|
||||
## compiler.run() method is now available for all languages |
||||
|
||||
It used to be only implemented for C-like and D languages, but it is now available |
||||
for all languages. |
||||
|
||||
## dependencies created by compiler.find_library implement the `name()` method |
||||
|
||||
Previously, for a [[@dep]] that might be returned by either [[dependency]] or |
||||
[[compiler.find_library]], the method might or might not exist with no way |
||||
of telling. |
||||
|
||||
## New version_argument kwarg for find_program |
||||
|
||||
When finding an external program with `find_program`, the `version_argument` |
||||
can be used to override the default `--version` argument when trying to parse |
||||
the version of the program. |
||||
|
||||
For example, if the following is used: |
||||
```meson |
||||
foo = find_program('foo', version_argument: '-version') |
||||
``` |
||||
|
||||
meson will internally run `foo -version` when trying to find the version of `foo`. |
||||
|
||||
## Meson configure handles changes to options in more cases |
||||
|
||||
Meson configure now correctly handles updates to the options file without a full |
||||
reconfigure. This allows making a change to the `meson.options` or |
||||
`meson_options.txt` file without a reconfigure. |
||||
|
||||
For example, this now works: |
||||
```sh |
||||
meson setup builddir |
||||
git pull |
||||
meson configure builddir -Doption-added-by-pull=value |
||||
``` |
||||
|
||||
## New meson format command |
||||
|
||||
This command is similar to `muon fmt` and allows to format a `meson.build` |
||||
document. |
||||
|
||||
## Added support for GCC's `null_terminated_string_arg` function attribute |
||||
|
||||
You can now check if a compiler support the `null_terminated_string_arg` |
||||
function attribute via the `has_function_attribute()` method on the |
||||
[[@compiler]] object. |
||||
|
||||
```meson |
||||
cc = meson.get_compiler('c') |
||||
|
||||
if cc.has_function_attribute('null_terminated_string_arg') |
||||
# We have it... |
||||
endif |
||||
``` |
||||
|
||||
## A new dependency for ObjFW is now supported |
||||
|
||||
For example, you can create a simple application written using ObjFW like this: |
||||
|
||||
```meson |
||||
project('SimpleApp', 'objc') |
||||
|
||||
objfw_dep = dependency('objfw', version: '>= 1.0') |
||||
|
||||
executable('SimpleApp', 'SimpleApp.m', |
||||
dependencies: [objfw_dep]) |
||||
``` |
||||
|
||||
Modules are also supported. A test case using ObjFWTest can be created like |
||||
this: |
||||
|
||||
```meson |
||||
project('Tests', 'objc') |
||||
|
||||
objfwtest_dep = dependency('objfw', version: '>= 1.1', modules: ['ObjFWTest']) |
||||
|
||||
executable('Tests', ['FooTest.m', 'BarTest.m'], |
||||
dependencies: [objfwtest_dep]) |
||||
``` |
||||
|
||||
## Support of indexed `@PLAINNAME@` and `@BASENAME@` |
||||
|
||||
In `custom_target()` and `configure_file()` with multiple inputs, |
||||
it is now possible to specify index for `@PLAINNAME@` and `@BASENAME@` |
||||
macros in `output`: |
||||
``` |
||||
custom_target('target_name', |
||||
output: '@PLAINNAME0@.dl', |
||||
input: [dep1, dep2], |
||||
command: cmd) |
||||
``` |
||||
|
||||
## Required kwarg on more `compiler` methods |
||||
|
||||
The following `compiler` methods now support the `required` keyword argument: |
||||
|
||||
- `compiler.compiles()` |
||||
- `compiler.links()` |
||||
- `compiler.runs()` |
||||
|
||||
```meson |
||||
cc.compiles(valid, name: 'valid', required : true) |
||||
cc.links(valid, name: 'valid', required : true) |
||||
cc.run(valid, name: 'valid', required : true) |
||||
|
||||
assert(not cc.compiles(valid, name: 'valid', required : opt)) |
||||
assert(not cc.links(valid, name: 'valid', required : opt)) |
||||
res = cc.run(valid, name: 'valid', required : opt) |
||||
assert(res.compiled()) |
||||
assert(res.returncode() == 0) |
||||
assert(res.stdout() == '') |
||||
assert(res.stderr() == '') |
||||
``` |
||||
|
||||
## The Meson test program supports a new "--interactive" argument |
||||
|
||||
`meson test --interactive` invokes tests with stdout, stdin and stderr |
||||
connected directly to the calling terminal. This can be useful when running |
||||
integration tests that run in containers or virtual machines which can spawn a |
||||
debug shell if a test fails. |
||||
|
||||
## meson test now sets the `MESON_TEST_ITERATION` environment variable |
||||
|
||||
`meson test` will now set the `MESON_TEST_ITERATION` environment variable to the |
||||
current iteration of the test. This will always be `1` unless `--repeat` is used |
||||
to run the same test multiple times. |
||||
|
||||
## The Meson test program supports a new "--max-lines" argument |
||||
|
||||
By default `meson test` only shows the last 100 lines of test output from tests |
||||
that produce large amounts of output. This default can now be changed with the |
||||
new `--max-lines` option. For example, `--max-lines=1000` will increase the |
||||
maximum number of log output lines from 100 to 1000. |
||||
|
||||
## Basic support for TI Arm Clang (tiarmclang) |
||||
|
||||
Support for TI's newer [Clang-based ARM toolchain](https://www.ti.com/tool/ARM-CGT). |
||||
|
||||
## Support for Texas Instruments C6000 C/C++ compiler |
||||
|
||||
Meson now supports the TI C6000 C/C++ compiler use for the C6000 cpu family. |
||||
The example cross file is available in `cross/ti-c6000.txt`. |
||||
|
||||
## Wayland stable protocols can be versioned |
||||
|
||||
The wayland module now accepts a version number for stable protocols. |
||||
|
||||
```meson |
||||
wl_mod = import('unstable-wayland') |
||||
|
||||
wl_mod.find_protocol( |
||||
'linux-dmabuf', |
||||
state: 'stable' |
||||
version: 1 |
||||
) |
||||
``` |
||||
|
@ -0,0 +1,175 @@ |
||||
--- |
||||
title: Release 1.6.0 |
||||
short-description: Release notes for 1.6.0 |
||||
... |
||||
|
||||
# New features |
||||
|
||||
Meson 1.6.0 was released on 20 October 2024 |
||||
## Support for OpenXL compiler in AIX. |
||||
|
||||
The OpenXL compiler is now supported from Meson 1.6.0 onwards. |
||||
So currently, in AIX Operating system we support GCC and openXL compilers for Meson build system. |
||||
|
||||
Both the compilers will archive shared libraries and generate a shared object |
||||
for a shared module while using Meson in AIX. |
||||
|
||||
## `alias_target` of `both_libraries` |
||||
|
||||
Previously, when passing a [[@both_libs]] object to [[alias_target]], the alias |
||||
would only point to the shared library. It now points to both the static and the |
||||
shared library. |
||||
|
||||
## Default to printing deprecations when no minimum version is specified. |
||||
|
||||
For a long time, the [[project]] function has supported specifying the minimum |
||||
`meson_version:` needed by a project. When this is used, deprecated features |
||||
from before that version produce warnings, as do features which aren't |
||||
available in all supported versions. |
||||
|
||||
When no minimum version was specified, meson didn't warn you even about |
||||
deprecated functionality that might go away in an upcoming semver major release |
||||
of meson. |
||||
|
||||
Now, meson will treat an unspecified minimum version following semver: |
||||
|
||||
- For new features introduced in the current meson semver major cycle |
||||
(currently: all features added since 1.0) a warning is printed. Features that |
||||
have been available since the initial 1.0 release are assumed to be widely |
||||
available. |
||||
|
||||
- For features that have been deprecated by any version of meson, a warning is |
||||
printed. Since no minimum version was specified, it is assumed that the |
||||
project wishes to follow the latest and greatest functionality. |
||||
|
||||
These warnings will overlap for functionality that was both deprecated and |
||||
replaced with an alternative in the current release cycle. The combination |
||||
means that projects without a minimum version specified are assumed to want |
||||
broad compatibility with the current release cycle (1.x). |
||||
|
||||
Projects that specify a minimum `meson_version:` will continue to only receive |
||||
actionable warnings based on their current minimum version. |
||||
|
||||
## Cargo subprojects is experimental |
||||
|
||||
Cargo subprojects was intended to be experimental with no stability guarantees. |
||||
That notice was unfortunately missing from documentation. Meson will now start |
||||
warning about usage of experimental features and future releases might do breaking |
||||
changes. |
||||
|
||||
This is aligned with our general policy regarding [mixing build systems](Mixing-build-systems.md). |
||||
|
||||
## Dependencies from CMake subprojects now use only PUBLIC link flags |
||||
|
||||
Any [[@dep]] obtained from a CMake subproject (or `.wrap` with `method = cmake`) |
||||
now only includes link flags marked in CMake as `PUBLIC` or `INTERFACE`. |
||||
Flags marked as `PRIVATE` are now only applied when building the subproject |
||||
library and not when using it as a dependency. This better matches how CMake |
||||
handles link flags and fixes link errors when using some CMake projects as |
||||
subprojects. |
||||
|
||||
## New built-in option for default both_libraries |
||||
|
||||
`both_libraries` targets used to be considered as a shared library by default. |
||||
There is now the `default_both_libraries` option to change this default. |
||||
|
||||
When `default_both_libraries` is 'auto', [[both_libraries]] with dependencies |
||||
that are [[@both_libs]] themselves will link with the same kind of library. |
||||
For example, if `libA` is a [[@both_libs]] and `libB` is a [[@both_libs]] |
||||
linked with `libA` (or with an internal dependency on `libA`), |
||||
the static lib of `libB` will link with the static lib of `libA`, and the |
||||
shared lib of `libA` will link with the shared lib of `libB`. |
||||
|
||||
## New `as_static` and `as_shared` methods on internal dependencies |
||||
|
||||
[[@dep]] object returned by [[declare_dependency]] now has `.as_static()` and |
||||
`.as_shared()` methods, to convert to a dependency that prefers the `static` |
||||
or the `shared` version of the linked [[@both_libs]] target. |
||||
|
||||
When the same dependency is used without those methods, the |
||||
`default_both_libraries` option determines which version is used. |
||||
|
||||
## Support for DIA SDK |
||||
|
||||
Added support for Windows Debug Interface Access SDK (DIA SDK) dependency. It allows reading with MSVC debugging information (.PDB format). This dependency can only be used on Windows, with msvc, clang or clang-cl compiler. |
||||
|
||||
## Support for LLVM-based flang compiler |
||||
|
||||
Added basic handling for the [flang](https://flang.llvm.org/docs/) compiler |
||||
that's now part of LLVM. It is the successor of another compiler named |
||||
[flang](https://github.com/flang-compiler/flang) by largely the same |
||||
group of developers, who now refer to the latter as "classic flang". |
||||
|
||||
Meson already supports classic flang, and the LLVM-based flang now |
||||
uses the compiler-id `'llvm-flang'`. |
||||
|
||||
## nvc and nvc++ now support setting std |
||||
|
||||
The following standards are available for nvc: c89, c90, c99, c11, |
||||
c17, c18, gnu90, gnu89, gnu99, gnu11, gnu17, gnu18. For nvc++: |
||||
c++98, c++03, c++11, c++14, c++17, c++20, c++23, gnu++98, gnu++03, |
||||
gnu++11, gnu++14, gnu++17, gnu++20 |
||||
|
||||
## Tools can be selected when calling `has_tools()` on the Qt modules |
||||
|
||||
When checking for the presence of Qt tools, you can now explictly ask Meson |
||||
which tools you need. This is particularly useful when you do not need |
||||
`lrelease` because you are not shipping any translations. For example: |
||||
|
||||
```meson |
||||
qt6_mod = import('qt6') |
||||
qt6_mod.has_tools(required: true, tools: ['moc', 'uic', 'rcc']) |
||||
``` |
||||
|
||||
valid tools are `moc`, `uic`, `rcc` and `lrelease`. |
||||
|
||||
## Simple tool to test build reproducibility |
||||
|
||||
Meson now ships with a command for testing whether your project can be |
||||
[built reproducibly](https://reproducible-builds.org/). It can be used |
||||
by running a command like the following in the source root of your |
||||
project: |
||||
|
||||
meson reprotest --intermediaries -- --buildtype=debugoptimized |
||||
|
||||
All command line options after the `--` are passed to the build |
||||
invocations directly. |
||||
|
||||
This tool is not meant to be exhaustive, but instead easy and |
||||
convenient to run. It will detect some but definitely not all |
||||
reproducibility issues. |
||||
|
||||
## Support for variable in system dependencies |
||||
|
||||
System Dependency method `get_variable()` now supports `system` variable. |
||||
|
||||
## test() and benchmark() functions accept new types |
||||
|
||||
`test` and `benchmark` now accept ExternalPrograms (as returned by |
||||
`find_program`) in the `args` list. This can be useful where the test |
||||
executable is a wrapper which invokes another program given as an |
||||
argument. |
||||
|
||||
```meson |
||||
test('some_test', find_program('sudo'), args : [ find_program('sh'), 'script.sh' ]) |
||||
``` |
||||
|
||||
## Zig 0.11 can be used as a C/C++ compiler frontend |
||||
|
||||
Zig offers |
||||
[a C/C++ frontend](https://andrewkelley.me/post/zig-cc-powerful-drop-in-replacement-gcc-clang.html) as a drop-in replacement for Clang. It worked fine with Meson up to Zig 0.10. Since 0.11, Zig's |
||||
dynamic linker reports itself as `zig ld`, which wasn't known to Meson. Meson now correctly handles |
||||
Zig's linker. |
||||
|
||||
You can use Zig's frontend via a [machine file](Machine-files.md): |
||||
|
||||
```ini |
||||
[binaries] |
||||
c = ['zig', 'cc'] |
||||
cpp = ['zig', 'c++'] |
||||
ar = ['zig', 'ar'] |
||||
ranlib = ['zig', 'ranlib'] |
||||
lib = ['zig', 'lib'] |
||||
dlltool = ['zig', 'dlltool'] |
||||
``` |
||||
|
@ -0,0 +1,14 @@ |
||||
## Cargo features are resolved globally |
||||
|
||||
When configuring a Cargo dependency, Meson will now resolve its complete |
||||
dependency tree and feature set before generating the subproject AST. |
||||
This solves many cases of Cargo subprojects being configured with missing |
||||
features that the main project had to enable by hand using e.g. |
||||
`default_options: ['foo-rs:feature-default=true']`. |
||||
|
||||
Note that there could still be issues in the case there are multiple Cargo |
||||
entry points. That happens if the main Meson project makes multiple `dependency()` |
||||
calls for different Cargo crates that have common dependencies. |
||||
|
||||
Breaks: This change removes per feature Meson options that were previously |
||||
possible to set as shown above or from command line `-Dfoo-rs:feature-foo=true`. |
@ -1,5 +0,0 @@ |
||||
## Treat warnings as error in compiler checks |
||||
|
||||
Compiler check methods `compiler.compiles()`, `compiler.links()` and `compiler.run()` |
||||
now have a new `werror: true` keyword argument to treat compiler warnings as error. |
||||
This can be used to check if code compiles without warnings. |
@ -1,8 +0,0 @@ |
||||
## Deprecate 'jar' as a build_target type |
||||
|
||||
The point of `build_target()` is that what is produced can be conditionally |
||||
changed. However, `jar()` has a significant number of non-overlapping arguments |
||||
from other build_targets, including the kinds of sources it can include. Because |
||||
of this crafting a `build_target` that can be used as a Jar and as something |
||||
else is incredibly hard to do. As such, it has been deprecated, and using |
||||
`jar()` directly is recommended. |
@ -0,0 +1,7 @@ |
||||
## Devenv support in external project module |
||||
|
||||
The [external project module](External-Project-module.md) now setups `PATH` and |
||||
`LD_LIBRARY_PATH` to be able to run programs. |
||||
|
||||
`@BINDIR@` is now substitued in arguments and `'--bindir=@PREFIX@/@BINDIR@'` |
||||
default argument have been added. |
@ -1,4 +0,0 @@ |
||||
## find_program() now supports the 'default_options' argument |
||||
|
||||
In a similar fashion as dependency(), find_program() now also allows you to set default |
||||
options for the subproject that gets built in case of a fallback. |
@ -0,0 +1,8 @@ |
||||
## Fixed `sizeof` and `find_library` methods for Fortran compilers |
||||
|
||||
The implementation of the `.sizeof()` method has been fixed for Fortran |
||||
compilers (it was previously broken since it would try to compile a C code |
||||
snippet). Note that this functionality requires Fortran 2008 support. |
||||
|
||||
Incidentally this also fixes the `.find_library()` method for Fortran compilers |
||||
when the `prefer_static` built-in option is set to true. |
@ -1,17 +0,0 @@ |
||||
## `fs.relative_to()` |
||||
|
||||
The `fs` module now has a `relative_to` method. The method will return the |
||||
relative path from argument one to argument two, if one exists. Otherwise, the |
||||
absolute path to argument one is returned. |
||||
|
||||
```meson |
||||
assert(fs.relative_to('c:\\prefix\\lib', 'c:\\prefix\\bin') == '..\\lib') |
||||
assert(fs.relative_to('c:\\proj1\\foo', 'd:\\proj1\\bar') == 'c:\\proj1\\foo') |
||||
assert(fs.relative_to('prefix\\lib\\foo', 'prefix') == 'lib\\foo') |
||||
|
||||
assert(fs.relative_to('/prefix/lib', '/prefix/bin') == '../lib') |
||||
assert(fs.relative_to('prefix/lib/foo', 'prefix') == 'lib/foo') |
||||
``` |
||||
|
||||
In addition to strings, it can handle files, custom targets, custom target |
||||
indices, and build targets. |
@ -1,5 +0,0 @@ |
||||
## Support targeting Python's limited C API |
||||
|
||||
The Python module's `extension_module` function has gained the ability |
||||
to build extensions which target Python's limited C API via a new keyword |
||||
argument: `limited_api`. |
@ -1,19 +0,0 @@ |
||||
## All compiler `has_*` methods support the `required` keyword |
||||
|
||||
Now instead of |
||||
|
||||
```meson |
||||
assert(cc.has_function('some_function')) |
||||
assert(cc.has_type('some_type')) |
||||
assert(cc.has_member('struct some_type', 'x')) |
||||
assert(cc.has_members('struct some_type', ['x', 'y'])) |
||||
``` |
||||
|
||||
we can use |
||||
|
||||
```meson |
||||
cc.has_function('some_function', required: true) |
||||
cc.has_type('some_type', required: true) |
||||
cc.has_member('struct some_type', 'x', required: true) |
||||
cc.has_members('struct some_type', ['x', 'y'], required: true) |
||||
``` |
@ -1,10 +0,0 @@ |
||||
## Unified message(), str.format() and f-string formatting |
||||
|
||||
They now all support the same set of values: strings, integers, bools, options, |
||||
dictionaries and lists thereof. |
||||
|
||||
- Feature options (i.e. enabled, disabled, auto) were not previously supported |
||||
by any of those functions. |
||||
- Lists and dictionaries were not previously supported by f-string. |
||||
- str.format() allowed any type and often resulted in printing the internal |
||||
representation which is now deprecated. |
@ -0,0 +1,4 @@ |
||||
## Install vcs_tag() output |
||||
|
||||
[[vcs_tag]] now has `install`, `install_dir`, `install_tag` and `install_mode` |
||||
keyword arguments to install the generated file. |
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in new issue