diff options
author | Paulo Neves <ptsneves@gmail.com> | 2019-11-12 12:52:42 +0100 |
---|---|---|
committer | Jussi Pakkanen <jpakkane@gmail.com> | 2019-11-13 22:04:15 +0200 |
commit | 07389e23bc225adb9f9462e2fec1272ee24062e9 (patch) | |
tree | 425b7ed0da0de8e008a487b987ca92f31813facc | |
parent | 2a73517e0808dbedb561f9670401d18309893eb0 (diff) | |
download | meson-07389e23bc225adb9f9462e2fec1272ee24062e9.zip meson-07389e23bc225adb9f9462e2fec1272ee24062e9.tar.gz meson-07389e23bc225adb9f9462e2fec1272ee24062e9.tar.bz2 |
coredata: CmdLineFileParser no longer interpolates strings.
Previously if a user tried to pass a command line build
option that contained a '%' character the command line
parser assumed that there was string interpolation to be
done. As there is no sense in such a scenario no code
provides any input for the interpolation. This then leads to
a failure.
In this commit we specifically override the defaults in
ConfigParser and set interpolation to None, which disables
command line build option interpolation.
Fixes #6157
-rw-r--r-- | mesonbuild/coredata.py | 2 | ||||
-rwxr-xr-x | run_unittests.py | 5 | ||||
-rw-r--r-- | test cases/unit/34 command line/meson_options.txt | 1 |
3 files changed, 7 insertions, 1 deletions
diff --git a/mesonbuild/coredata.py b/mesonbuild/coredata.py index 05cde4d..a5898f1 100644 --- a/mesonbuild/coredata.py +++ b/mesonbuild/coredata.py @@ -776,7 +776,7 @@ class CmdLineFileParser(configparser.ConfigParser): def __init__(self): # We don't want ':' as key delimiter, otherwise it would break when # storing subproject options like "subproject:option=value" - super().__init__(delimiters=['=']) + super().__init__(delimiters=['='], interpolation=None) def get_cmd_line_file(build_dir): return os.path.join(build_dir, 'meson-private', 'cmd_line.txt') diff --git a/run_unittests.py b/run_unittests.py index 1105a8f..a97aac6 100755 --- a/run_unittests.py +++ b/run_unittests.py @@ -3382,6 +3382,11 @@ recommended as it is not supported on some platforms''') self.assertEqual(obj.compiler_options.host['c_args'].value, ['foo bar', 'one', 'two']) self.wipe() + self.init(testdir, extra_args=['-Dset_percent_opt=myoption%']) + obj = mesonbuild.coredata.load(self.builddir) + self.assertEqual(obj.user_options['set_percent_opt'].value, 'myoption%') + self.wipe() + # Setting a 2nd time the same option should override the first value try: self.init(testdir, extra_args=['--bindir=foo', '--bindir=bar', diff --git a/test cases/unit/34 command line/meson_options.txt b/test cases/unit/34 command line/meson_options.txt index 7acc112..244f570 100644 --- a/test cases/unit/34 command line/meson_options.txt +++ b/test cases/unit/34 command line/meson_options.txt @@ -1 +1,2 @@ option('set_sub_opt', type : 'boolean', value : false) +option('set_percent_opt', type : 'string', value: 'not_set') |