diff options
author | Mathieu Duponchelle <mathieu@centricular.com> | 2020-06-02 23:29:33 +0200 |
---|---|---|
committer | Xavier Claessens <xclaesse@gmail.com> | 2020-06-16 13:45:40 -0400 |
commit | 20709af4d2a2f7f4ece3ecd3a9c65da3075be891 (patch) | |
tree | 6049dc6e0d08d558330885dbb2d773cc7a27fd83 /mesonbuild | |
parent | f40e1567f5b38000b47bfbdf307f843c07645f19 (diff) | |
download | meson-20709af4d2a2f7f4ece3ecd3a9c65da3075be891.zip meson-20709af4d2a2f7f4ece3ecd3a9c65da3075be891.tar.gz meson-20709af4d2a2f7f4ece3ecd3a9c65da3075be891.tar.bz2 |
interpreter: add support for --force-fallback-for
This new command line option allows specifying dependencies for
which to force fallback.
See the documentation for more information
Fixes: #7218
Diffstat (limited to 'mesonbuild')
-rw-r--r-- | mesonbuild/coredata.py | 1 | ||||
-rw-r--r-- | mesonbuild/interpreter.py | 11 |
2 files changed, 10 insertions, 2 deletions
diff --git a/mesonbuild/coredata.py b/mesonbuild/coredata.py index fdba84e..94f977f 100644 --- a/mesonbuild/coredata.py +++ b/mesonbuild/coredata.py @@ -1129,6 +1129,7 @@ builtin_options = OrderedDict([ ('warning_level', BuiltinOption(UserComboOption, 'Compiler warning level to use', '1', choices=['0', '1', '2', '3'])), ('werror', BuiltinOption(UserBooleanOption, 'Treat warnings as errors', False, yielding=False)), ('wrap_mode', BuiltinOption(UserComboOption, 'Wrap mode', 'default', choices=['default', 'nofallback', 'nodownload', 'forcefallback'])), + ('force_fallback_for', BuiltinOption(UserArrayOption, 'Force fallback for those subprojects', [])), ]) builtin_options_per_machine = OrderedDict([ diff --git a/mesonbuild/interpreter.py b/mesonbuild/interpreter.py index 76dbebd..bfbb189 100644 --- a/mesonbuild/interpreter.py +++ b/mesonbuild/interpreter.py @@ -3568,7 +3568,8 @@ external dependencies (including libraries) must go to "dependencies".''') return self.get_subproject_dep(name, display_name, dirname, varname, kwargs) wrap_mode = self.coredata.get_builtin_option('wrap_mode') - forcefallback = wrap_mode == WrapMode.forcefallback and has_fallback + force_fallback_for = self.coredata.get_builtin_option('force_fallback_for') + forcefallback = (wrap_mode == WrapMode.forcefallback or name in force_fallback_for) and has_fallback if name != '' and not forcefallback: self._handle_featurenew_dependencies(name) kwargs['required'] = required and not has_fallback @@ -3622,7 +3623,13 @@ external dependencies (including libraries) must go to "dependencies".''') def dependency_fallback(self, name, display_name, kwargs): required = kwargs.get('required', True) - if self.coredata.get_builtin_option('wrap_mode') == WrapMode.nofallback: + + # Explicitly listed fallback preferences for specific subprojects + # take precedence over wrap-mode + if name in self.coredata.get_builtin_option('force_fallback_for'): + mlog.log('Looking for a fallback subproject for the dependency', + mlog.bold(display_name), 'because:\nUse of fallback was forced for that specific subproject') + elif self.coredata.get_builtin_option('wrap_mode') == WrapMode.nofallback: mlog.log('Not looking for a fallback subproject for the dependency', mlog.bold(display_name), 'because:\nUse of fallback ' 'dependencies is disabled.') |