| 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() then |
| 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 |