You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
gentoo-overlay/dev-util/rustup/files/symlink_rustup.sh

124 lines
2.5 KiB

#!@GENTOO_PORTAGE_EPREFIX@/bin/bash
set -euo pipefail
IFS=$'\n\t'
SYMLINK_RUSTUP_VERSION="0.0.3"
: "${CARGO_HOME:=${HOME}/.cargo}"
: "${RUSTUP_HOME:=${HOME}/.rustup}"
__err_exists="already exists, remove and re-run the script"
# dies with optional message
die() {
[[ ${QUIET-no} ]] && echo -e "${NOCOLOR=\e[1;31m*\e[0m }ERROR: ${*}" >&2
exit 1
} # die()
# outputs gentoo-style green * prefixed message, a good one ofc
good() {
[[ ${QUIET-no} ]] && echo -e "${NOCOLOR=\e[1;32m*\e[0m }${*}"
return 0
} # good()
# do I need to explain this?
usage() {
echo "Usage: ${0} [<options>]"
} # usage()
# and this
help() {
usage
echo
echo -n "Symlink system installation of rustup to"
echo " ${CARGO_HOME}"
echo
echo "Options:"
echo " -a, --apply Apply changes (required)"
echo " -C, --nocolor Disable colored output"
echo " -d, --debug Debug mode (sets -x shell option)"
echo " -V, --version Print version number"
echo " -q, --quiet Quiet mode"
} # help()
symlink_rustup() {
local binpath gentoo_rust tool tools=(
cargo{,-clippy,-fmt,-miri}
clippy-driver
rls
rust{c,doc,fmt,-gdb,-lldb,up}
)
binpath="@GENTOO_PORTAGE_EPREFIX@/usr/bin/rustup-init"
gentoo_rust="$(eselect --brief rust show 2>/dev/null)"
mkdir -p "${CARGO_HOME}/bin" || die
for tool in "${tools[@]}"; do
local symlink_path="${CARGO_HOME}/bin/${tool}"
if [[ -e "${symlink_path}" ]]; then
die "${symlink_path} ${__err_exists}"
else
ln -s ${QUIET--v} "${binpath}" "${symlink_path}" || die
fi
done
good "Setting gentoo ${gentoo_rust// /} as default toolchain"
[[ ${QUIET+set} != set ]] && "${CARGO_HOME}/bin/rustup" -V
"${CARGO_HOME}/bin/rustup" ${QUIET--v} toolchain link gentoo "/usr"
"${CARGO_HOME}/bin/rustup" ${QUIET--v} default gentoo
[[ ${QUIET+set} != set ]] && "${CARGO_HOME}/bin/rustup" show
good "Prepend ${CARGO_HOME}/bin to your PATH to use rustup"
good "rustup selfupdate is disabled, it will be updated by portage"
} # symlink_rustup()
main(){
[[ "$EUID" -eq 0 ]] && die "Running as root is not supported"
local me
me="$(basename "${BASH_SOURCE[${#BASH_SOURCE[@]} - 1]}")"
while [[ ${#} -gt 0 ]]; do
case ${1} in
-a|--apply)
APPLY=true
;;
-h|--help)
help
exit 0
;;
-V|--version)
echo "${me} ${SYMLINK_RUSTUP_VERSION:-unknown}"
exit 0
;;
-d|--debug)
set -x
;;
-C|--nocolor)
NOCOLOR=
;;
-q|--quiet)
QUIET=
;;
-*)
usage >&2
exit 1
;;
esac
shift
done
if [[ ${APPLY:-false} == true ]]; then
symlink_rustup
else
help
fi
} # main()
main "${@}"