mirror of
https://github.com/Homebrew/brew.git
synced 2025-07-14 16:09:03 +08:00
cmd/shellenv: improve for newer macOS using /usr/libexec/path_helper
On macOS 14 and newer, `/usr/libexec/path_helper` supports setting a `PATH_HELPER_ROOT` environment variable. With this set, `path_helper` checks `$PATH_HELPER_ROOT/etc/paths` and `$PATH_HELPER_ROOT/etc/paths.d` in the same way it checks `/etc/paths` and `/etc/paths.d`. We can use this to simplify management of the user's `PATH` variable when they do `brew shellenv`. In particular, if their system supports it, we delegate setting the `PATH` environment variable to `path_helper` instead of our own code. We also write a default `etc/paths` file if one is not already present. This is nicer because it simplifies management of the user's `PATH` variable. For example, if a user wants a keg-only formula to be in their `PATH`, they can simply add the necessary path to `/etc/paths` or `/etc/paths.d` without having to do something like `brew link --force` or adding to `PATH` themselves. When `/usr/libexec/path_helper` is not available, we just fall back to the existing code.
This commit is contained in:
parent
06fc2247c7
commit
6dc90cbf83
@ -54,6 +54,13 @@ then
|
|||||||
HOMEBREW_DEFAULT_CACHE="${HOME}/Library/Caches/Homebrew"
|
HOMEBREW_DEFAULT_CACHE="${HOME}/Library/Caches/Homebrew"
|
||||||
HOMEBREW_DEFAULT_LOGS="${HOME}/Library/Logs/Homebrew"
|
HOMEBREW_DEFAULT_LOGS="${HOME}/Library/Logs/Homebrew"
|
||||||
HOMEBREW_DEFAULT_TEMP="/private/tmp"
|
HOMEBREW_DEFAULT_TEMP="/private/tmp"
|
||||||
|
|
||||||
|
HOMEBREW_MACOS_VERSION="$(/usr/bin/sw_vers -productVersion)"
|
||||||
|
|
||||||
|
IFS=. read -r -a MACOS_VERSION_ARRAY <<<"${HOMEBREW_MACOS_VERSION}"
|
||||||
|
printf -v HOMEBREW_MACOS_VERSION_NUMERIC "%02d%02d%02d" "${MACOS_VERSION_ARRAY[@]}"
|
||||||
|
|
||||||
|
unset MACOS_VERSION_ARRAY
|
||||||
else
|
else
|
||||||
CACHE_HOME="${HOMEBREW_XDG_CACHE_HOME:-${HOME}/.cache}"
|
CACHE_HOME="${HOMEBREW_XDG_CACHE_HOME:-${HOME}/.cache}"
|
||||||
HOMEBREW_DEFAULT_CACHE="${CACHE_HOME}/Homebrew"
|
HOMEBREW_DEFAULT_CACHE="${CACHE_HOME}/Homebrew"
|
||||||
@ -534,7 +541,6 @@ then
|
|||||||
HOMEBREW_PRODUCT="Homebrew"
|
HOMEBREW_PRODUCT="Homebrew"
|
||||||
HOMEBREW_SYSTEM="Macintosh"
|
HOMEBREW_SYSTEM="Macintosh"
|
||||||
[[ "${HOMEBREW_PROCESSOR}" == "x86_64" ]] && HOMEBREW_PROCESSOR="Intel"
|
[[ "${HOMEBREW_PROCESSOR}" == "x86_64" ]] && HOMEBREW_PROCESSOR="Intel"
|
||||||
HOMEBREW_MACOS_VERSION="$(/usr/bin/sw_vers -productVersion)"
|
|
||||||
# Don't change this from Mac OS X to match what macOS itself does in Safari on 10.12
|
# Don't change this from Mac OS X to match what macOS itself does in Safari on 10.12
|
||||||
HOMEBREW_OS_USER_AGENT_VERSION="Mac OS X ${HOMEBREW_MACOS_VERSION}"
|
HOMEBREW_OS_USER_AGENT_VERSION="Mac OS X ${HOMEBREW_MACOS_VERSION}"
|
||||||
|
|
||||||
@ -545,9 +551,6 @@ then
|
|||||||
HOMEBREW_PHYSICAL_PROCESSOR="arm64"
|
HOMEBREW_PHYSICAL_PROCESSOR="arm64"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
IFS=. read -r -a MACOS_VERSION_ARRAY <<<"${HOMEBREW_MACOS_VERSION}"
|
|
||||||
printf -v HOMEBREW_MACOS_VERSION_NUMERIC "%02d%02d%02d" "${MACOS_VERSION_ARRAY[@]}"
|
|
||||||
|
|
||||||
IFS=. read -r -a MACOS_VERSION_ARRAY <<<"${HOMEBREW_MACOS_OLDEST_ALLOWED}"
|
IFS=. read -r -a MACOS_VERSION_ARRAY <<<"${HOMEBREW_MACOS_OLDEST_ALLOWED}"
|
||||||
printf -v HOMEBREW_MACOS_OLDEST_ALLOWED_NUMERIC "%02d%02d%02d" "${MACOS_VERSION_ARRAY[@]}"
|
printf -v HOMEBREW_MACOS_OLDEST_ALLOWED_NUMERIC "%02d%02d%02d" "${MACOS_VERSION_ARRAY[@]}"
|
||||||
|
|
||||||
|
@ -18,6 +18,21 @@ homebrew-shellenv() {
|
|||||||
HOMEBREW_SHELL_NAME="$(/bin/ps -p "${PPID}" -c -o comm=)"
|
HOMEBREW_SHELL_NAME="$(/bin/ps -p "${PPID}" -c -o comm=)"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
if [[ -n "${HOMEBREW_MACOS}" ]] &&
|
||||||
|
[[ "${HOMEBREW_MACOS_VERSION_NUMERIC}" -ge "140000" ]] &&
|
||||||
|
[[ -x /usr/libexec/path_helper ]]
|
||||||
|
then
|
||||||
|
if [[ ! -f "${HOMEBREW_PREFIX}/etc/paths" ]]
|
||||||
|
then
|
||||||
|
printf '%s/bin\n%s/sbin\n' "${HOMEBREW_PREFIX}" "${HOMEBREW_PREFIX}" >"${HOMEBREW_PREFIX}/etc/paths"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ -r "${HOMEBREW_PREFIX}/etc/paths" ]]
|
||||||
|
then
|
||||||
|
PATH_HELPER_ROOT="${HOMEBREW_PREFIX}"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
case "${HOMEBREW_SHELL_NAME}" in
|
case "${HOMEBREW_SHELL_NAME}" in
|
||||||
fish | -fish)
|
fish | -fish)
|
||||||
echo "set -gx HOMEBREW_PREFIX \"${HOMEBREW_PREFIX}\";"
|
echo "set -gx HOMEBREW_PREFIX \"${HOMEBREW_PREFIX}\";"
|
||||||
@ -31,7 +46,12 @@ homebrew-shellenv() {
|
|||||||
echo "setenv HOMEBREW_PREFIX ${HOMEBREW_PREFIX};"
|
echo "setenv HOMEBREW_PREFIX ${HOMEBREW_PREFIX};"
|
||||||
echo "setenv HOMEBREW_CELLAR ${HOMEBREW_CELLAR};"
|
echo "setenv HOMEBREW_CELLAR ${HOMEBREW_CELLAR};"
|
||||||
echo "setenv HOMEBREW_REPOSITORY ${HOMEBREW_REPOSITORY};"
|
echo "setenv HOMEBREW_REPOSITORY ${HOMEBREW_REPOSITORY};"
|
||||||
|
if [[ -n "${PATH_HELPER_ROOT}" ]]
|
||||||
|
then
|
||||||
|
echo "eval \`/usr/bin/env PATH_HELPER_ROOT=\"${PATH_HELPER_ROOT}\" /usr/libexec/path_helper -c\`;"
|
||||||
|
else
|
||||||
echo "setenv PATH ${HOMEBREW_PREFIX}/bin:${HOMEBREW_PREFIX}/sbin:\$PATH;"
|
echo "setenv PATH ${HOMEBREW_PREFIX}/bin:${HOMEBREW_PREFIX}/sbin:\$PATH;"
|
||||||
|
fi
|
||||||
echo "test \${?MANPATH} -eq 1 && setenv MANPATH :\${MANPATH};"
|
echo "test \${?MANPATH} -eq 1 && setenv MANPATH :\${MANPATH};"
|
||||||
echo "setenv INFOPATH ${HOMEBREW_PREFIX}/share/info\`test \${?INFOPATH} -eq 1 && echo :\${INFOPATH}\`;"
|
echo "setenv INFOPATH ${HOMEBREW_PREFIX}/share/info\`test \${?INFOPATH} -eq 1 && echo :\${INFOPATH}\`;"
|
||||||
;;
|
;;
|
||||||
@ -47,7 +67,12 @@ homebrew-shellenv() {
|
|||||||
echo "export HOMEBREW_PREFIX=\"${HOMEBREW_PREFIX}\";"
|
echo "export HOMEBREW_PREFIX=\"${HOMEBREW_PREFIX}\";"
|
||||||
echo "export HOMEBREW_CELLAR=\"${HOMEBREW_CELLAR}\";"
|
echo "export HOMEBREW_CELLAR=\"${HOMEBREW_CELLAR}\";"
|
||||||
echo "export HOMEBREW_REPOSITORY=\"${HOMEBREW_REPOSITORY}\";"
|
echo "export HOMEBREW_REPOSITORY=\"${HOMEBREW_REPOSITORY}\";"
|
||||||
|
if [[ -n "${PATH_HELPER_ROOT}" ]]
|
||||||
|
then
|
||||||
|
echo "eval \"\$(PATH_HELPER_ROOT=\"${PATH_HELPER_ROOT}\" /usr/libexec/path_helper -s)\""
|
||||||
|
else
|
||||||
echo "export PATH=\"${HOMEBREW_PREFIX}/bin:${HOMEBREW_PREFIX}/sbin\${PATH+:\$PATH}\";"
|
echo "export PATH=\"${HOMEBREW_PREFIX}/bin:${HOMEBREW_PREFIX}/sbin\${PATH+:\$PATH}\";"
|
||||||
|
fi
|
||||||
echo "[ -z \"\${MANPATH-}\" ] || export MANPATH=\":\${MANPATH#:}\";"
|
echo "[ -z \"\${MANPATH-}\" ] || export MANPATH=\":\${MANPATH#:}\";"
|
||||||
echo "export INFOPATH=\"${HOMEBREW_PREFIX}/share/info:\${INFOPATH:-}\";"
|
echo "export INFOPATH=\"${HOMEBREW_PREFIX}/share/info:\${INFOPATH:-}\";"
|
||||||
;;
|
;;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user