Merge pull request #2636 from dcbaker/submit/no-unknown-arguments
Don't accept unknown command line arguments
This commit is contained in:
commit
a50106afee
|
@ -28,7 +28,7 @@ default_warning = '1'
|
|||
def add_builtin_argument(p, name, **kwargs):
|
||||
k = kwargs.get('dest', name.replace('-', '_'))
|
||||
c = coredata.get_builtin_option_choices(k)
|
||||
b = True if kwargs.get('action', None) in ['store_true', 'store_false'] else False
|
||||
b = kwargs.get('action', None) in ['store_true', 'store_false']
|
||||
h = coredata.get_builtin_option_description(k)
|
||||
if not b:
|
||||
h = h.rstrip('.') + ' (default: %s).' % coredata.get_builtin_option_default(k)
|
||||
|
|
|
@ -15,6 +15,7 @@
|
|||
import os, re
|
||||
import functools
|
||||
|
||||
from . import mlog
|
||||
from . import mparser
|
||||
from . import coredata
|
||||
from . import mesonlib
|
||||
|
@ -146,6 +147,14 @@ class OptionInterpreter:
|
|||
e.colno = cur.colno
|
||||
e.file = os.path.join('meson_options.txt')
|
||||
raise e
|
||||
bad = [o for o in sorted(self.cmd_line_options) if not
|
||||
(o in list(self.options) + forbidden_option_names or
|
||||
any(o.startswith(p) for p in forbidden_prefixes))]
|
||||
if bad:
|
||||
sub = 'In subproject {}: '.format(self.subproject) if self.subproject else ''
|
||||
mlog.warning(
|
||||
'{}Unknown command line options: "{}"\n'
|
||||
'This will become a hard error in a future Meson release.'.format(sub, ', '.join(bad)))
|
||||
|
||||
def reduce_single(self, arg):
|
||||
if isinstance(arg, str):
|
||||
|
|
|
@ -1782,6 +1782,25 @@ class FailureTests(BasePlatformTests):
|
|||
'''
|
||||
self.assertMesonRaises(code, "Method.*configtool.*is invalid.*internal")
|
||||
|
||||
def test_bad_option(self):
|
||||
tdir = os.path.join(self.unit_test_dir, '19 bad command line options')
|
||||
os.environ['MESON_FORCE_BACKTRACE'] = '1'
|
||||
self.init(tdir, extra_args=['-Dopt=bar', '-Dc_args=-Wall'], inprocess=True)
|
||||
self.wipe()
|
||||
out = self.init(tdir, extra_args=['-Dfoo=bar', '-Dbad=true'], inprocess=True)
|
||||
self.assertRegex(
|
||||
out, r'Unknown command line options: "bad, foo"')
|
||||
|
||||
def test_bad_option_subproject(self):
|
||||
tdir = os.path.join(self.unit_test_dir, '19 bad command line options')
|
||||
os.environ['MESON_FORCE_BACKTRACE'] = '1'
|
||||
self.init(tdir, extra_args=['-Done:one=bar'], inprocess=True)
|
||||
self.wipe()
|
||||
out = self.init(tdir, extra_args=['-Done:two=bar'], inprocess=True)
|
||||
self.assertRegex(
|
||||
out,
|
||||
r'In subproject one: Unknown command line options: "one:two"')
|
||||
|
||||
|
||||
class WindowsTests(BasePlatformTests):
|
||||
'''
|
||||
|
|
|
@ -0,0 +1,17 @@
|
|||
# Copyright © 2017 Intel Corporation
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
# You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
|
||||
project('Bad command line options')
|
||||
|
||||
one = subproject('one')
|
|
@ -0,0 +1,16 @@
|
|||
# Copyright © 2017 Intel Corporation
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
# You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
|
||||
option('opt', type : 'string', description : 'An argument')
|
||||
option('good', type : 'boolean', value : true, description : 'another argument')
|
|
@ -0,0 +1,15 @@
|
|||
# Copyright © 2017 Intel Corporation
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
# You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
|
||||
project('one subproject')
|
|
@ -0,0 +1,15 @@
|
|||
# Copyright © 2017 Intel Corporation
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
# You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
|
||||
option('one', type : 'string', description : 'an option')
|
Loading…
Reference in New Issue