diff --git a/build_files/build_environment/install_linux_packages.py b/build_files/build_environment/install_linux_packages.py index 80dee3439ad..7b34b167f5d 100755 --- a/build_files/build_environment/install_linux_packages.py +++ b/build_files/build_environment/install_linux_packages.py @@ -4,6 +4,7 @@ # SPDX-License-Identifier: GPL-2.0-or-later import logging +import os import re import subprocess import sys @@ -691,7 +692,7 @@ PACKAGES_ALL = ( DISTRO_ID_ARCH: "clang", # clang-format is part of the main clang package. }, ), - Package(name="Python", is_mandatory=True, version="3.10.11", version_short="3.10", version_min="3.10", version_mex="3.12", + Package(name="Python", is_mandatory=True, version="3.10.12", version_short="3.10", version_min="3.10", version_mex="3.12", sub_packages=PYTHON_SUBPACKAGES, distro_package_names={DISTRO_ID_DEBIAN: "python3-dev", DISTRO_ID_FEDORA: "python3-devel", @@ -1632,22 +1633,43 @@ def get_distro(settings): settings.logger.info(f"Distribution identifier forced by user to {settings.distro_id}.") return settings.distro_id import platform - info = platform.freedesktop_os_release() - ids = [info["ID"]] - if "ID_LIKE" in info: - # ids are space separated and ordered by precedence. - ids.extend(info["ID_LIKE"].split()) - for distro_id in ids: - if distro_id in DISTRO_IDS_INSTALLERS: - settings.distro_id = distro_id - return distro_id - settings.logger.warning(f"Distribution IDs do not match any supported one by this script ({ids})") + if hasattr(platform, "freedesktop_os_release"): + info = platform.freedesktop_os_release() + ids = [info["ID"]] + if "ID_LIKE" in info: + # ids are space separated and ordered by precedence. + ids.extend(info["ID_LIKE"].split()) + for distro_id in ids: + if distro_id in DISTRO_IDS_INSTALLERS: + settings.distro_id = distro_id + return distro_id + settings.logger.warning(f"Distribution IDs do not match any supported one by this script ({ids})") + + settings.logger.warning("A valid distribution ID could not be found using `platform.freedesktop_os_release`, " + "now trying a lower-level check for specific files") + if os.path.exists("/etc/debian_version"): + distro_id = DISTRO_ID_DEBIAN + elif os.path.exists("/etc/redhat-release"): + distro_id = DISTRO_ID_FEDORA + elif os.path.exists("/etc/SuSE-release"): + distro_id = DISTRO_ID_SUSE + elif os.path.exists("/etc/arch-release"): + distro_id = DISTRO_ID_ARCH + if distro_id in DISTRO_IDS_INSTALLERS: + settings.distro_id = distro_id + return distro_id + settings.distro_id = ... return ... def get_distro_package_installer(settings): - return DISTRO_IDS_INSTALLERS[get_distro(settings)](settings) + distro_id = get_distro(settings) + if distro_id is ...: + settings.logger.warning("No valid distribution ID found, please try to set it using the `--distro-id` option") + else: + settings.logger.info(f"Distribution identified as '{distro_id}'") + return DISTRO_IDS_INSTALLERS[distro_id](settings) def argparse_create():