Skip to content

Commit dbf2ace

Browse files
authored
coredata: throw a MesonException on unknown options
Fixes #7288.
1 parent bf41d56 commit dbf2ace

File tree

3 files changed

+17
-13
lines changed

3 files changed

+17
-13
lines changed
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
## Unknown options are now always fatal
2+
3+
Passing unknown options to "meson setup" or "meson configure" is now
4+
always fatal. That is, Meson will exit with an error code if this
5+
happens. Previous Meson versions only showed a warning message.

‎mesonbuild/coredata.py‎

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -758,7 +758,7 @@ def copy_build_options_from_regular_ones(self) -> None:
758758
except KeyError:
759759
continue
760760

761-
def set_options(self, options: T.Dict[OptionKey, T.Any], subproject: str = '', warn_unknown: bool = True) -> None:
761+
def set_options(self, options: T.Dict[OptionKey, T.Any], subproject: str = '') -> None:
762762
if not self.is_cross_build():
763763
options = {k: v for k, v in options.items() if k.machine is not MachineChoice.BUILD}
764764
# Set prefix first because it's needed to sanitize other options
@@ -774,16 +774,15 @@ def set_options(self, options: T.Dict[OptionKey, T.Any], subproject: str = '', w
774774
for k, v in options.items():
775775
if k == pfk:
776776
continue
777-
elif k not in self.options:
778-
unknown_options.append(k)
779-
else:
777+
elif k in self.options:
780778
self.set_option(k, v)
781-
if unknown_options and warn_unknown:
779+
elif k.machine != MachineChoice.BUILD:
780+
unknown_options.append(k)
781+
if unknown_options:
782782
unknown_options_str = ', '.join(sorted(str(s) for s in unknown_options))
783783
sub = f'In subproject {subproject}: ' if subproject else ''
784-
mlog.warning(f'{sub}Unknown options: "{unknown_options_str}"')
785-
mlog.log('The value of new options can be set with:')
786-
mlog.log(mlog.bold('meson setup <builddir> --reconfigure -Dnew_option=new_value ...'))
784+
raise MesonException(f'{sub}Unknown options: "{unknown_options_str}"')
785+
787786
if not self.is_cross_build():
788787
self.copy_build_options_from_regular_ones()
789788

‎run_unittests.py‎

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3306,8 +3306,6 @@ def test_lto_threads(self):
33063306
if cc.get_id() == 'clang':
33073307
if is_windows():
33083308
raise unittest.SkipTest('LTO not (yet) supported by windows clang')
3309-
else:
3310-
extra_args.append('-D_cargs=-Werror=unused-command-line-argument')
33113309

33123310
self.init(testdir, extra_args=['-Db_lto=true', '-Db_lto_threads=8'] + extra_args)
33133311
self.build()
@@ -4315,9 +4313,11 @@ def test_command_line(self):
43154313
self.assertEqual(obj.options[OptionKey('default_library')].value, 'shared')
43164314
self.wipe()
43174315

4318-
# Should warn on unknown options
4319-
out = self.init(testdir, extra_args=['-Dbad=1', '-Dfoo=2', '-Dwrong_link_args=foo'])
4320-
self.assertIn('Unknown options: "bad, foo, wrong_link_args"', out)
4316+
# Should fail on unknown options
4317+
with self.assertRaises((subprocess.CalledProcessError, RuntimeError)) as cm:
4318+
self.init(testdir, extra_args=['-Dbad=1', '-Dfoo=2', '-Dwrong_link_args=foo'])
4319+
self.assertNotEqual(0, cm.exception.returncode)
4320+
self.assertIn(msg, cm.exception.output)
43214321
self.wipe()
43224322

43234323
# Should fail on malformed option

0 commit comments

Comments
 (0)