coredata: Warn on usage of both -Dbuildtype and -Doptimization/-Ddebug

It may not be obvious to users that these two ways to set build-types
override each other and specifying both is redundant, and conflicts
are resolved based on whichever is specified later.

Closes https://github.com/mesonbuild/meson/issues/6742
pull/6776/head
Nirbheek Chauhan 5 years ago committed by Xavier Claessens
parent bd953b6b29
commit 69e9d32bca
  1. 1
      docs/markdown/Builtin-options.md
  2. 7
      mesonbuild/coredata.py
  3. 7
      run_unittests.py

@ -87,6 +87,7 @@ Using the option as-is with no prefix affects all machines. For example:
| werror | false | Treat warnings as errors | no |
| wrap_mode {default, nofallback,<br>nodownload, forcefallback} | default | Wrap mode to use | no |
<a name="build-type-options"></a>
For setting optimization levels and toggling debug, you can either set the
`buildtype` option, or you can set the `optimization` and `debug` options which
give finer control over the same. Whichever you decide to use, the other will

@ -718,6 +718,13 @@ class CoreData:
self.copy_build_options_from_regular_ones()
def set_default_options(self, default_options, subproject, env):
# Warn if the user is using two different ways of setting build-type
# options that override each other
if 'buildtype' in env.cmd_line_options and \
('optimization' in env.cmd_line_options or 'debug' in env.cmd_line_options):
mlog.warning('Recommend using either -Dbuildtype or -Doptimization + -Ddebug. '
'Using both is redundant since they override each other. '
'See: https://mesonbuild.com/Builtin-options.html#build-type-options')
cmd_line_options = OrderedDict()
# Set project default_options as if they were passed to the cmdline.
# Subprojects can only define default for user options and not yielding

@ -3842,10 +3842,11 @@ recommended as it is not supported on some platforms''')
self.assertEqual(opts['debug'], True)
self.assertEqual(opts['optimization'], '2')
self.assertEqual(opts['buildtype'], 'debugoptimized')
# Setting both buildtype and debug on the command-line should work
# Also test that --debug is parsed as -Ddebug=true
# Setting both buildtype and debug on the command-line should work, and
# should warn not to do that. Also test that --debug is parsed as -Ddebug=true
self.new_builddir()
self.init(testdir, extra_args=['-Dbuildtype=debugoptimized', '--debug'])
out = self.init(testdir, extra_args=['-Dbuildtype=debugoptimized', '--debug'])
self.assertRegex(out, 'Recommend using either.*buildtype.*debug.*redundant')
opts = self.get_opts_as_dict()
self.assertEqual(opts['debug'], True)
self.assertEqual(opts['optimization'], '2')

Loading…
Cancel
Save