diff options
-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) |