diff options
Diffstat (limited to 'meson/docs/markdown/Disabler.md')
-rw-r--r-- | meson/docs/markdown/Disabler.md | 68 |
1 files changed, 68 insertions, 0 deletions
diff --git a/meson/docs/markdown/Disabler.md b/meson/docs/markdown/Disabler.md new file mode 100644 index 000000000..4aed7ad65 --- /dev/null +++ b/meson/docs/markdown/Disabler.md @@ -0,0 +1,68 @@ +--- +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. |