| --- |
| short-description: Disabling options |
| ... |
| |
| # Disabling parts of the build |
| |
| *This feature is available since version 0.44.0.* |
| |
| The following is a common fragment found in many projects: |
| |
| ```meson |
| dep = dependency('foo') |
| |
| # In some different directory |
| |
| lib = shared_library('mylib', 'mylib.c', |
| dependencies : dep) |
| |
| # And ín a third directory |
| |
| exe = executable('mytest', 'mytest.c', |
| link_with : lib) |
| test('mytest', exe) |
| ``` |
| |
| This works fine but gets a bit inflexible when you want to make this |
| part of the build optional. Basically it reduces to adding `if/else` |
| statements around all target invocations. Meson provides a simpler way |
| of achieving the same with a disabler object. |
| |
| A disabler object is created with the `disabler` function: |
| |
| ```meson |
| d = disabler() |
| ``` |
| |
| The only thing you can do to a disabler object is to ask if it has |
| been found: |
| |
| ```meson |
| f = d.found() # returns false |
| ``` |
| |
| Any other statement that uses a disabler object will immediately |
| return a disabler. For example assuming that `d` contains a disabler |
| object then |
| |
| ```meson |
| d2 = some_func(d) # value of d2 will be disabler |
| d3 = true or d2 # value of d3 will be true because of short-circuiting |
| d4 = false or d2 # value of d4 will be disabler |
| if d # neither branch is evaluated |
| ``` |
| |
| Thus to disable every target that depends on the dependency given |
| above, you can do something like this: |
| |
| ```meson |
| if use_foo_feature |
| d = dependency('foo') |
| else |
| d = disabler() |
| endif |
| ``` |
| |
| This concentrates the handling of this option in one place and other |
| build definition files do not need to be sprinkled with `if` |
| statements. |