Support recursive symlinks in release script

See
https://github.com/cdr/code-server/issues/1746#issuecomment-637830396
This commit is contained in:
Anmol Sethi 2020-06-03 10:32:11 -04:00
parent 206f195c1c
commit 02a77b528b
No known key found for this signature in database
GPG Key ID: 8CEF1878FF10ADEB

View File

@ -1,26 +1,40 @@
#!/bin/sh
set -eu
# This script is intended to be bundled into the standalone releases.
# Runs code-server with the bundled node binary.
# More complicated than readlink -f or realpath to support macOS.
_realpath() {
if [ "$(uname)" = "Linux" ]; then
readlink -f "$1"
return
fi
# See https://github.com/cdr/code-server/issues/1537
root_dir() {
# We read the symlink, which may be relative from $0.
dst="$(readlink "$0")"
# We cd into the $0 directory.
cd "$(dirname "$0")" || exit 1
# Now we can cd into the directory above the dst directory which is the root
# of the release.
cd "$(dirname "$dst")/.." || exit 1
# Finally we use pwd -P to print the absolute path the root.
pwd -P || exit 1
if [ "$(uname)" = "Darwin" ]; then
# We read the symlink, which may be relative from $1.
script="$1"
if [ -L "$script" ]; then
while [ -L "$script" ]; do
script="$(readlink "$script")"
cd "$(dirname "$script")"
done
else
cd "$(dirname "$script")"
fi
echo "$PWD/$(basename "$script")"
return
fi
echo "Unsupported OS $(uname)" >&2
exit 1
}
ROOT="$(root_dir)"
ROOT="$(dirname "$(dirname "$(_realpath "$0")")")"
if [ "$(uname)" = "Linux" ]; then
export LD_LIBRARY_PATH="$ROOT/lib:$LD_LIBRARY_PATH"
export LD_LIBRARY_PATH="$ROOT/lib:${LD_LIBRARY_PATH-}"
elif [ "$(uname)" = "Darwin" ]; then
export DYLD_LIBRARY_PATH="$ROOT/lib:$DYLD_LIBRARY_PATH"
export DYLD_LIBRARY_PATH="$ROOT/lib:${DYLD_LIBRARY_PATH-}"
fi
exec "$ROOT/lib/node" "$ROOT" "$@"