Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/sjhbuild/sysdeps.py
diff options
context:
space:
mode:
Diffstat (limited to 'sjhbuild/sysdeps.py')
-rw-r--r--sjhbuild/sysdeps.py91
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