import os import glob """ One day, when this module grows up, it might actually try to fix things. 'apt-cache search | apt-get install' ... or a less terrifying version of the same. With added distro-independant pixie dust. """ def command(cmd): # this could use '/usr/bin/which', I suppose. But this seems simpler for dir in os.environ['PATH'].split(':'): file = os.path.join(os.path.expandvars(os.path.expanduser(dir)), cmd) if os.path.exists(file): return file raise ValueError('Missing command: %s' % cmd) def commands(*cmds): results = [] for cmd in cmds: results.append(command(cmd)) def library(lib): lddirs = [] # read lddirs from main ld.so.conf file for line in open('/etc/ld.so.conf', 'r').readlines(): if line.startswith('include '): glob_pattern = line.split('include ')[1] if not os.path.isabs(glob_pattern): # prepend with a base path of '/etc' glob_pattern = os.path.join('/etc', glob_pattern) glob_result = glob.glob(glob_pattern) for conf_file in glob_result: for conf_file_line in open(conf_file, 'r').readlines(): if os.path.isdir(conf_file_line): lddirs.append(conf_file_line) else: if os.path.isdir(line): lddirs.append(line.strip()) lddirs = set(lddirs) lddirs = list(lddirs) for dir in ['/lib', '/usr/lib', '/lib64', '/usr/lib64'] + lddirs: file = os.path.join(dir, lib) if os.path.exists(file): return file raise ValueError('Missing library: %s' % lib) def libraries(*libs): results = [] for lib in libs: results.append(library(lib)) def header(hdr): for dir in ['/usr/include', '/usr/local/include']: file = os.path.join(dir, hdr) if os.path.exists(file): return file raise ValueError('Missing header: %s' % hdr) def headers(*hdrs): results = [] for hdr in hdrs: results.append(header(hdr))