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