xref: /aosp_15_r20/external/autotest/client/bin/os_dep.py (revision 9c5db1993ded3edbeafc8092d69fe5de2ee02df7)
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