| --- |
| 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). |