# -*- mode: python; -*- """ Support code related to OS detection in general. System specific facilities or customization hooks live in mongo_platform_.py files. """ import os import platform # --- OS identification --- # # This needs to precede the options section so that we can only offer some options on certain # operating systems. # This function gets the running OS as identified by Python # It should only be used to set up defaults for options/variables, because # its value could potentially be overridden by setting TARGET_OS on the # command-line. Treat this output as the value of HOST_OS def get_running_os_name(): running_os = os.sys.platform if running_os.startswith("linux"): running_os = "linux" elif running_os.startswith("freebsd"): running_os = "freebsd" elif running_os.startswith("openbsd"): running_os = "openbsd" elif running_os == "sunos5": running_os = "solaris" elif running_os == "win32": running_os = "windows" elif running_os == "darwin": running_os = "macOS" else: running_os = "unknown" return running_os def env_get_os_name_wrapper(self): return self["TARGET_OS"] def is_os_raw(target_os, os_list_to_check): darwin_os_list = ["macOS", "tvOS", "tvOS-sim", "iOS", "iOS-sim", "watchOS", "watchOS-sim"] linux_os_list = ["android", "linux"] posix_os_list = ["openbsd", "freebsd", "solaris", "emscripten"] + darwin_os_list + linux_os_list os_families = { "darwin": darwin_os_list, "posix": posix_os_list, "linux": linux_os_list, } for os in os_list_to_check: if os == target_os or (os in os_families and target_os in os_families[os]): return True return False # This function tests the running OS as identified by Python # It should only be used to set up defaults for options/variables, because # its value could potentially be overridden by setting TARGET_OS on the # command-line. Treat this output as the value of HOST_OS def is_running_os(*os_list): return is_os_raw(get_running_os_name(), os_list) def env_os_is_wrapper(self, *os_list): return is_os_raw(self["TARGET_OS"], os_list) def is_arm_processor(): arch = platform.machine().lower() if "arm" in arch or "aarch64" in arch: return True return False