cffa27cb08285d1535e9812858dbad1551fc972f
[SubU] /
1 """
2 Backward compatibility for homebrew builds on macOS.
3 """
4
5
6 import sys
7 import os
8 import functools
9 import subprocess
10 import sysconfig
11
12
13 @functools.lru_cache()
14 def enabled():
15     """
16     Only enabled for Python 3.9 framework homebrew builds
17     except ensurepip and venv.
18     """
19     PY39 = (3, 9) < sys.version_info < (3, 10)
20     framework = sys.platform == 'darwin' and sys._framework
21     homebrew = "Cellar" in sysconfig.get_config_var('projectbase')
22     venv = sys.prefix != sys.base_prefix
23     ensurepip = os.environ.get("ENSUREPIP_OPTIONS")
24     return PY39 and framework and homebrew and not venv and not ensurepip
25
26
27 schemes = dict(
28     osx_framework_library=dict(
29         stdlib='{installed_base}/{platlibdir}/python{py_version_short}',
30         platstdlib='{platbase}/{platlibdir}/python{py_version_short}',
31         purelib='{homebrew_prefix}/lib/python{py_version_short}/site-packages',
32         platlib='{homebrew_prefix}/{platlibdir}/python{py_version_short}/site-packages',
33         include='{installed_base}/include/python{py_version_short}{abiflags}',
34         platinclude='{installed_platbase}/include/python{py_version_short}{abiflags}',
35         scripts='{homebrew_prefix}/bin',
36         data='{homebrew_prefix}',
37     )
38 )
39
40
41 @functools.lru_cache()
42 def vars():
43     if not enabled():
44         return {}
45     homebrew_prefix = subprocess.check_output(['brew', '--prefix'], text=True).strip()
46     return locals()
47
48
49 def scheme(name):
50     """
51     Override the selected scheme for posix_prefix.
52     """
53     if not enabled() or not name.endswith('_prefix'):
54         return name
55     return 'osx_framework_library'