The Meson Build System http://mesonbuild.com/
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

2.7 KiB

dependency() consistency

The first time a dependency is found, using dependency('foo', ...), the return value is now cached. Any subsequent call will return the same value as long as version requested match, otherwise not-found dependency is returned. This means that if a system dependency is first found, it won't fallback to a subproject in a subsequent call any more and will rather return not-found instead if the system version does not match. Similarly, if the first call returns the subproject fallback dependency, it will also return the subproject dependency in a subsequent call even if no fallback is provided.

For example, if the system has foo version 1.0:

# d2 is set to foo_dep and not the system dependency, even without fallback argument.
d1 = dependency('foo', version : '>=2.0', required : false,
                fallback : ['foo', 'foo_dep'])
d2 = dependency('foo', version : '>=1.0', required : false)
# d2 is not-found because the first call returned the system dependency, but its version is too old for 2nd call.
d1 = dependency('foo', version : '>=1.0', required : false)
d2 = dependency('foo', version : '>=2.0', required : false,
                fallback : ['foo', 'foo_dep'])

Override dependency()

It is now possible to override the result of dependency() to point to any dependency object you want. The overriding is global and applies to every subproject from there on.

For example, this subproject provides 2 libraries with version 2.0:

project(..., version : '2.0')

libfoo = library('foo', ...)
foo_dep = declare_dependency(link_with : libfoo)
meson.override_dependency('foo', foo_dep)

libbar = library('bar', ...)
bar_dep = declare_dependency(link_with : libbar)
meson.override_dependency('bar', bar_dep)

Assuming the system has foo and bar 1.0 installed, and master project does this:

foo_dep = dependency('foo', version : '>=2.0', fallback : ['foo', 'foo_dep'])
bar_dep = dependency('bar')

This used to mix system 1.0 version and subproject 2.0 dependencies, but thanks to the override bar_dep is now set to the subproject's version instead.

Another case this can be useful is to force a subproject to use a specific dependency. If the subproject does dependency('foo') but the main project wants to provide its own implementation of foo, it can for example call meson.override_dependency('foo', declare_dependency(...)) before configuring the subproject.

Simplified dependency() fallback

In the case a subproject foo calls meson.override_dependency('foo-2.0', foo_dep), the parent project can omit the dependency variable name in fallback keyword argument: dependency('foo-2.0', fallback : 'foo').