diff options
-rw-r--r-- | docs/markdown/snippets/per_subproject_builtin.md | 9 | ||||
-rw-r--r-- | mesonbuild/backend/backends.py | 2 | ||||
-rw-r--r-- | mesonbuild/coredata.py | 2 | ||||
-rw-r--r-- | mesonbuild/modules/hotdoc.py | 2 | ||||
-rw-r--r-- | test cases/common/229 persubproject options/meson.build | 5 | ||||
-rw-r--r-- | test cases/common/229 persubproject options/subprojects/sub2/foo.c | 4 | ||||
-rw-r--r-- | test cases/common/229 persubproject options/subprojects/sub2/meson.build | 5 |
7 files changed, 20 insertions, 9 deletions
diff --git a/docs/markdown/snippets/per_subproject_builtin.md b/docs/markdown/snippets/per_subproject_builtin.md index 44ed1c8..b0c3ce9 100644 --- a/docs/markdown/snippets/per_subproject_builtin.md +++ b/docs/markdown/snippets/per_subproject_builtin.md @@ -1,8 +1,9 @@ -## Per subproject `default_library` option +## Per subproject `default_library` and `werror` options -The `default_library` built-in option can now be defined per subproject. This is -useful for example when building shared libraries in the main project, but static -link a subproject. +The `default_library` and `werror` built-in options can now be defined per subproject. +This is useful for example when building shared libraries in the main project, +but static link a subproject, or when the main project must build with no warnings +but some subprojects cannot. Most of the time this would be used either by the parent project by setting subproject's default_options (e.g. `subproject('foo', default_options: 'default_library=static')`), diff --git a/mesonbuild/backend/backends.py b/mesonbuild/backend/backends.py index ab922ba..687b122 100644 --- a/mesonbuild/backend/backends.py +++ b/mesonbuild/backend/backends.py @@ -179,7 +179,7 @@ class Backend: if option_name in target.option_overrides: override = target.option_overrides[option_name] return self.environment.coredata.validate_option_value(option_name, override) - return self.environment.coredata.get_builtin_option(option_name) + return self.environment.coredata.get_builtin_option(option_name, target.subproject) def get_target_filename_for_linking(self, target): # On some platforms (msvc for instance), the file that is used for diff --git a/mesonbuild/coredata.py b/mesonbuild/coredata.py index 7038bf7..074f9e6 100644 --- a/mesonbuild/coredata.py +++ b/mesonbuild/coredata.py @@ -1104,7 +1104,7 @@ builtin_options = OrderedDict([ ('unity', BuiltinOption(UserComboOption, 'Unity build', 'off', choices=['on', 'off', 'subprojects'])), ('unity_size', BuiltinOption(UserIntegerOption, 'Unity block size', (2, None, 4))), ('warning_level', BuiltinOption(UserComboOption, 'Compiler warning level to use', '1', choices=['0', '1', '2', '3'])), - ('werror', BuiltinOption(UserBooleanOption, 'Treat warnings as errors', False)), + ('werror', BuiltinOption(UserBooleanOption, 'Treat warnings as errors', False, yielding=False)), ('wrap_mode', BuiltinOption(UserComboOption, 'Wrap mode', 'default', choices=['default', 'nofallback', 'nodownload', 'forcefallback'])), ]) diff --git a/mesonbuild/modules/hotdoc.py b/mesonbuild/modules/hotdoc.py index bf4386f..5c04e27 100644 --- a/mesonbuild/modules/hotdoc.py +++ b/mesonbuild/modules/hotdoc.py @@ -326,7 +326,7 @@ class HotdocTargetBuilder: for path in self.include_paths.keys(): self.cmd.extend(['--include-path', path]) - if self.state.environment.coredata.get_builtin_option('werror'): + if self.state.environment.coredata.get_builtin_option('werror', self.state.subproject): self.cmd.append('--fatal-warning') self.generate_hotdoc_config() diff --git a/test cases/common/229 persubproject options/meson.build b/test cases/common/229 persubproject options/meson.build index 6a76697..20dff90 100644 --- a/test cases/common/229 persubproject options/meson.build +++ b/test cases/common/229 persubproject options/meson.build @@ -1,6 +1,9 @@ -project('persubproject options', 'c', default_options : ['default_library=both']) +project('persubproject options', 'c', + default_options : ['default_library=both', + 'werror=true']) assert(get_option('default_library') == 'both', 'Parent default_library should be "both"') +assert(get_option('werror')) # Check it build both by calling a method only both_libraries target implement lib = library('lib1', 'foo.c') diff --git a/test cases/common/229 persubproject options/subprojects/sub2/foo.c b/test cases/common/229 persubproject options/subprojects/sub2/foo.c index 63e4de6..cf7201b 100644 --- a/test cases/common/229 persubproject options/subprojects/sub2/foo.c +++ b/test cases/common/229 persubproject options/subprojects/sub2/foo.c @@ -1,5 +1,9 @@ int foo(void); +#ifdef __GNUC__ +#warning This should not produce error +#endif + int foo(void) { return 0; } diff --git a/test cases/common/229 persubproject options/subprojects/sub2/meson.build b/test cases/common/229 persubproject options/subprojects/sub2/meson.build index 546884d..f1226b8 100644 --- a/test cases/common/229 persubproject options/subprojects/sub2/meson.build +++ b/test cases/common/229 persubproject options/subprojects/sub2/meson.build @@ -1,6 +1,9 @@ -project('sub2', 'c', default_options : ['default_library=shared']) +project('sub2', 'c', + default_options : ['default_library=shared', + 'werror=false']) assert(get_option('default_library') == 'static', 'Parent should override default_library') +assert(not get_option('werror')) # If it doesn't build only a static library, it would make target name clash. library('lib1', 'foo.c') |