1 #!/bin/sh 2 # Copyright (c) 2013 The Chromium Authors. All rights reserved. 3 # Use of this source code is governed by a BSD-style license that can be 4 # found in the LICENSE file. 5 6 # Reads etc/ld.so.conf and/or etc/ld.so.conf.d/*.conf and returns the 7 # appropriate linker flags. 8 # 9 # sysroot_ld_path.sh /abspath/to/sysroot 10 # 11 12 log_error_and_exit() { 13 echo $0: $@ 14 exit 1 15 } 16 17 process_entry() { 18 if [ -z "$1" ] || [ -z "$2" ]; then 19 log_error_and_exit "bad arguments to process_entry()" 20 fi 21 local root="$1" 22 local localpath="$2" 23 24 echo $localpath | grep -qs '^/' 25 if [ $? -ne 0 ]; then 26 log_error_and_exit $localpath does not start with / 27 fi 28 local entry="$root$localpath" 29 echo -L$entry 30 echo -Wl,-rpath-link=$entry 31 } 32 33 process_ld_so_conf() { 34 if [ -z "$1" ] || [ -z "$2" ]; then 35 log_error_and_exit "bad arguments to process_ld_so_conf()" 36 fi 37 local root="$1" 38 local ld_so_conf="$2" 39 40 # ld.so.conf may include relative include paths. pushd is a bashism. 41 local saved_pwd=$(pwd) 42 cd $(dirname "$ld_so_conf") 43 44 cat "$ld_so_conf" | \ 45 while read ENTRY; do 46 echo "$ENTRY" | grep -qs ^include 47 if [ $? -eq 0 ]; then 48 local included_files=$(echo "$ENTRY" | sed 's/^include //') 49 echo "$included_files" | grep -qs ^/ 50 if [ $? -eq 0 ]; then 51 if ls $root$included_files >/dev/null 2>&1 ; then 52 for inc_file in $root$included_files; do 53 process_ld_so_conf "$root" "$inc_file" 54 done 55 fi 56 else 57 if ls $(pwd)/$included_files >/dev/null 2>&1 ; then 58 for inc_file in $(pwd)/$included_files; do 59 process_ld_so_conf "$root" "$inc_file" 60 done 61 fi 62 fi 63 continue 64 fi 65 66 echo "$ENTRY" | grep -qs ^/ 67 if [ $? -eq 0 ]; then 68 process_entry "$root" "$ENTRY" 69 fi 70 done 71 72 # popd is a bashism 73 cd "$saved_pwd" 74 } 75 76 # Main 77 78 if [ $# -ne 1 ]; then 79 echo Usage $0 /abspath/to/sysroot 80 exit 1 81 fi 82 83 echo $1 | grep -qs ' ' 84 if [ $? -eq 0 ]; then 85 log_error_and_exit $1 contains whitespace. 86 fi 87 88 LD_SO_CONF="$1/etc/ld.so.conf" 89 LD_SO_CONF_D="$1/etc/ld.so.conf.d" 90 91 if [ -e "$LD_SO_CONF" ]; then 92 process_ld_so_conf "$1" "$LD_SO_CONF" | xargs echo 93 elif [ -e "$LD_SO_CONF_D" ]; then 94 find "$LD_SO_CONF_D" -maxdepth 1 -name '*.conf' -print -quit > /dev/null 95 if [ $? -eq 0 ]; then 96 for entry in $LD_SO_CONF_D/*.conf; do 97 process_ld_so_conf "$1" "$entry" 98 done | xargs echo 99 fi 100 fi 101