| name: feature | |
| long_name: Feature option object | |
| since: 0.47.0 | |
| description: Meson object representing a [`feature` options](Build-options.md#features) | |
| methods: | |
| - name: enabled | |
| returns: bool | |
| description: Returns whether the feature was set to `'enabled'` | |
| - name: disabled | |
| returns: bool | |
| description: Returns whether the feature was set to `'disabled'` | |
| - name: auto | |
| returns: bool | |
| description: Returns whether the feature was set to `'auto'` | |
| - name: allowed | |
| since: 0.59.0 | |
| returns: bool | |
| description: Returns whether the feature was set to `'enabled'` or `'auto'` | |
| - name: disable_auto_if | |
| since: 0.59.0 | |
| returns: feature | |
| description: | | |
| Returns the feature, with `'auto'` converted to `'disabled'` if value is true. | |
| | Feature | `value = true` | `value = false` | | |
| | -------- | -------------- | --------------- | | |
| | Auto | Disabled | Auto | | |
| | Enabled | Enabled | Enabled | | |
| | Disabled | Disabled | Disabled | | |
| example: | | |
| `disable_auto_if` is useful to give precedence to mutually exclusive dependencies | |
| (that provide the same API) if either or both are available: | |
| ``` | |
| # '-Dfoo=auto -Dbar=enabled' will not pick foo even if installed. | |
| use_bar = get_option('bar') | |
| use_foo = get_option('foo').disable_auto_if(use_bar.enabled()) | |
| dep_foo = dependency('foo', required: use_foo) | |
| if not dep_foo.found() | |
| dep_foo = dependency('bar', required: use_bar) | |
| endif | |
| ``` | |
| posargs: | |
| value: | |
| type: bool | |
| description: See the table above | |
| - name: enable_auto_if | |
| since: 1.1.0 | |
| returns: feature | |
| description: | | |
| Returns the feature, with `'auto'` converted to `'enabled'` if value is true. | |
| | Feature | `value = true` | `value = false` | | |
| | -------- | -------------- | --------------- | | |
| | Auto | Enabled | Auto | | |
| | Enabled | Enabled | Enabled | | |
| | Disabled | Disabled | Disabled | | |
| posargs: | |
| value: | |
| type: bool | |
| description: See the table above | |
| - name: require | |
| returns: feature | |
| since: 0.59.0 | |
| description: | | |
| Returns the object itself if the value is true; an error if the object is | |
| `'enabled'` and the value is false; a disabled feature if the object | |
| is `'auto'` or `'disabled'` and the value is false. | |
| | Feature | `value = true` | `value = false` | | |
| | -------- | -------------- | --------------- | | |
| | Auto | Auto | Disabled | | |
| | Enabled | Enabled | Error | | |
| | Disabled | Disabled | Disabled | | |
| example: | | |
| `require` is useful to restrict the applicability of `'auto'` features, | |
| for example based on other features or on properties of the host machine: | |
| ``` | |
| if get_option('directx').require(host_machine.system() == 'windows', | |
| error_message: 'DirectX only available on Windows').allowed() | |
| src += ['directx.c'] | |
| config.set10('HAVE_DIRECTX', true) | |
| endif | |
| ``` | |
| posargs: | |
| value: | |
| type: bool | |
| description: The value to check | |
| kwargs: | |
| error_message: | |
| type: str | |
| default: "''" | |
| description: The error message to print if the check fails | |
| - name: enable_if | |
| returns: feature | |
| since: 1.1.0 | |
| description: | | |
| Returns the object itself if the value is false; an error if the object is | |
| `'disabled'` and the value is true; an enabled feature if the object | |
| is `'auto'` or `'enabled'` and the value is true. | |
| | Feature | `value = true` | `value = false` | | |
| | -------- | -------------- | --------------- | | |
| | Auto | Enabled | Auto | | |
| | Enabled | Enabled | Enabled | | |
| | Disabled | Error | Disabled | | |
| example: | | |
| `enable_if` is useful to restrict the applicability of `'auto'` features, | |
| particularly when passing them to [[dependency]]: | |
| ``` | |
| use_llvm = get_option('llvm').enable_if(with_clang).enable_if(with_llvm_libs) | |
| dep_llvm = dependency('llvm', required: use_llvm) | |
| ``` | |
| posargs: | |
| value: | |
| type: bool | |
| description: The value to check | |
| kwargs: | |
| error_message: | |
| type: str | |
| default: "''" | |
| description: The error message to print if the check fails | |
| - name: disable_if | |
| returns: feature | |
| since: 1.1.0 | |
| description: | | |
| Returns the object itself if the value is false; an error if the object is | |
| `'enabled'` and the value is true; a disabled feature if the object | |
| is `'auto'` or `'disabled'` and the value is true. | |
| | Feature | `value = true` | `value = false` | | |
| | -------- | -------------- | --------------- | | |
| | Auto | Disabled | Auto | | |
| | Enabled | Error | Enabled | | |
| | Disabled | Disabled | Disabled | | |
| This is equivalent to `feature_opt.require(not condition)`, but may make | |
| code easier to reason about, especially when mixed with `enable_if` | |
| example: | | |
| `disable_if` is useful to restrict the applicability of `'auto'` features, | |
| particularly when passing them to [[dependency]]: | |
| ``` | |
| use_os_feature = get_option('foo') \ | |
| .disable_if(host_machine.system() == 'darwin', error_message : 'os feature not supported on MacOS') | |
| dep_os_feature = dependency('os_feature', required: use_os_feature) | |
| ``` | |
| posargs: | |
| value: | |
| type: bool | |
| description: The value to check | |
| kwargs: | |
| error_message: | |
| type: str | |
| default: "''" | |
| description: The error message to print if the check fails |