Upstream version 5.34.104.0
[platform/framework/web/crosswalk.git] / src / build / linux / sysroot_ld_path.sh
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