Skip to content

Commit 23e7e9e

Browse files
GnorTechrogerwang
authored andcommitted
add sysroot_ld_path.sh from Chromium repo for Node
1 parent d632860 commit 23e7e9e

File tree

1 file changed

+100
-0
lines changed

1 file changed

+100
-0
lines changed

tools/sysroot_ld_path.sh

Lines changed: 100 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,100 @@
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

0 commit comments

Comments
 (0)