The Meson Build System
http://mesonbuild.com/
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
200 lines
6.1 KiB
200 lines
6.1 KiB
--- |
|
title: Release 0.45 |
|
short-description: Release notes for 0.45 |
|
... |
|
|
|
# New features |
|
|
|
## Python minimum version is now 3.5 |
|
|
|
Meson will from this version on require Python version 3.5 or newer. |
|
|
|
## Config-Tool based dependencies can be specified in a cross file |
|
|
|
Tools like LLVM and pcap use a config tool for dependencies, this is a |
|
script or binary that is run to get configuration information (cflags, |
|
ldflags, etc) from. |
|
|
|
These binaries may now be specified in the `binaries` section of a |
|
cross file. |
|
|
|
```ini |
|
[binaries] |
|
cc = ... |
|
llvm-config = '/usr/bin/llvm-config32' |
|
``` |
|
|
|
## Visual Studio C# compiler support |
|
|
|
In addition to the Mono C# compiler we also support Visual Studio's C# |
|
compiler. Currently this is only supported on the Ninja backend. |
|
|
|
## Removed two deprecated features |
|
|
|
The standalone `find_library` function has been a no-op for a long |
|
time. Starting with this version it becomes a hard error. |
|
|
|
There used to be a keywordless version of `run_target` which looked |
|
like this: |
|
|
|
```meson |
|
run_target('targetname', 'command', 'arg1', 'arg2') |
|
``` |
|
|
|
This is now an error. The correct format for this is now: |
|
|
|
```meson |
|
run_target('targetname', |
|
command : ['command', 'arg1', 'arg2']) |
|
``` |
|
|
|
## Experimental FPGA support |
|
|
|
This version adds support for generating, analysing and uploading FPGA |
|
programs using the [IceStorm |
|
toolchain](http://www.clifford.at/icestorm/). This support is |
|
experimental and is currently limited to the `iCE 40` series of FPGA |
|
chips. |
|
|
|
FPGA generation integrates with other parts of Meson seamlessly. As an |
|
example, [here](https://github.com/jpakkane/lm32) is an example |
|
project that compiles a simple firmware into Verilog and combines that |
|
with an lm32 softcore processor. |
|
|
|
## Generator outputs can preserve directory structure |
|
|
|
Normally when generating files with a generator, Meson flattens the |
|
input files so they all go in the same directory. Some code |
|
generators, such as Protocol Buffers, require that the generated files |
|
have the same directory layout as the input files used to generate |
|
them. This can now be achieved like this: |
|
|
|
```meson |
|
g = generator(...) # Compiles protobuf sources |
|
generated = gen.process('com/mesonbuild/one.proto', |
|
'com/mesonbuild/two.proto', |
|
preserve_path_from : meson.current_source_dir()) |
|
``` |
|
|
|
This would cause the following files to be generated inside the target |
|
private directory: |
|
|
|
com/mesonbuild/one.pb.h |
|
com/mesonbuild/one.pb.cc |
|
com/mesonbuild/two.pb.h |
|
com/mesonbuild/two.pb.cc |
|
|
|
## Hexadecimal string literals |
|
|
|
Hexadecimal integer literals can now be used in build and option files. |
|
|
|
```meson |
|
int_255 = 0xFF |
|
``` |
|
|
|
## b_ndebug : if-release |
|
|
|
The value `if-release` can be given for the `b_ndebug` project option. |
|
|
|
This will make the `NDEBUG` pre-compiler macro to be defined for release |
|
type builds as if the `b_ndebug` project option had had the value `true` |
|
defined for it. |
|
|
|
## `install_data()` defaults to `{datadir}/{projectname}` |
|
|
|
If `install_data()` is not given an `install_dir` keyword argument, the |
|
target directory defaults to `{datadir}/{projectname}` (e.g. |
|
`/usr/share/myproj`). |
|
|
|
## install_subdir() supports strip_directory |
|
|
|
If strip_directory=true install_subdir() installs directory contents |
|
instead of directory itself, stripping basename of the source directory. |
|
|
|
## Integer options |
|
|
|
There is a new integer option type with optional minimum and maximum |
|
values. It can be specified like this in the `meson_options.txt` file: |
|
|
|
```meson |
|
option('integer_option', type : 'integer', min : 0, max : 5, value : 3) |
|
``` |
|
|
|
## New method meson.project_license() |
|
|
|
The `meson` builtin object now has a `project_license()` method that |
|
returns a list of all licenses for the project. |
|
|
|
## Rust cross-compilation |
|
|
|
Cross-compilation is now supported for Rust targets. Like other |
|
cross-compilers, the Rust binary must be specified in your cross |
|
file. It should specify a `--target` (as installed by `rustup target`) |
|
and a custom linker pointing to your C cross-compiler. For example: |
|
|
|
```ini |
|
[binaries] |
|
c = '/usr/bin/arm-linux-gnueabihf-gcc-7' |
|
rust = [ |
|
'rustc', |
|
'--target', 'arm-unknown-linux-gnueabihf', |
|
'-C', 'linker=/usr/bin/arm-linux-gnueabihf-gcc-7', |
|
] |
|
``` |
|
|
|
## Rust compiler-private library disambiguation |
|
|
|
When building a Rust target with Rust library dependencies, an |
|
`--extern` argument is now specified to avoid ambiguity between the |
|
dependency library, and any crates of the same name in `rustc`'s |
|
private sysroot. |
|
|
|
## Project templates |
|
|
|
Meson ships with predefined project templates. To start a new project from |
|
scratch, simply go to an empty directory and type: |
|
|
|
meson init --name=myproject --type=executable --language=c |
|
|
|
## Improve test setup selection |
|
|
|
Test setups are now identified (also) by the project they belong to |
|
and it is possible to select the used test setup from a specific |
|
project. E.g. to use a test setup `some_setup` from project |
|
`some_project` for all executed tests one can use |
|
|
|
meson test --setup some_project:some_setup |
|
|
|
Should one rather want test setups to be used from the same project as |
|
where the current test itself has been defined, one can use just |
|
|
|
meson test --setup some_setup |
|
|
|
In the latter case every (sub)project must have a test setup `some_setup` |
|
defined in it. |
|
|
|
## Can use custom targets as Windows resource files |
|
|
|
The `compile_resources()` function of the `windows` module can now be used on custom targets as well as regular files. |
|
# Can promote dependencies with wrap command |
|
|
|
The `promote` command makes it easy to copy nested dependencies to the top level. |
|
|
|
meson wrap promote scommon |
|
|
|
This will search the project tree for a subproject called `scommon` |
|
and copy it to the top level. |
|
|
|
If there are many embedded subprojects with the same name, you have to |
|
specify which one to promote manually like this: |
|
|
|
meson wrap promote subprojects/s1/subprojects/scommon |
|
|
|
## Yielding subproject option to superproject |
|
|
|
Normally project options are specific to the current project. However |
|
sometimes you want to have an option whose value is the same over all |
|
projects. This can be achieved with the new `yield` keyword for |
|
options. When set to `true`, getting the value of this option in |
|
`meson.build` files gets the value from the option with the same name |
|
in the master project (if such an option exists).
|
|
|