--- 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.