aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNirbheek Chauhan <nirbheek@centricular.com>2020-03-07 01:49:30 +0530
committerXavier Claessens <xclaesse@gmail.com>2020-03-11 07:11:59 -0400
commit69e9d32bca23d75a9a5d7df794d34c9aeb949d8a (patch)
treee69287358bd3dc77a4214c46176a83046908bbd3
parentbd953b6b2977eb9d9afb92208f117dd8845a3088 (diff)
downloadmeson-69e9d32bca23d75a9a5d7df794d34c9aeb949d8a.zip
meson-69e9d32bca23d75a9a5d7df794d34c9aeb949d8a.tar.gz
meson-69e9d32bca23d75a9a5d7df794d34c9aeb949d8a.tar.bz2
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
-rw-r--r--docs/markdown/Builtin-options.md1
-rw-r--r--mesonbuild/coredata.py7
-rwxr-xr-xrun_unittests.py7
3 files changed, 12 insertions, 3 deletions
diff --git a/docs/markdown/Builtin-options.md b/docs/markdown/Builtin-options.md
index c2b10b6..ea5ad70 100644
--- a/docs/markdown/Builtin-options.md
+++ b/docs/markdown/Builtin-options.md
@@ -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
diff --git a/mesonbuild/coredata.py b/mesonbuild/coredata.py
index 344da4c..6f75534 100644
--- a/mesonbuild/coredata.py
+++ b/mesonbuild/coredata.py
@@ -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
diff --git a/run_unittests.py b/run_unittests.py
index 41e8ad4..f867f1c 100755
--- a/run_unittests.py
+++ b/run_unittests.py
@@ -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')