import os import subprocess _package_managers = {} _supported_distros = [] _distro_info = None def register_distro_info(distro_info): global _supported_distros _supported_distros.append(distro_info) def register_package_manager(name, package_manager): global _package_managers _package_managers[name] = package_manager def get_package_manager(test=False, interactive=True): global _package_managers package_manager_class = _package_managers[get_distro_info().name] return package_manager_class(test=test, interactive=interactive) def print_distro_info(): info = get_distro_info() print "\n= Distribution information =\n" print "Name: %s" % info.name print "Version: %s" % info.version print "GNOME version: %s" % info.gnome_version print "Gstreamer version: %s" % info.gstreamer_version print "Lib directory: %s" % info.lib_dir print "Supported: %s\n" % info.supported def get_distro_info(): global _supported_distros global _distro_info if _distro_info is not None: return _distro_info unknown_distro = None for info_class in _supported_distros: info = info_class() if info.name == "unknown": unknown_distro = info elif info.valid: _distro_info = info if _distro_info is None: _distro_info = unknown_distro if not _distro_info.supported: print "*********************************************************\n" \ "You are running an unsupported distribution. You might be\n" \ "able to make sugar work by installing or building \n" \ "packages but it certainly won't work out of the box.\n" \ "You are strongly encouraged to pick one of the supported \n" \ "distributions listed in the README.\n" \ "*********************************************************\n" return _distro_info