Home | History | Annotate | Download | only in bin
      1 import os
      2 import glob
      3 
      4 """
      5 One day, when this module grows up, it might actually try to fix things.
      6 'apt-cache search | apt-get install' ... or a less terrifying version of
      7 the same. With added distro-independant pixie dust.
      8 """
      9 
     10 def command(cmd):
     11     # this could use '/usr/bin/which', I suppose. But this seems simpler
     12     for dir in os.environ['PATH'].split(':'):
     13         file = os.path.join(os.path.expandvars(os.path.expanduser(dir)), cmd)
     14         if os.path.exists(file):
     15             return file
     16     raise ValueError('Missing command: %s' % cmd)
     17 
     18 
     19 def commands(*cmds):
     20     results = []
     21     for cmd in cmds:
     22         results.append(command(cmd))
     23 
     24 
     25 def library(lib):
     26     lddirs = []
     27     # read lddirs from  main ld.so.conf file
     28     for line in open('/etc/ld.so.conf', 'r').readlines():
     29         if line.startswith('include '):
     30             glob_pattern = line.split('include ')[1]
     31             if not os.path.isabs(glob_pattern):
     32                 # prepend with a base path of '/etc'
     33                 glob_pattern = os.path.join('/etc', glob_pattern)
     34             glob_result = glob.glob(glob_pattern)
     35             for conf_file in glob_result:
     36                 for conf_file_line in open(conf_file, 'r').readlines():
     37                     if os.path.isdir(conf_file_line):
     38                         lddirs.append(conf_file_line)
     39         else:
     40             if os.path.isdir(line):
     41                 lddirs.append(line.strip())
     42 
     43     lddirs = set(lddirs)
     44     lddirs = list(lddirs)
     45 
     46     for dir in ['/lib', '/usr/lib', '/lib64', '/usr/lib64'] + lddirs:
     47         file = os.path.join(dir, lib)
     48         if os.path.exists(file):
     49             return file
     50     raise ValueError('Missing library: %s' % lib)
     51 
     52 
     53 def libraries(*libs):
     54     results = []
     55     for lib in libs:
     56         results.append(library(lib))
     57 
     58 
     59 def header(hdr):
     60     for dir in ['/usr/include', '/usr/local/include']:
     61         file = os.path.join(dir, hdr)
     62         if os.path.exists(file):
     63             return file
     64     raise ValueError('Missing header: %s' % hdr)
     65 
     66 
     67 def headers(*hdrs):
     68     results = []
     69     for hdr in hdrs:
     70         results.append(header(hdr))
     71