Files
openide/python/helpers/pydev/build_tools/build_common.py
Andrey Lisin ca52af3787 PY-46655 Update debugger binaries build scripts to support M1
GitOrigin-RevId: f3cd800ab31b1c57c436e4d66a47201d9669ddaf
2022-07-04 11:04:51 +00:00

79 lines
2.3 KiB
Python

import os
import subprocess
import sys
__all__ = ['ensure_interpreters', 'regenerate_binaries']
from build_tools.build import BINARY_DIRS
root_dir = os.path.dirname(os.path.dirname(__file__))
IS_MACOS = sys.platform.startswith('darwin')
IS_WINDOWS = sys.platform.startswith('win32')
def extract_version(python_install):
if IS_MACOS:
return python_install.split('/')[-3][2:]
elif IS_WINDOWS:
return python_install.split('\\')[-3][2:]
raise RuntimeError("Unsupported platform '%s'." % sys.platform)
def list_binaries():
binary_suffix = None
if IS_MACOS:
binary_suffix = '.so'
elif IS_WINDOWS:
binary_suffix = '.pyd'
if binary_suffix is None:
raise RuntimeError("Unsupported platform '%s'." % sys.platform)
for binary_dir in BINARY_DIRS:
for f in os.listdir(os.path.join(root_dir, binary_dir)):
if f.endswith(binary_suffix):
yield f
def ensure_interpreters(python_installations):
for python_install in python_installations:
assert os.path.exists(python_install), \
"'%s' interpreter does not exist." % python_install
def is_frame_evaluation_supported(version_number):
for prefix in ('36', '37', '38', '39', '310'):
if version_number.startswith(prefix):
return True
return False
def regenerate_binaries(python_installations):
for f in list_binaries():
raise AssertionError('Binary not removed: %s' % (f,))
for i, python_install in enumerate(python_installations):
version_number = extract_version(python_install)
new_name = 'pydevd_cython_%s_%s' % (sys.platform, version_number)
args = [
python_install,
os.path.join(root_dir, 'build_tools', 'build.py'),
'--no-remove-binaries',
'--target-pyd-name=%s' % new_name,
'--force-cython'
]
if i != 0:
args.append('--no-regenerate-files')
if is_frame_evaluation_supported(version_number):
name_frame_eval = 'pydevd_frame_evaluator_%s_%s' % (
sys.platform, version_number)
args.append('--target-pyd-frame-eval=%s' % name_frame_eval)
print('Calling: %s' % (' '.join(args)))
subprocess.check_call(args)