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.
The results of the search are