diff options
author | Mathieu Duponchelle <mathieu@centricular.com> | 2019-11-10 16:34:08 +0100 |
---|---|---|
committer | Nirbheek Chauhan <nirbheek@centricular.com> | 2019-11-28 16:59:17 +0530 |
commit | b1f8e595d070cd8e8fc48c4db413e4e93a4f99f4 (patch) | |
tree | d5467e5b1ec86dbfd650367cb8a77323c3ed7cf5 | |
parent | a26c8282b3b06b041850d70f303c949edfa061d5 (diff) | |
download | meson-b1f8e595d070cd8e8fc48c4db413e4e93a4f99f4.zip meson-b1f8e595d070cd8e8fc48c4db413e4e93a4f99f4.tar.gz meson-b1f8e595d070cd8e8fc48c4db413e4e93a4f99f4.tar.bz2 |
hotdoc: work around argparse syntax ambiguity
Fixes #5800
-rw-r--r-- | mesonbuild/modules/hotdoc.py | 22 |
1 files changed, 19 insertions, 3 deletions
diff --git a/mesonbuild/modules/hotdoc.py b/mesonbuild/modules/hotdoc.py index 02e07a9..bf4386f 100644 --- a/mesonbuild/modules/hotdoc.py +++ b/mesonbuild/modules/hotdoc.py @@ -81,12 +81,28 @@ class HotdocTargetBuilder: elif isinstance(value, list): # Do not do anything on empty lists if value: + # https://bugs.python.org/issue9334 (from 2010 :( ) + # The syntax with nargs=+ is inherently ambiguous + # A workaround for this case is to simply prefix with a space + # every value starting with a dash + escaped_value = [] + for e in value: + if isinstance(e, str) and e.startswith('-'): + escaped_value += [' %s' % e] + else: + escaped_value += [e] if option: - self.cmd.extend([option] + value) + self.cmd.extend([option] + escaped_value) else: - self.cmd.extend(value) + self.cmd.extend(escaped_value) else: - self.cmd.extend([option, value]) + # argparse gets confused if value(s) start with a dash. + # When an option expects a single value, the unambiguous way + # to specify it is with = + if isinstance(value, str): + self.cmd.extend(['%s=%s' % (option, value)]) + else: + self.cmd.extend([option, value]) def check_extra_arg_type(self, arg, value): value = getattr(value, 'held_object', value) |