actual = getpath(ns, expected)
self.assertEqual(expected, actual)
+ def test_framework_macos(self):
+ """ Test framework layout on macOS
+
+ This layout is primarily detected using a compile-time option
+ (WITH_NEXT_FRAMEWORK).
+ """
+ ns = MockPosixNamespace(
+ os_name="darwin",
+ argv0="/Library/Frameworks/Python.framework/Versions/9.8/Resources/Python.app/Contents/MacOS/Python",
+ WITH_NEXT_FRAMEWORK=1,
+ PREFIX="/Library/Frameworks/Python.framework/Versions/9.8",
+ EXEC_PREFIX="/Library/Frameworks/Python.framework/Versions/9.8",
+ ENV___PYVENV_LAUNCHER__="/Library/Frameworks/Python.framework/Versions/9.8/bin/python9.8",
+ real_executable="/Library/Frameworks/Python.framework/Versions/9.8/Resources/Python.app/Contents/MacOS/Python",
+ library="/Library/Frameworks/Python.framework/Versions/9.8/Python",
+ )
+ ns.add_known_xfile("/Library/Frameworks/Python.framework/Versions/9.8/Resources/Python.app/Contents/MacOS/Python")
+ ns.add_known_xfile("/Library/Frameworks/Python.framework/Versions/9.8/bin/python9.8")
+ ns.add_known_dir("/Library/Frameworks/Python.framework/Versions/9.8/lib/python9.8/lib-dynload")
+ ns.add_known_file("/Library/Frameworks/Python.framework/Versions/9.8/lib/python9.8/os.py")
+
+ # This is definitely not the stdlib (see discusion in bpo-46890)
+ #ns.add_known_file("/Library/Frameworks/lib/python98.zip")
+
+ expected = dict(
+ executable="/Library/Frameworks/Python.framework/Versions/9.8/bin/python9.8",
+ prefix="/Library/Frameworks/Python.framework/Versions/9.8",
+ exec_prefix="/Library/Frameworks/Python.framework/Versions/9.8",
+ base_executable="/Library/Frameworks/Python.framework/Versions/9.8/bin/python9.8",
+ base_prefix="/Library/Frameworks/Python.framework/Versions/9.8",
+ base_exec_prefix="/Library/Frameworks/Python.framework/Versions/9.8",
+ module_search_paths_set=1,
+ module_search_paths=[
+ "/Library/Frameworks/Python.framework/Versions/9.8/lib/python98.zip",
+ "/Library/Frameworks/Python.framework/Versions/9.8/lib/python9.8",
+ "/Library/Frameworks/Python.framework/Versions/9.8/lib/python9.8/lib-dynload",
+ ],
+ )
+ actual = getpath(ns, expected)
+ self.assertEqual(expected, actual)
+
+ def test_alt_framework_macos(self):
+ """ Test framework layout on macOS with alternate framework name
+
+ ``--with-framework-name=DebugPython``
+
+ This layout is primarily detected using a compile-time option
+ (WITH_NEXT_FRAMEWORK).
+ """
+ ns = MockPosixNamespace(
+ argv0="/Library/Frameworks/DebugPython.framework/Versions/9.8/Resources/Python.app/Contents/MacOS/DebugPython",
+ os_name="darwin",
+ WITH_NEXT_FRAMEWORK=1,
+ PREFIX="/Library/Frameworks/DebugPython.framework/Versions/9.8",
+ EXEC_PREFIX="/Library/Frameworks/DebugPython.framework/Versions/9.8",
+ ENV___PYVENV_LAUNCHER__="/Library/Frameworks/DebugPython.framework/Versions/9.8/bin/python9.8",
+ real_executable="/Library/Frameworks/DebugPython.framework/Versions/9.8/Resources/Python.app/Contents/MacOS/DebugPython",
+ library="/Library/Frameworks/DebugPython.framework/Versions/9.8/DebugPython",
+ PYTHONPATH=None,
+ ENV_PYTHONHOME=None,
+ ENV_PYTHONEXECUTABLE=None,
+ executable_dir=None,
+ py_setpath=None,
+ )
+ ns.add_known_xfile("/Library/Frameworks/DebugPython.framework/Versions/9.8/Resources/Python.app/Contents/MacOS/DebugPython")
+ ns.add_known_xfile("/Library/Frameworks/DebugPython.framework/Versions/9.8/bin/python9.8")
+ ns.add_known_dir("/Library/Frameworks/DebugPython.framework/Versions/9.8/lib/python9.8/lib-dynload")
+ ns.add_known_xfile("/Library/Frameworks/DebugPython.framework/Versions/9.8/lib/python9.8/os.py")
+
+ # This is definitely not the stdlib (see discusion in bpo-46890)
+ #ns.add_known_xfile("/Library/lib/python98.zip")
+ expected = dict(
+ executable="/Library/Frameworks/DebugPython.framework/Versions/9.8/bin/python9.8",
+ prefix="/Library/Frameworks/DebugPython.framework/Versions/9.8",
+ exec_prefix="/Library/Frameworks/DebugPython.framework/Versions/9.8",
+ base_executable="/Library/Frameworks/DebugPython.framework/Versions/9.8/bin/python9.8",
+ base_prefix="/Library/Frameworks/DebugPython.framework/Versions/9.8",
+ base_exec_prefix="/Library/Frameworks/DebugPython.framework/Versions/9.8",
+ module_search_paths_set=1,
+ module_search_paths=[
+ "/Library/Frameworks/DebugPython.framework/Versions/9.8/lib/python98.zip",
+ "/Library/Frameworks/DebugPython.framework/Versions/9.8/lib/python9.8",
+ "/Library/Frameworks/DebugPython.framework/Versions/9.8/lib/python9.8/lib-dynload",
+ ],
+ )
+ actual = getpath(ns, expected)
+ self.assertEqual(expected, actual)
+
+ def test_venv_framework_macos(self):
+ """Test a venv layout on macOS using a framework build
+ """
+ venv_path = "/tmp/workdir/venv"
+ ns = MockPosixNamespace(
+ os_name="darwin",
+ argv0="/Library/Frameworks/Python.framework/Versions/9.8/Resources/Python.app/Contents/MacOS/Python",
+ WITH_NEXT_FRAMEWORK=1,
+ PREFIX="/Library/Frameworks/Python.framework/Versions/9.8",
+ EXEC_PREFIX="/Library/Frameworks/Python.framework/Versions/9.8",
+ ENV___PYVENV_LAUNCHER__=f"{venv_path}/bin/python",
+ real_executable="/Library/Frameworks/Python.framework/Versions/9.8/Resources/Python.app/Contents/MacOS/Python",
+ library="/Library/Frameworks/Python.framework/Versions/9.8/Python",
+ )
+ ns.add_known_dir(venv_path)
+ ns.add_known_dir(f"{venv_path}/bin")
+ ns.add_known_dir(f"{venv_path}/lib")
+ ns.add_known_dir(f"{venv_path}/lib/python9.8")
+ ns.add_known_xfile(f"{venv_path}/bin/python")
+ ns.add_known_xfile("/Library/Frameworks/Python.framework/Versions/9.8/Resources/Python.app/Contents/MacOS/Python")
+ ns.add_known_xfile("/Library/Frameworks/Python.framework/Versions/9.8/bin/python9.8")
+ ns.add_known_dir("/Library/Frameworks/Python.framework/Versions/9.8/lib/python9.8/lib-dynload")
+ ns.add_known_xfile("/Library/Frameworks/Python.framework/Versions/9.8/lib/python9.8/os.py")
+ ns.add_known_file(f"{venv_path}/pyvenv.cfg", [
+ "home = /Library/Frameworks/Python.framework/Versions/9.8/bin"
+ ])
+ expected = dict(
+ executable=f"{venv_path}/bin/python",
+ prefix="/Library/Frameworks/Python.framework/Versions/9.8",
+ exec_prefix="/Library/Frameworks/Python.framework/Versions/9.8",
+ base_executable="/Library/Frameworks/Python.framework/Versions/9.8/bin/python9.8",
+ base_prefix="/Library/Frameworks/Python.framework/Versions/9.8",
+ base_exec_prefix="/Library/Frameworks/Python.framework/Versions/9.8",
+ module_search_paths_set=1,
+ module_search_paths=[
+ "/Library/Frameworks/Python.framework/Versions/9.8/lib/python98.zip",
+ "/Library/Frameworks/Python.framework/Versions/9.8/lib/python9.8",
+ "/Library/Frameworks/Python.framework/Versions/9.8/lib/python9.8/lib-dynload",
+ ],
+ )
+ actual = getpath(ns, expected)
+ self.assertEqual(expected, actual)
+
+ def test_venv_alt_framework_macos(self):
+ """Test a venv layout on macOS using a framework build
+
+ ``--with-framework-name=DebugPython``
+ """
+ venv_path = "/tmp/workdir/venv"
+ ns = MockPosixNamespace(
+ os_name="darwin",
+ argv0="/Library/Frameworks/DebugPython.framework/Versions/9.8/Resources/Python.app/Contents/MacOS/DebugPython",
+ WITH_NEXT_FRAMEWORK=1,
+ PREFIX="/Library/Frameworks/DebugPython.framework/Versions/9.8",
+ EXEC_PREFIX="/Library/Frameworks/DebugPython.framework/Versions/9.8",
+ ENV___PYVENV_LAUNCHER__=f"{venv_path}/bin/python",
+ real_executable="/Library/Frameworks/DebugPython.framework/Versions/9.8/Resources/Python.app/Contents/MacOS/DebugPython",
+ library="/Library/Frameworks/DebugPython.framework/Versions/9.8/DebugPython",
+ )
+ ns.add_known_dir(venv_path)
+ ns.add_known_dir(f"{venv_path}/bin")
+ ns.add_known_dir(f"{venv_path}/lib")
+ ns.add_known_dir(f"{venv_path}/lib/python9.8")
+ ns.add_known_xfile(f"{venv_path}/bin/python")
+ ns.add_known_xfile("/Library/Frameworks/DebugPython.framework/Versions/9.8/Resources/Python.app/Contents/MacOS/DebugPython")
+ ns.add_known_xfile("/Library/Frameworks/DebugPython.framework/Versions/9.8/bin/python9.8")
+ ns.add_known_dir("/Library/Frameworks/DebugPython.framework/Versions/9.8/lib/python9.8/lib-dynload")
+ ns.add_known_xfile("/Library/Frameworks/DebugPython.framework/Versions/9.8/lib/python9.8/os.py")
+ ns.add_known_file(f"{venv_path}/pyvenv.cfg", [
+ "home = /Library/Frameworks/DebugPython.framework/Versions/9.8/bin"
+ ])
+ expected = dict(
+ executable=f"{venv_path}/bin/python",
+ prefix="/Library/Frameworks/DebugPython.framework/Versions/9.8",
+ exec_prefix="/Library/Frameworks/DebugPython.framework/Versions/9.8",
+ base_executable="/Library/Frameworks/DebugPython.framework/Versions/9.8/bin/python9.8",
+ base_prefix="/Library/Frameworks/DebugPython.framework/Versions/9.8",
+ base_exec_prefix="/Library/Frameworks/DebugPython.framework/Versions/9.8",
+ module_search_paths_set=1,
+ module_search_paths=[
+ "/Library/Frameworks/DebugPython.framework/Versions/9.8/lib/python98.zip",
+ "/Library/Frameworks/DebugPython.framework/Versions/9.8/lib/python9.8",
+ "/Library/Frameworks/DebugPython.framework/Versions/9.8/lib/python9.8/lib-dynload",
+ ],
+ )
+ actual = getpath(ns, expected)
+ self.assertEqual(expected, actual)
+
def test_venv_macos(self):
"""Test a venv layout on macOS.
self["config"] = DEFAULT_CONFIG.copy()
self["os_name"] = "posix"
self["PLATLIBDIR"] = "lib"
+ self["WITH_NEXT_FRAMEWORK"] = 0
super().__init__(*a, **kw)
if argv0:
self["config"]["orig_argv"] = [argv0]