xref: /aosp_15_r20/external/openscreen/build/scripts/sysroot_ld_path.py (revision 3f982cf4871df8771c9d4abe6e9a6f8d829b2736)
1*3f982cf4SFabien Sanglard#!/usr/bin/env python3
2*3f982cf4SFabien Sanglard
3*3f982cf4SFabien Sanglard# Copyright 2019 The Chromium Authors. All rights reserved.
4*3f982cf4SFabien Sanglard# Use of this source code is governed by a BSD-style license that can be
5*3f982cf4SFabien Sanglard# found in the LICENSE file.
6*3f982cf4SFabien Sanglard
7*3f982cf4SFabien Sanglard# Replacement for the deprecated sysroot_ld_path.sh implementation in Chrome.
8*3f982cf4SFabien Sanglard"""
9*3f982cf4SFabien SanglardReads etc/ld.so.conf and/or etc/ld.so.conf.d/*.conf and returns the
10*3f982cf4SFabien Sanglardappropriate linker flags.
11*3f982cf4SFabien Sanglard"""
12*3f982cf4SFabien Sanglard
13*3f982cf4SFabien Sanglardfrom __future__ import print_function
14*3f982cf4SFabien Sanglardimport argparse
15*3f982cf4SFabien Sanglardimport glob
16*3f982cf4SFabien Sanglardimport os
17*3f982cf4SFabien Sanglardimport sys
18*3f982cf4SFabien Sanglard
19*3f982cf4SFabien SanglardLD_SO_CONF_REL_PATH = "etc/ld.so.conf"
20*3f982cf4SFabien SanglardLD_SO_CONF_D_REL_PATH = "etc/ld.so.conf.d"
21*3f982cf4SFabien Sanglard
22*3f982cf4SFabien Sanglard
23*3f982cf4SFabien Sanglarddef parse_args(args):
24*3f982cf4SFabien Sanglard    p = argparse.ArgumentParser(__doc__)
25*3f982cf4SFabien Sanglard    p.add_argument('sysroot_path', nargs=1, help='Path to sysroot root folder')
26*3f982cf4SFabien Sanglard    return os.path.abspath(p.parse_args(args).sysroot_path[0])
27*3f982cf4SFabien Sanglard
28*3f982cf4SFabien Sanglard
29*3f982cf4SFabien Sanglarddef process_entry(sysroot_path, entry):
30*3f982cf4SFabien Sanglard    assert (entry.startswith('/'))
31*3f982cf4SFabien Sanglard    print(os.path.join(sysroot_path, entry.strip()[1:]))
32*3f982cf4SFabien Sanglard
33*3f982cf4SFabien Sanglarddef process_ld_conf_file(sysroot_path, conf_file_path):
34*3f982cf4SFabien Sanglard    with open(conf_file_path, 'r') as f:
35*3f982cf4SFabien Sanglard        for line in f.readlines():
36*3f982cf4SFabien Sanglard            if line.startswith('#'):
37*3f982cf4SFabien Sanglard                continue
38*3f982cf4SFabien Sanglard            process_entry(sysroot_path, line)
39*3f982cf4SFabien Sanglard
40*3f982cf4SFabien Sanglard
41*3f982cf4SFabien Sanglarddef process_ld_conf_folder(sysroot_path, ld_conf_path):
42*3f982cf4SFabien Sanglard    files = glob.glob(os.path.join(ld_conf_path, '*.conf'))
43*3f982cf4SFabien Sanglard    for file in files:
44*3f982cf4SFabien Sanglard        process_ld_conf_file(sysroot_path, file)
45*3f982cf4SFabien Sanglard
46*3f982cf4SFabien Sanglard
47*3f982cf4SFabien Sanglarddef process_ld_conf_files(sysroot_path):
48*3f982cf4SFabien Sanglard    conf_path = os.path.join(sysroot_path, LD_SO_CONF_REL_PATH)
49*3f982cf4SFabien Sanglard    conf_d_path = os.path.join(sysroot_path, LD_SO_CONF_D_REL_PATH)
50*3f982cf4SFabien Sanglard
51*3f982cf4SFabien Sanglard    if os.path.isdir(conf_path):
52*3f982cf4SFabien Sanglard        process_ld_conf_folder(sysroot_path, conf_path)
53*3f982cf4SFabien Sanglard    elif os.path.isdir(conf_d_path):
54*3f982cf4SFabien Sanglard        process_ld_conf_folder(sysroot_path, conf_d_path)
55*3f982cf4SFabien Sanglard
56*3f982cf4SFabien Sanglard
57*3f982cf4SFabien Sanglarddef main(args):
58*3f982cf4SFabien Sanglard    sysroot_path = parse_args(args)
59*3f982cf4SFabien Sanglard    process_ld_conf_files(sysroot_path)
60*3f982cf4SFabien Sanglard
61*3f982cf4SFabien Sanglard
62*3f982cf4SFabien Sanglardif __name__ == '__main__':
63*3f982cf4SFabien Sanglard    try:
64*3f982cf4SFabien Sanglard        sys.exit(main(sys.argv[1:]))
65*3f982cf4SFabien Sanglard    except Exception as e:
66*3f982cf4SFabien Sanglard        sys.stderr.write(str(e) + '\n')
67*3f982cf4SFabien Sanglard        sys.exit(1)
68