blob: 4b8bf7305e2f285000811a35e36fe3231452ad3b [file] [log] [blame]
Ben Murdoch097c5b22016-05-18 11:27:45 +01001#!/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
12log_error_and_exit() {
13 echo $0: $@
14 exit 1
15}
16
17process_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
33process_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
78if [ $# -ne 1 ]; then
79 echo Usage $0 /abspath/to/sysroot
80 exit 1
81fi
82
83echo $1 | grep -qs ' '
84if [ $? -eq 0 ]; then
85 log_error_and_exit $1 contains whitespace.
86fi
87
88LD_SO_CONF="$1/etc/ld.so.conf"
89LD_SO_CONF_D="$1/etc/ld.so.conf.d"
90
91if [ -e "$LD_SO_CONF" ]; then
92 process_ld_so_conf "$1" "$LD_SO_CONF" | xargs echo
93elif [ -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
100fi