parent
c4708c28f2
commit
d4fe805a51
3 changed files with 202 additions and 0 deletions
@ -0,0 +1,183 @@ |
|||||||
|
--- |
||||||
|
short-description: Automatic modification of the build system files |
||||||
|
... |
||||||
|
|
||||||
|
# Meson file rewriter |
||||||
|
|
||||||
|
Since version 0.50.0, meson has the functionality to perform some basic |
||||||
|
modification on the `meson.build` files from the command line. The currently |
||||||
|
supported operations are: |
||||||
|
|
||||||
|
- For build targets: |
||||||
|
- Add/Remove source files |
||||||
|
- Add/Remove targets |
||||||
|
- Modify a select set of kwargs |
||||||
|
- Print some JSON information |
||||||
|
- For dependencies: |
||||||
|
- Modify a select set of kwargs |
||||||
|
- For the project function: |
||||||
|
- Modify a select set of kwargs |
||||||
|
- Modify the default options list |
||||||
|
|
||||||
|
The rewriter has both, a normal command line interface and a "script mode". The |
||||||
|
normal CLI is mostly designed for everyday use. The "script mode", on the |
||||||
|
other hand, is meant to be used by external programs (IDEs, graphical |
||||||
|
frontends, etc.) |
||||||
|
|
||||||
|
## Using the rewriter |
||||||
|
|
||||||
|
All rewriter functions are accessed via `meson rewrite` (or the rewriter alias |
||||||
|
`meson rw`). The meson rewriter assumes that it is run inside the project root |
||||||
|
directory. If this isn't the case, use `--sourcedir` to specify the actual |
||||||
|
project source directory. |
||||||
|
|
||||||
|
### Adding and removing sources |
||||||
|
|
||||||
|
The most common operations will probably be the adding and removing of source |
||||||
|
files to a build target. This can be easily done with: |
||||||
|
|
||||||
|
```bash |
||||||
|
meson rewrite target <target name/id> {add/rm} [list of sources] |
||||||
|
``` |
||||||
|
|
||||||
|
For instance, given the following example |
||||||
|
|
||||||
|
```meson |
||||||
|
src = ['main.cpp', 'fileA.cpp'] |
||||||
|
|
||||||
|
exe1 = executable('testExe', src) |
||||||
|
``` |
||||||
|
|
||||||
|
the source `fileB.cpp` can be added with: |
||||||
|
|
||||||
|
```bash |
||||||
|
meson rewrite target testExe add fileB.cpp |
||||||
|
``` |
||||||
|
|
||||||
|
After executing this command, the new `meson.build` will look like this: |
||||||
|
|
||||||
|
```meson |
||||||
|
src = ['main.cpp', 'fileA.cpp', 'fileB.cpp'] |
||||||
|
|
||||||
|
exe1 = executable('testExe', src) |
||||||
|
``` |
||||||
|
|
||||||
|
In this case, `exe1` could also have been used for the target name, since the |
||||||
|
rewriter also takes assignments and internal meson IDs into consideration when |
||||||
|
searching for the target in the `meson.build` files. |
||||||
|
|
||||||
|
For more information see the help output of the rewriter target command. |
||||||
|
|
||||||
|
### Setting the project version |
||||||
|
|
||||||
|
It is also possible to set kwargs of specific functions with the rewriter. The |
||||||
|
general command for setting or removing kwargs is: |
||||||
|
|
||||||
|
```bash |
||||||
|
meson rewriter kwargs {set/delete} <function type> <function ID> <key1> <value1> <key2> <value2> ... |
||||||
|
``` |
||||||
|
|
||||||
|
For instance, setting the project version can be achieved with this command: |
||||||
|
|
||||||
|
```bash |
||||||
|
meson rewriter kwargs set project '' version 1.0.0 |
||||||
|
``` |
||||||
|
|
||||||
|
Currently, only the following function types are supported: |
||||||
|
|
||||||
|
- dependency |
||||||
|
- target (any build target, the function ID is the target name/ID) |
||||||
|
- project (the function ID can be anything since project() can only be called once) |
||||||
|
|
||||||
|
For more information see the help output of the rewriter kwargs command. |
||||||
|
|
||||||
|
### Setting the project default options |
||||||
|
|
||||||
|
For setting and deleting default options, use the following command: |
||||||
|
|
||||||
|
```bash |
||||||
|
meson rewrite default-options {set/delete} <opt1> <value1> <opt2> <value2> ... |
||||||
|
``` |
||||||
|
|
||||||
|
## Using the "script mode" |
||||||
|
|
||||||
|
The "script mode" should be the preferred API for party programs, since it |
||||||
|
offers more flexibility and higher API stability. The "scripts" are stored |
||||||
|
in JSON format and executed with `meson rewrite command <JSON file or string>`. |
||||||
|
|
||||||
|
The JSON format is defined as follows: |
||||||
|
|
||||||
|
```json |
||||||
|
[ |
||||||
|
{ |
||||||
|
"type": "function to execute", |
||||||
|
... |
||||||
|
}, { |
||||||
|
"type": "other function", |
||||||
|
... |
||||||
|
}, |
||||||
|
... |
||||||
|
] |
||||||
|
``` |
||||||
|
|
||||||
|
Each object in the main array must have a `type` entry which specifies which |
||||||
|
function should be executed. |
||||||
|
|
||||||
|
Currently, the following functions are supported: |
||||||
|
|
||||||
|
- target |
||||||
|
- kwargs |
||||||
|
- default_options |
||||||
|
|
||||||
|
### Target modification format |
||||||
|
|
||||||
|
The format for the type `target` is defined as follows: |
||||||
|
|
||||||
|
```json |
||||||
|
{ |
||||||
|
"type": "target", |
||||||
|
"target": "target ID/name/assignment variable", |
||||||
|
"operation": "one of ['src_add', 'src_rm', 'tgt_rm', 'tgt_add', 'info']", |
||||||
|
"sources": ["list", "of", "source", "files", "to", "add, remove"], |
||||||
|
"subdir": "subdir where the new target should be added (only has an effect for operation 'tgt_add')", |
||||||
|
"target_type": "function name of the new target -- same as in the CLI (only has an effect for operation 'tgt_add')" |
||||||
|
} |
||||||
|
``` |
||||||
|
|
||||||
|
The keys `sources`, `subdir` and `target_type` are optional. |
||||||
|
|
||||||
|
### kwargs modification format |
||||||
|
|
||||||
|
The format for the type `target` is defined as follows: |
||||||
|
|
||||||
|
```json |
||||||
|
{ |
||||||
|
"type": "kwargs", |
||||||
|
"function": "one of ['dependency', 'target', 'project']", |
||||||
|
"id": "function ID", |
||||||
|
"operation": "one of ['set', 'delete', 'add', 'remove', 'remove_regex', 'info']", |
||||||
|
"kwargs": { |
||||||
|
"key1": "value1", |
||||||
|
"key2": "value2", |
||||||
|
... |
||||||
|
} |
||||||
|
} |
||||||
|
``` |
||||||
|
|
||||||
|
### Default options modification format |
||||||
|
|
||||||
|
The format for the type `default_options` is defined as follows: |
||||||
|
|
||||||
|
```json |
||||||
|
{ |
||||||
|
"type": "default_options", |
||||||
|
"operation": "one of ['set', 'delete']", |
||||||
|
"options": { |
||||||
|
"opt1": "value1", |
||||||
|
"opt2": "value2", |
||||||
|
... |
||||||
|
} |
||||||
|
} |
||||||
|
``` |
||||||
|
|
||||||
|
For operation `delete`, the values of the `options` can be anything (including `null`) |
@ -0,0 +1,18 @@ |
|||||||
|
## Meson file rewriter |
||||||
|
|
||||||
|
This release adds the functionality to perform some basic modification |
||||||
|
on the `meson.build` files from the command line. The currently |
||||||
|
supported operations are: |
||||||
|
|
||||||
|
- For build targets: |
||||||
|
- Add/Remove source files |
||||||
|
- Add/Remove targets |
||||||
|
- Modify a select set of kwargs |
||||||
|
- Print some JSON information |
||||||
|
- For dependencies: |
||||||
|
- Modify a select set of kwargs |
||||||
|
- For the project function: |
||||||
|
- Modify a select set of kwargs |
||||||
|
- Modify the default options list |
||||||
|
|
||||||
|
For more information see the rewriter documentation. |
Loading…
Reference in new issue