mirror of
https://gitflic.ru/project/openide/openide.git
synced 2025-12-17 07:20:53 +07:00
79 lines
2.3 KiB
Python
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)
|