from getopt import GetoptError, getopt | |
from typing import Dict, List | |
_options = [ | |
"exec-prefix=", | |
"home=", | |
"install-base=", | |
"install-data=", | |
"install-headers=", | |
"install-lib=", | |
"install-platlib=", | |
"install-purelib=", | |
"install-scripts=", | |
"prefix=", | |
"root=", | |
"user", | |
] | |
def parse_distutils_args(args: List[str]) -> Dict[str, str]: | |
"""Parse provided arguments, returning an object that has the matched arguments. | |
Any unknown arguments are ignored. | |
""" | |
result = {} | |
for arg in args: | |
try: | |
parsed_opt, _ = getopt(args=[arg], shortopts="", longopts=_options) | |
except GetoptError: | |
# We don't care about any other options, which here may be | |
# considered unrecognized since our option list is not | |
# exhaustive. | |
continue | |
if not parsed_opt: | |
continue | |
option = parsed_opt[0] | |
name_from_parsed = option[0][2:].replace("-", "_") | |
value_from_parsed = option[1] or "true" | |
result[name_from_parsed] = value_from_parsed | |
return result | |