15f9996aaSopenharmony_ci#!/bin/bash 25f9996aaSopenharmony_ci# Copyright (c) 2013 The Chromium Authors. All rights reserved. 35f9996aaSopenharmony_ci# Use of this source code is governed by a BSD-style license that can be 45f9996aaSopenharmony_ci# found in the LICENSE file. 55f9996aaSopenharmony_ci 65f9996aaSopenharmony_ci# Reads etc/ld.so.conf and/or etc/ld.so.conf.d/*.conf and returns the 75f9996aaSopenharmony_ci# appropriate linker flags. 85f9996aaSopenharmony_ci# 95f9996aaSopenharmony_ci# sysroot_ld_path.sh /abspath/to/sysroot 105f9996aaSopenharmony_ci# 115f9996aaSopenharmony_ci 125f9996aaSopenharmony_cilog_error_and_exit() { 135f9996aaSopenharmony_ci echo $0: $@ 145f9996aaSopenharmony_ci exit 1 155f9996aaSopenharmony_ci} 165f9996aaSopenharmony_ci 175f9996aaSopenharmony_ciprocess_entry() { 185f9996aaSopenharmony_ci if [ -z "$1" ] || [ -z "$2" ]; then 195f9996aaSopenharmony_ci log_error_and_exit "bad arguments to process_entry()" 205f9996aaSopenharmony_ci fi 215f9996aaSopenharmony_ci local root="$1" 225f9996aaSopenharmony_ci local localpath="$2" 235f9996aaSopenharmony_ci 245f9996aaSopenharmony_ci echo $localpath | grep -qs '^/' 255f9996aaSopenharmony_ci if [ $? -ne 0 ]; then 265f9996aaSopenharmony_ci log_error_and_exit $localpath does not start with / 275f9996aaSopenharmony_ci fi 285f9996aaSopenharmony_ci local entry="$root$localpath" 295f9996aaSopenharmony_ci echo $entry 305f9996aaSopenharmony_ci} 315f9996aaSopenharmony_ci 325f9996aaSopenharmony_ciprocess_ld_so_conf() { 335f9996aaSopenharmony_ci if [ -z "$1" ] || [ -z "$2" ]; then 345f9996aaSopenharmony_ci log_error_and_exit "bad arguments to process_ld_so_conf()" 355f9996aaSopenharmony_ci fi 365f9996aaSopenharmony_ci local root="$1" 375f9996aaSopenharmony_ci local ld_so_conf="$2" 385f9996aaSopenharmony_ci 395f9996aaSopenharmony_ci # ld.so.conf may include relative include paths. pushd is a bashism. 405f9996aaSopenharmony_ci local saved_pwd=$(pwd) 415f9996aaSopenharmony_ci cd $(dirname "$ld_so_conf") 425f9996aaSopenharmony_ci 435f9996aaSopenharmony_ci cat "$ld_so_conf" | \ 445f9996aaSopenharmony_ci while read ENTRY; do 455f9996aaSopenharmony_ci echo "$ENTRY" | grep -qs ^include 465f9996aaSopenharmony_ci if [ $? -eq 0 ]; then 475f9996aaSopenharmony_ci local included_files=$(echo "$ENTRY" | sed 's/^include //') 485f9996aaSopenharmony_ci echo "$included_files" | grep -qs ^/ 495f9996aaSopenharmony_ci if [ $? -eq 0 ]; then 505f9996aaSopenharmony_ci if ls $root$included_files >/dev/null 2>&1 ; then 515f9996aaSopenharmony_ci for inc_file in $root$included_files; do 525f9996aaSopenharmony_ci process_ld_so_conf "$root" "$inc_file" 535f9996aaSopenharmony_ci done 545f9996aaSopenharmony_ci fi 555f9996aaSopenharmony_ci else 565f9996aaSopenharmony_ci if ls $(pwd)/$included_files >/dev/null 2>&1 ; then 575f9996aaSopenharmony_ci for inc_file in $(pwd)/$included_files; do 585f9996aaSopenharmony_ci process_ld_so_conf "$root" "$inc_file" 595f9996aaSopenharmony_ci done 605f9996aaSopenharmony_ci fi 615f9996aaSopenharmony_ci fi 625f9996aaSopenharmony_ci continue 635f9996aaSopenharmony_ci fi 645f9996aaSopenharmony_ci 655f9996aaSopenharmony_ci echo "$ENTRY" | grep -qs ^/ 665f9996aaSopenharmony_ci if [ $? -eq 0 ]; then 675f9996aaSopenharmony_ci process_entry "$root" "$ENTRY" 685f9996aaSopenharmony_ci fi 695f9996aaSopenharmony_ci done 705f9996aaSopenharmony_ci 715f9996aaSopenharmony_ci # popd is a bashism 725f9996aaSopenharmony_ci cd "$saved_pwd" 735f9996aaSopenharmony_ci} 745f9996aaSopenharmony_ci 755f9996aaSopenharmony_ci# Main 765f9996aaSopenharmony_ciif [ $# -ne 1 ]; then 775f9996aaSopenharmony_ci echo "Usage $0 abspath to sysroot" 785f9996aaSopenharmony_ci exit 1 795f9996aaSopenharmony_cifi 805f9996aaSopenharmony_ci 815f9996aaSopenharmony_ciecho $1 | grep -qs ' ' 825f9996aaSopenharmony_ciif [ $? -eq 0 ]; then 835f9996aaSopenharmony_ci log_error_and_exit $1 contains whitespace. 845f9996aaSopenharmony_cifi 855f9996aaSopenharmony_ci 865f9996aaSopenharmony_ciLD_SO_CONF="$1/etc/ld.so.conf" 875f9996aaSopenharmony_ciLD_SO_CONF_D="$1/etc/ld.so.conf.d" 885f9996aaSopenharmony_ci 895f9996aaSopenharmony_ciif [ -e "$LD_SO_CONF" ]; then 905f9996aaSopenharmony_ci process_ld_so_conf "$1" "$LD_SO_CONF" | xargs echo 915f9996aaSopenharmony_cielif [ -e "$LD_SO_CONF_D" ]; then 925f9996aaSopenharmony_ci find "$LD_SO_CONF_D" -maxdepth 1 -name '*.conf' -print -quit > /dev/null 935f9996aaSopenharmony_ci if [ $? -eq 0 ]; then 945f9996aaSopenharmony_ci for entry in $LD_SO_CONF_D/*.conf; do 955f9996aaSopenharmony_ci process_ld_so_conf "$1" "$entry" 965f9996aaSopenharmony_ci done | xargs echo 975f9996aaSopenharmony_ci fi 985f9996aaSopenharmony_cifi 99