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
1 changed files with 29 additions and 15 deletions

View File

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