diff options
Diffstat (limited to 'sjhbuild/sysdeps.py')
-rw-r--r-- | sjhbuild/sysdeps.py | 91 |
1 files changed, 91 insertions, 0 deletions
diff --git a/sjhbuild/sysdeps.py b/sjhbuild/sysdeps.py new file mode 100644 index 0000000..b398cff --- /dev/null +++ b/sjhbuild/sysdeps.py @@ -0,0 +1,91 @@ +import os +import subprocess + +from xml.dom import minidom + +scripts_dir = os.path.dirname(__file__) +base_dir = os.path.dirname(scripts_dir) + +def get_distribution(): + if 'SJH_DISTRIBUTION' in os.environ: + return os.environ['SJH_DISTRIBUTION'].split('-') + + # Fedora + if os.path.exists('/etc/fedora-release'): + name = 'fedora' + + f = open('/etc/fedora-release') + full_name = f.read() + f.close() + + if 'Rawhide' in full_name: + version = 'rawhide' + else: + version = full_name.split(' ')[2] + + return name, version + + # Debian and Ubuntu + try: + out, err = subprocess.Popen(['lsb_release', '-is'], + stdout=subprocess.PIPE).communicate() + name = out.strip().lower() + + out, err = subprocess.Popen(['lsb_release', '-rs'], + stdout=subprocess.PIPE).communicate() + version = out.strip() + + if name == 'debian' and version == 'testing': + version = 'unstable' + + return name, version + except OSError: + pass + + return None, None + +def check_package(package): + name, version = get_distribution() + if name == 'fedora': + ret = subprocess.call(['rpm', '--quiet', '-q', package]) + return ret == 0 + elif name in ['ubuntu', 'debian']: + cmd = ["dpkg-query", "-f='${status}'", "-W", package] + out, err = subprocess.Popen(cmd, stdout=subprocess.PIPE).communicate() + return out.find('install ok installed') != -1 + + return None + +def parse_dependencies(): + name, version = get_distribution() + if name is None or version is None: + return None + + filename = os.path.join(base_dir, 'config', 'sysdeps', + '%s-%s.xml' % (name, version)) + + if not os.path.exists(filename): + return None + + return minidom.parse(filename) + +def get_packages(): + document = parse_dependencies() + if document is None: + return [] + + packages = [] + root = document.childNodes[0] + + for node in root.childNodes: + if node.nodeType == node.ELEMENT_NODE: + if node.nodeName == 'package': + name = node.getAttribute('name') + if node.hasAttribute('source'): + source = node.getAttribute('source') + else: + source = None + + packages.append((name, source)) + + return packages |