56 lines
2.0 KiB
Markdown
56 lines
2.0 KiB
Markdown
---
|
||
short-description: Keyval module
|
||
authors:
|
||
- name: Mark Schulte, Paolo Bonzini
|
||
years: [2017, 2019]
|
||
has-copyright: false
|
||
...
|
||
|
||
# keyval module
|
||
|
||
This module parses files consisting of a series of `key=value` lines. One use
|
||
of this module is to load kconfig configurations in meson projects.
|
||
|
||
**Note**: this does not provide kconfig frontend tooling to generate a
|
||
configuration. You still need something such as kconfig frontends (see
|
||
link below) to parse your Kconfig files, and then (after you've
|
||
chosen the configuration options), output a ".config" file.
|
||
|
||
[kconfig-frontends]: http://ymorin.is-a-geek.org/projects/kconfig-frontends
|
||
|
||
## Usage
|
||
|
||
The module may be imported as follows:
|
||
|
||
``` meson
|
||
keyval = import('keyval')
|
||
```
|
||
|
||
The following functions will then be available as methods on the object
|
||
with the name `keyval`. You can, of course, replace the name
|
||
`keyval` with anything else.
|
||
|
||
### keyval.load()
|
||
|
||
This function loads a file consisting of a series of `key=value` lines
|
||
and returns a dictionary object.
|
||
|
||
`keyval.load()` makes no attempt at parsing the values in the file.
|
||
In particular boolean and integer values will be represented as strings,
|
||
and strings will keep any quoting that is present in the input file. It
|
||
can be useful to create a [`configuration_data()`](#configuration_data)
|
||
object from the dictionary and use methods such as `get_unquoted()`.
|
||
|
||
Kconfig frontends usually have ".config" as the default name for the
|
||
configuration file. However, placing the configuration file in the source
|
||
directory limits the user to one configuration per source directory.
|
||
In order to allow separate configurations for each build directory, as is
|
||
the Meson standard, `meson.build` should not hardcode ".config" as the
|
||
argument to `kconfig.load()`, and should instead make the argument to
|
||
`kconfig.load()` a [project build option](Build-options.md).
|
||
|
||
* The first (and only) argument is the path to the configuration file to
|
||
load (usually ".config").
|
||
|
||
**Returns**: a [dictionary object](Reference-manual.md#dictionary-object).
|