diff options
author | Jussi Pakkanen <jpakkane@gmail.com> | 2018-12-16 21:53:17 +0200 |
---|---|---|
committer | Jussi Pakkanen <jpakkane@gmail.com> | 2018-12-22 19:00:40 +0200 |
commit | 4df9006ca43338fea07b9d542f94da34369e43d3 (patch) | |
tree | 26e1802d99239d6b9c71f050771f323454da1498 | |
parent | 7d5660dcbe15fb88edcd614c6288e2aa87c0698f (diff) | |
download | meson-4df9006ca43338fea07b9d542f94da34369e43d3.zip meson-4df9006ca43338fea07b9d542f94da34369e43d3.tar.gz meson-4df9006ca43338fea07b9d542f94da34369e43d3.tar.bz2 |
Can specify a string to print when dep not found. Closes #2407.
-rw-r--r-- | docs/markdown/Reference-manual.md | 2 | ||||
-rw-r--r-- | docs/markdown/snippets/notfound_message.md | 38 | ||||
-rw-r--r-- | mesonbuild/interpreter.py | 18 | ||||
-rw-r--r-- | test cases/linuxlike/1 pkg-config/meson.build | 6 |
4 files changed, 62 insertions, 2 deletions
diff --git a/docs/markdown/Reference-manual.md b/docs/markdown/Reference-manual.md index 2fc61d5..8d0d123 100644 --- a/docs/markdown/Reference-manual.md +++ b/docs/markdown/Reference-manual.md @@ -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. diff --git a/docs/markdown/snippets/notfound_message.md b/docs/markdown/snippets/notfound_message.md new file mode 100644 index 0000000..d73c6b2 --- /dev/null +++ b/docs/markdown/snippets/notfound_message.md @@ -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`. diff --git a/mesonbuild/interpreter.py b/mesonbuild/interpreter.py index 8012486..6fef4a9 100644 --- a/mesonbuild/interpreter.py +++ b/mesonbuild/interpreter.py @@ -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') diff --git a/test cases/linuxlike/1 pkg-config/meson.build b/test cases/linuxlike/1 pkg-config/meson.build index 17ee192..891fea4 100644 --- a/test cases/linuxlike/1 pkg-config/meson.build +++ b/test cases/linuxlike/1 pkg-config/meson.build @@ -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 |