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 if ls $included_files >/dev/null 2>&1 ; then 50 for inc_file in $included_files; do 51 echo $inc_file | grep -qs ^/ 52 if [ $? -eq 0 ]; then 53 process_ld_so_conf "$root" "$root$inc_file" 54 else 55 process_ld_so_conf "$root" "$(pwd)/$inc_file" 56 fi 57 done 58 fi 59 continue 60 fi 61 62 echo "$ENTRY" | grep -qs ^/ 63 if [ $? -eq 0 ]; then 64 process_entry "$root" "$ENTRY" 65 fi 66 done 67 68 # popd is a bashism 69 cd "$saved_pwd" 70 } 71 72 # Main 73 74 if [ $# -ne 1 ]; then 75 echo Usage $0 /abspath/to/sysroot 76 exit 1 77 fi 78 79 echo $1 | grep -qs ' ' 80 if [ $? -eq 0 ]; then 81 log_error_and_exit $1 contains whitespace. 82 fi 83 84 LD_SO_CONF="$1/etc/ld.so.conf" 85 LD_SO_CONF_D="$1/etc/ld.so.conf.d" 86 87 if [ -e "$LD_SO_CONF" ]; then 88 process_ld_so_conf "$1" "$LD_SO_CONF" | xargs echo 89 elif [ -e "$LD_SO_CONF_D" ]; then 90 find "$LD_SO_CONF_D" -maxdepth 1 -name '*.conf' -print -quit > /dev/null 91 if [ $? -eq 0 ]; then 92 for entry in $LD_SO_CONF_D/*.conf; do 93 process_ld_so_conf "$1" "$entry" 94 done | xargs echo 95 fi 96 fi 97