Merge pull request #2636 from dcbaker/submit/no-unknown-arguments

Don't accept unknown command line arguments
This commit is contained in:
Jussi Pakkanen 2017-12-22 19:41:56 +02:00 committed by GitHub
commit a50106afee
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
7 changed files with 92 additions and 1 deletions

View File

@ -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)

View File

@ -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):

View File

@ -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):
'''

View File

@ -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')

View File

@ -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')

View File

@ -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')

View File

@ -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')