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