Skip to content

Commit 792313f

Browse files
committed
Fully resolve symlinks in wrapper scripts
1 parent 475816a commit 792313f

File tree

1 file changed

+18
-3
lines changed

1 file changed

+18
-3
lines changed

scripts/package-linux.sh

Lines changed: 18 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,21 @@ preload_tools=(
2828
"bin/sby-gui"
2929
)
3030

31+
resolve_bindir=$(cat << EOT
32+
# Find this script's location, resolving any symlinks along the way.
33+
# https://stackoverflow.com/a/246128
34+
source=\${BASH_SOURCE[0]}
35+
while [ -L "\$source" ]; do # resolve \$source until the file is no longer a symlink
36+
release_bindir=\$( cd -P "\$( dirname "\$source" )" >/dev/null 2>&1 && pwd )
37+
source=\$(readlink "\$source")
38+
# if \$source was a relative symlink, we need to resolve it relative to the path
39+
# where the symlink file was located
40+
[[ \$source != /* ]] && source=\$release_bindir/\$source
41+
done
42+
release_bindir=\$( cd -P "\$( dirname "\$source" )" >/dev/null 2>&1 && pwd )
43+
EOT
44+
)
45+
3146
for bindir in bin py2bin py3bin super_prove/bin share/verilator/bin lib/ivl; do
3247
for binfile in $(file $bindir/* | grep ELF | grep dynamically | grep interpreter | cut -f1 -d:); do
3348
rel_path=$(realpath --relative-to=$bindir .)
@@ -38,7 +53,7 @@ for bindir in bin py2bin py3bin super_prove/bin share/verilator/bin lib/ivl; do
3853
is_using_fonts=false
3954
cat > $binfile << EOT
4055
#!/usr/bin/env bash
41-
release_bindir="\$(dirname "\${BASH_SOURCE[0]}")"
56+
$resolve_bindir
4257
release_bindir_abs="\$(readlink -f "\$release_bindir")"
4358
release_topdir_abs="\$(readlink -f "\$release_bindir/$rel_path")"
4459
export PATH="\$release_bindir_abs:\$PATH"
@@ -190,7 +205,7 @@ for script in bin/* py3bin/*; do
190205
mv "${script}" libexec
191206
cat > "${script}" <<EOT
192207
#!/usr/bin/env bash
193-
release_bindir="\$(dirname "\${BASH_SOURCE[0]}")"
208+
$resolve_bindir
194209
release_bindir_abs="\$(readlink -f "\$release_bindir/../bin")"
195210
release_topdir_abs="\$(readlink -f "\$release_bindir/$rel_path")"
196211
export PATH="\$release_bindir_abs:\$PATH"
@@ -264,7 +279,7 @@ if [ -f "bin/yosys-config" ]; then
264279
mv bin/yosys-config bin/yosys-config.orig
265280
cat > bin/yosys-config << EOT
266281
#!/usr/bin/env bash
267-
release_bindir="\$(dirname "\${BASH_SOURCE[0]}")"
282+
$resolve_bindir
268283
release_bindir_abs="\$(readlink -f "\$release_bindir")"
269284
release_topdir_abs="\$(readlink -f "\$release_bindir/$rel_path")"
270285
EOT

0 commit comments

Comments
 (0)