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:

dep = dependency('foo')

# In some different directory

lib = shared_library('mylib', 'mylib.c',
  dependencies : dep)

# And in 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:

d = disabler()

The only thing you can do to a disabler object is to ask if it has been found:

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

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:

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.