Can specify a string to print when dep not found. Closes #2407.
This commit is contained in:
parent
7d5660dcbe
commit
4df9006ca4
|
@ -395,6 +395,8 @@ are also supported. This function supports the following keyword arguments:
|
|||
the build machine system rather than the host system (i.e. where the
|
||||
cross compiled binary will run on), usually only needed if you build
|
||||
a tool to be used during compilation.
|
||||
- `not_found_message` *(added 0.50.0)* is an optional string that will
|
||||
be printed as a `message()` if the dependency was not found.
|
||||
- `required`, when set to false, Meson will proceed with the build
|
||||
even if the dependency is not found. Since *0.47.0* the value of a
|
||||
[`feature`](Build-options.md#features) option can also be passed.
|
||||
|
|
|
@ -0,0 +1,38 @@
|
|||
## New `not_found_message` for dependency
|
||||
|
||||
You can now specify a `not_found_message` that will be printed if the
|
||||
specified dependency was not found. The point is to convert constructs
|
||||
that look like this:
|
||||
|
||||
```meson
|
||||
d = dependency('something', required: false)
|
||||
if not d.found()
|
||||
message('Will not be able to do something.')
|
||||
endif
|
||||
```
|
||||
|
||||
Into this:
|
||||
|
||||
```meson
|
||||
d = dependency('something',
|
||||
required: false,
|
||||
not_found_message: 'Will not be able to do something.')
|
||||
```
|
||||
|
||||
Or constructs like this:
|
||||
|
||||
```meson
|
||||
d = dependency('something', required: false)
|
||||
if not d.found()
|
||||
error('Install something by doing XYZ.')
|
||||
endif
|
||||
```
|
||||
|
||||
into this:
|
||||
|
||||
```meson
|
||||
d = dependency('something',
|
||||
not_found_message: 'Install something by doing XYZ.')
|
||||
```
|
||||
|
||||
Which works, because the default value of `required` is `true`.
|
|
@ -1900,6 +1900,7 @@ permitted_kwargs = {'add_global_arguments': {'language', 'native'},
|
|||
'modules',
|
||||
'optional_modules',
|
||||
'native',
|
||||
'not_found_message',
|
||||
'required',
|
||||
'static',
|
||||
'version',
|
||||
|
@ -2645,6 +2646,9 @@ external dependencies (including libraries) must go to "dependencies".''')
|
|||
@noKwargs
|
||||
def func_message(self, node, args, kwargs):
|
||||
argstr = self.get_message_string_arg(node)
|
||||
self.message_impl(argstr)
|
||||
|
||||
def message_impl(self, argstr):
|
||||
mlog.log(mlog.bold('Message:'), argstr)
|
||||
|
||||
@FeatureNew('warning', '0.44.0')
|
||||
|
@ -3013,13 +3017,27 @@ external dependencies (including libraries) must go to "dependencies".''')
|
|||
@FeatureNewKwargs('dependency', '0.49.0', ['disabler'])
|
||||
@FeatureNewKwargs('dependency', '0.40.0', ['method'])
|
||||
@FeatureNewKwargs('dependency', '0.38.0', ['default_options'])
|
||||
@FeatureNewKwargs('dependency', '0.50.0', ['not_found_message'])
|
||||
@disablerIfNotFound
|
||||
@permittedKwargs(permitted_kwargs['dependency'])
|
||||
def func_dependency(self, node, args, kwargs):
|
||||
self.validate_arguments(args, 1, [str])
|
||||
name = args[0]
|
||||
display_name = name if name else '(anonymous)'
|
||||
not_found_message = kwargs.get('not_found_message', '')
|
||||
if not isinstance(not_found_message, str):
|
||||
raise InvalidArguments('The not_found_message must be a string.')
|
||||
try:
|
||||
d = self.dependency_impl(name, display_name, kwargs)
|
||||
except Exception:
|
||||
if not_found_message:
|
||||
self.message_impl(not_found_message)
|
||||
raise
|
||||
if not d.found() and not_found_message:
|
||||
self.message_impl(not_found_message)
|
||||
return d
|
||||
|
||||
def dependency_impl(self, name, display_name, kwargs):
|
||||
disabled, required, feature = extract_required_kwarg(kwargs, self.subproject)
|
||||
if disabled:
|
||||
mlog.log('Dependency', mlog.bold(display_name), 'skipped: feature', mlog.bold(feature), 'disabled')
|
||||
|
|
|
@ -2,7 +2,8 @@ project('external dependency', 'c')
|
|||
|
||||
# Zlib is probably on all dev machines.
|
||||
|
||||
dep = dependency('zlib', version : '>=1.2')
|
||||
dep = dependency('zlib', version : '>=1.2',
|
||||
not_found_message: 'DANGER! DANGER! THIS MUST NEVER BE SEEN!')
|
||||
exe = executable('zlibprog', 'prog-checkver.c',
|
||||
dependencies : dep,
|
||||
c_args : '-DFOUND_ZLIB="' + dep.version() + '"')
|
||||
|
@ -29,7 +30,8 @@ test('zlibtest2', exe2)
|
|||
|
||||
# Try to find a nonexistent library to ensure requires:false works.
|
||||
|
||||
dep = dependency('nvakuhrabnsdfasdf', required : false)
|
||||
dep = dependency('nvakuhrabnsdfasdf', required : false,
|
||||
not_found_message : 'This dependency was not found as was expected.')
|
||||
|
||||
# Try to compile a test that takes a dep and an include_directories
|
||||
|
||||
|
|
Loading…
Reference in New Issue