You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
78 lines
2.3 KiB
78 lines
2.3 KiB
import argparse |
|
import sys |
|
import subprocess |
|
|
|
|
|
def parse_config_settings_args(config_settings): |
|
""" |
|
Given a list of config `KEY=VALUE` formatted config settings, |
|
return a dictionary that can be passed to PEP 517 hook functions. |
|
""" |
|
if not config_settings: |
|
return config_settings |
|
new_config_settings = {} |
|
for arg in config_settings: |
|
key, _, value = arg.partition('=') |
|
if key in new_config_settings: |
|
if not isinstance(new_config_settings[key], list): |
|
# convert the existing value to a list |
|
new_config_settings[key] = [new_config_settings[key]] |
|
new_config_settings[key].append(value) |
|
else: |
|
new_config_settings[key] = value |
|
return new_config_settings |
|
|
|
|
|
def get_config_settings_args(config_settings): |
|
""" |
|
Given a dictionary of PEP 517 backend config_settings, |
|
yield --config-settings args that can be passed to pip's CLI |
|
""" |
|
if not config_settings: |
|
return |
|
for key, values in config_settings.items(): |
|
if not isinstance(values, list): |
|
values = [values] |
|
for value in values: |
|
if value == '': |
|
yield f'--config-settings={key}' |
|
else: |
|
yield f'--config-settings={key}={value}' |
|
|
|
|
|
def build_wheel(*, wheeldir, stdout=None, config_settings=None): |
|
command = ( |
|
sys.executable, |
|
'-m', 'pip', |
|
'wheel', |
|
'--wheel-dir', wheeldir, |
|
'--no-deps', |
|
'--use-pep517', |
|
'--no-build-isolation', |
|
'--disable-pip-version-check', |
|
'--no-clean', |
|
'--progress-bar', 'off', |
|
'--verbose', |
|
*get_config_settings_args(config_settings), |
|
'.', |
|
) |
|
cp = subprocess.run(command, stdout=stdout) |
|
return cp.returncode |
|
|
|
|
|
def parse_args(argv=None): |
|
parser = argparse.ArgumentParser(prog='%pyproject_wheel') |
|
parser.add_argument('wheeldir', help=argparse.SUPPRESS) |
|
parser.add_argument( |
|
'-C', |
|
dest='config_settings', |
|
action='append', |
|
help='Configuration settings to pass to the PEP 517 backend', |
|
) |
|
args = parser.parse_args(argv) |
|
args.config_settings = parse_config_settings_args(args.config_settings) |
|
return args |
|
|
|
|
|
if __name__ == '__main__': |
|
sys.exit(build_wheel(**vars(parse_args())))
|
|
|