You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

71 lines
2.0 KiB

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))