2020-10-12 09:23:49 +01:00
|
|
|
#####
|
2023-02-10 23:15:40 -05:00
|
|
|
##### First do the essential, fast things to ensure commands like `brew --prefix` and others that we want
|
|
|
|
##### to be able to `source` in shell configurations run quickly.
|
2020-10-12 09:23:49 +01:00
|
|
|
#####
|
|
|
|
|
2024-05-14 15:29:43 +09:00
|
|
|
case "${MACHTYPE}" in
|
2025-01-31 22:54:41 +01:00
|
|
|
arm64-* | aarch64-*)
|
2024-05-14 15:29:43 +09:00
|
|
|
HOMEBREW_PROCESSOR="arm64"
|
|
|
|
;;
|
|
|
|
x86_64-*)
|
|
|
|
HOMEBREW_PROCESSOR="x86_64"
|
|
|
|
;;
|
|
|
|
*)
|
|
|
|
HOMEBREW_PROCESSOR="$(uname -m)"
|
|
|
|
;;
|
|
|
|
esac
|
|
|
|
|
|
|
|
case "${OSTYPE}" in
|
|
|
|
darwin*)
|
|
|
|
HOMEBREW_SYSTEM="Darwin"
|
|
|
|
HOMEBREW_MACOS="1"
|
|
|
|
;;
|
|
|
|
linux*)
|
|
|
|
HOMEBREW_SYSTEM="Linux"
|
|
|
|
HOMEBREW_LINUX="1"
|
|
|
|
;;
|
|
|
|
*)
|
|
|
|
HOMEBREW_SYSTEM="$(uname -s)"
|
|
|
|
;;
|
2020-07-20 10:26:40 -07:00
|
|
|
esac
|
2024-05-14 15:29:43 +09:00
|
|
|
HOMEBREW_PHYSICAL_PROCESSOR="${HOMEBREW_PROCESSOR}"
|
2020-07-20 10:26:40 -07:00
|
|
|
|
2023-02-24 13:25:18 +00:00
|
|
|
HOMEBREW_MACOS_ARM_DEFAULT_PREFIX="/opt/homebrew"
|
|
|
|
HOMEBREW_MACOS_ARM_DEFAULT_REPOSITORY="${HOMEBREW_MACOS_ARM_DEFAULT_PREFIX}"
|
|
|
|
HOMEBREW_LINUX_DEFAULT_PREFIX="/home/linuxbrew/.linuxbrew"
|
|
|
|
HOMEBREW_LINUX_DEFAULT_REPOSITORY="${HOMEBREW_LINUX_DEFAULT_PREFIX}/Homebrew"
|
|
|
|
HOMEBREW_GENERIC_DEFAULT_PREFIX="/usr/local"
|
|
|
|
HOMEBREW_GENERIC_DEFAULT_REPOSITORY="${HOMEBREW_GENERIC_DEFAULT_PREFIX}/Homebrew"
|
|
|
|
if [[ -n "${HOMEBREW_MACOS}" && "${HOMEBREW_PROCESSOR}" == "arm64" ]]
|
|
|
|
then
|
|
|
|
HOMEBREW_DEFAULT_PREFIX="${HOMEBREW_MACOS_ARM_DEFAULT_PREFIX}"
|
|
|
|
HOMEBREW_DEFAULT_REPOSITORY="${HOMEBREW_MACOS_ARM_DEFAULT_REPOSITORY}"
|
|
|
|
elif [[ -n "${HOMEBREW_LINUX}" ]]
|
|
|
|
then
|
|
|
|
HOMEBREW_DEFAULT_PREFIX="${HOMEBREW_LINUX_DEFAULT_PREFIX}"
|
|
|
|
HOMEBREW_DEFAULT_REPOSITORY="${HOMEBREW_LINUX_DEFAULT_REPOSITORY}"
|
|
|
|
else
|
|
|
|
HOMEBREW_DEFAULT_PREFIX="${HOMEBREW_GENERIC_DEFAULT_PREFIX}"
|
|
|
|
HOMEBREW_DEFAULT_REPOSITORY="${HOMEBREW_GENERIC_DEFAULT_REPOSITORY}"
|
|
|
|
fi
|
|
|
|
|
2021-04-16 22:32:30 +09:00
|
|
|
if [[ -n "${HOMEBREW_MACOS}" ]]
|
2020-10-12 09:23:49 +01:00
|
|
|
then
|
|
|
|
HOMEBREW_DEFAULT_CACHE="${HOME}/Library/Caches/Homebrew"
|
|
|
|
HOMEBREW_DEFAULT_LOGS="${HOME}/Library/Logs/Homebrew"
|
|
|
|
HOMEBREW_DEFAULT_TEMP="/private/tmp"
|
2024-09-02 17:32:05 +08:00
|
|
|
|
|
|
|
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
|
2020-10-12 09:23:49 +01:00
|
|
|
else
|
2023-10-28 18:29:16 -07:00
|
|
|
CACHE_HOME="${HOMEBREW_XDG_CACHE_HOME:-${HOME}/.cache}"
|
2020-10-12 09:23:49 +01:00
|
|
|
HOMEBREW_DEFAULT_CACHE="${CACHE_HOME}/Homebrew"
|
|
|
|
HOMEBREW_DEFAULT_LOGS="${CACHE_HOME}/Homebrew/Logs"
|
|
|
|
HOMEBREW_DEFAULT_TEMP="/tmp"
|
|
|
|
fi
|
|
|
|
|
2023-07-09 17:41:30 -04:00
|
|
|
realpath() {
|
|
|
|
(cd "$1" &>/dev/null && pwd -P)
|
|
|
|
}
|
|
|
|
|
|
|
|
# Support systems where HOMEBREW_PREFIX is the default,
|
|
|
|
# but a parent directory is a symlink.
|
|
|
|
# Example: Fedora Silverblue symlinks /home -> var/home
|
|
|
|
if [[ "${HOMEBREW_PREFIX}" != "${HOMEBREW_DEFAULT_PREFIX}" && "$(realpath "${HOMEBREW_DEFAULT_PREFIX}")" == "${HOMEBREW_PREFIX}" ]]
|
|
|
|
then
|
|
|
|
HOMEBREW_PREFIX="${HOMEBREW_DEFAULT_PREFIX}"
|
|
|
|
fi
|
|
|
|
|
|
|
|
# Support systems where HOMEBREW_REPOSITORY is the default,
|
|
|
|
# but a parent directory is a symlink.
|
|
|
|
# Example: Fedora Silverblue symlinks /home -> var/home
|
|
|
|
if [[ "${HOMEBREW_REPOSITORY}" != "${HOMEBREW_DEFAULT_REPOSITORY}" && "$(realpath "${HOMEBREW_DEFAULT_REPOSITORY}")" == "${HOMEBREW_REPOSITORY}" ]]
|
|
|
|
then
|
|
|
|
HOMEBREW_REPOSITORY="${HOMEBREW_DEFAULT_REPOSITORY}"
|
|
|
|
fi
|
|
|
|
|
2023-07-08 21:55:26 -04:00
|
|
|
# Where we store built products; a Cellar in HOMEBREW_PREFIX (often /usr/local
|
|
|
|
# for bottles) unless there's already a Cellar in HOMEBREW_REPOSITORY.
|
|
|
|
# These variables are set by bin/brew
|
|
|
|
# shellcheck disable=SC2154
|
|
|
|
if [[ -d "${HOMEBREW_REPOSITORY}/Cellar" ]]
|
|
|
|
then
|
|
|
|
HOMEBREW_CELLAR="${HOMEBREW_REPOSITORY}/Cellar"
|
|
|
|
else
|
|
|
|
HOMEBREW_CELLAR="${HOMEBREW_PREFIX}/Cellar"
|
|
|
|
fi
|
|
|
|
|
2024-05-17 11:59:40 +09:00
|
|
|
HOMEBREW_CASKROOM="${HOMEBREW_PREFIX}/Caskroom"
|
|
|
|
|
2020-10-12 09:23:49 +01:00
|
|
|
HOMEBREW_CACHE="${HOMEBREW_CACHE:-${HOMEBREW_DEFAULT_CACHE}}"
|
|
|
|
HOMEBREW_LOGS="${HOMEBREW_LOGS:-${HOMEBREW_DEFAULT_LOGS}}"
|
|
|
|
HOMEBREW_TEMP="${HOMEBREW_TEMP:-${HOMEBREW_DEFAULT_TEMP}}"
|
|
|
|
|
2024-04-30 12:06:16 +01:00
|
|
|
# commands that take a single or no arguments.
|
2024-05-14 15:29:43 +09:00
|
|
|
# HOMEBREW_LIBRARY set by bin/brew
|
|
|
|
# shellcheck disable=SC2154
|
|
|
|
# doesn't need a default case as other arguments handled elsewhere.
|
|
|
|
# shellcheck disable=SC2249
|
2024-04-30 12:06:16 +01:00
|
|
|
case "$1" in
|
2021-09-16 01:08:02 +08:00
|
|
|
formulae)
|
|
|
|
source "${HOMEBREW_LIBRARY}/Homebrew/cmd/formulae.sh"
|
|
|
|
homebrew-formulae
|
|
|
|
exit 0
|
|
|
|
;;
|
|
|
|
casks)
|
|
|
|
source "${HOMEBREW_LIBRARY}/Homebrew/cmd/casks.sh"
|
|
|
|
homebrew-casks
|
|
|
|
exit 0
|
|
|
|
;;
|
2024-04-30 12:06:16 +01:00
|
|
|
shellenv)
|
|
|
|
source "${HOMEBREW_LIBRARY}/Homebrew/cmd/shellenv.sh"
|
|
|
|
shift
|
|
|
|
homebrew-shellenv "$1"
|
|
|
|
exit 0
|
|
|
|
;;
|
|
|
|
esac
|
2024-07-13 16:40:14 -04:00
|
|
|
|
|
|
|
source "${HOMEBREW_LIBRARY}/Homebrew/help.sh"
|
|
|
|
|
2024-04-30 12:06:16 +01:00
|
|
|
# functions that take multiple arguments or handle multiple commands.
|
2024-05-14 15:29:43 +09:00
|
|
|
# doesn't need a default case as other arguments handled elsewhere.
|
|
|
|
# shellcheck disable=SC2249
|
2024-04-30 12:06:16 +01:00
|
|
|
case "$@" in
|
2024-04-30 16:58:11 +01:00
|
|
|
--cellar)
|
|
|
|
echo "${HOMEBREW_CELLAR}"
|
|
|
|
exit 0
|
|
|
|
;;
|
|
|
|
--repository | --repo)
|
|
|
|
echo "${HOMEBREW_REPOSITORY}"
|
|
|
|
exit 0
|
|
|
|
;;
|
|
|
|
--caskroom)
|
2024-05-17 11:59:40 +09:00
|
|
|
echo "${HOMEBREW_CASKROOM}"
|
2024-04-30 16:58:11 +01:00
|
|
|
exit 0
|
|
|
|
;;
|
|
|
|
--cache)
|
|
|
|
echo "${HOMEBREW_CACHE}"
|
|
|
|
exit 0
|
|
|
|
;;
|
2023-02-16 21:56:50 +00:00
|
|
|
# falls back to cmd/--prefix.rb and cmd/--cellar.rb on a non-zero return
|
|
|
|
--prefix* | --cellar*)
|
|
|
|
source "${HOMEBREW_LIBRARY}/Homebrew/formula_path.sh"
|
|
|
|
homebrew-formula-path "$@" && exit 0
|
2021-09-16 01:08:02 +08:00
|
|
|
;;
|
2024-04-30 11:09:42 +01:00
|
|
|
# falls back to cmd/command.rb on a non-zero return
|
|
|
|
command*)
|
|
|
|
source "${HOMEBREW_LIBRARY}/Homebrew/command_path.sh"
|
|
|
|
homebrew-command-path "$@" && exit 0
|
|
|
|
;;
|
2024-05-17 11:59:40 +09:00
|
|
|
# falls back to cmd/list.rb on a non-zero return
|
2024-09-03 00:03:18 +01:00
|
|
|
list* | ls*)
|
2024-05-17 11:59:40 +09:00
|
|
|
source "${HOMEBREW_LIBRARY}/Homebrew/list.sh"
|
|
|
|
homebrew-list "$@" && exit 0
|
|
|
|
;;
|
2024-09-25 17:16:18 +08:00
|
|
|
# homebrew-tap only handles invocations with no arguments
|
2024-09-25 11:59:22 +08:00
|
|
|
tap)
|
2024-09-25 01:50:43 +08:00
|
|
|
source "${HOMEBREW_LIBRARY}/Homebrew/tap.sh"
|
2024-09-25 17:16:18 +08:00
|
|
|
homebrew-tap "$@"
|
|
|
|
exit 0
|
2024-09-25 01:50:43 +08:00
|
|
|
;;
|
2024-07-13 16:40:14 -04:00
|
|
|
# falls back to cmd/help.rb on a non-zero return
|
2024-07-30 17:09:11 +08:00
|
|
|
help | --help | -h | --usage | "-?" | "")
|
2024-07-13 16:40:14 -04:00
|
|
|
homebrew-help "$@" && exit 0
|
|
|
|
;;
|
2017-07-25 06:54:40 -07:00
|
|
|
esac
|
|
|
|
|
2025-01-07 17:40:18 +00:00
|
|
|
# Include some helper functions.
|
|
|
|
source "${HOMEBREW_LIBRARY}/Homebrew/utils/helpers.sh"
|
|
|
|
|
|
|
|
# Require HOMEBREW_BREW_WRAPPER to be set if HOMEBREW_FORCE_BREW_WRAPPER is set
|
2025-01-08 14:04:18 +00:00
|
|
|
# (and HOMEBREW_NO_FORCE_BREW_WRAPPER is not set) for all non-trivial commands
|
|
|
|
# (i.e. not defined above this line e.g. formulae or --cellar).
|
|
|
|
if [[ -z "${HOMEBREW_NO_FORCE_BREW_WRAPPER:-}" && -n "${HOMEBREW_FORCE_BREW_WRAPPER:-}" ]]
|
2025-01-07 17:40:18 +00:00
|
|
|
then
|
2025-02-07 13:23:52 +00:00
|
|
|
HOMEBREW_FORCE_BREW_WRAPPER_WITHOUT_BREW="${HOMEBREW_FORCE_BREW_WRAPPER%/brew}"
|
2025-01-07 17:40:18 +00:00
|
|
|
if [[ -z "${HOMEBREW_BREW_WRAPPER:-}" ]]
|
|
|
|
then
|
|
|
|
odie <<EOS
|
2025-02-07 13:23:52 +00:00
|
|
|
conflicting Homebrew wrapper configuration!
|
|
|
|
HOMEBREW_FORCE_BREW_WRAPPER was set to ${HOMEBREW_FORCE_BREW_WRAPPER}
|
|
|
|
but HOMEBREW_BREW_WRAPPER was unset.
|
|
|
|
|
|
|
|
$(bold "Ensure you run ${HOMEBREW_FORCE_BREW_WRAPPER} directly (not ${HOMEBREW_BREW_FILE})")!
|
|
|
|
|
|
|
|
Manually setting your PATH can interfere with Homebrew wrappers.
|
|
|
|
Ensure your shell configuration contains:
|
|
|
|
eval "\$(${HOMEBREW_BREW_FILE} shellenv)"
|
|
|
|
or that ${HOMEBREW_FORCE_BREW_WRAPPER_WITHOUT_BREW} comes before ${HOMEBREW_PREFIX}/bin in your PATH:
|
|
|
|
export PATH="${HOMEBREW_FORCE_BREW_WRAPPER_WITHOUT_BREW}:${HOMEBREW_PREFIX}/bin:\$PATH"
|
2025-01-07 17:40:18 +00:00
|
|
|
EOS
|
2025-01-08 14:04:18 +00:00
|
|
|
elif [[ "${HOMEBREW_FORCE_BREW_WRAPPER}" != "${HOMEBREW_BREW_WRAPPER}" ]]
|
2025-01-07 17:40:18 +00:00
|
|
|
then
|
|
|
|
odie <<EOS
|
2025-02-07 13:23:52 +00:00
|
|
|
conflicting Homebrew wrapper configuration!
|
|
|
|
HOMEBREW_FORCE_BREW_WRAPPER was set to ${HOMEBREW_FORCE_BREW_WRAPPER}
|
|
|
|
but HOMEBREW_BREW_WRAPPER was set to ${HOMEBREW_BREW_WRAPPER}
|
|
|
|
|
|
|
|
$(bold "Ensure you run ${HOMEBREW_FORCE_BREW_WRAPPER} directly (not ${HOMEBREW_BREW_FILE})")!
|
|
|
|
|
|
|
|
Manually setting your PATH can interfere with Homebrew wrappers.
|
|
|
|
Ensure your shell configuration contains:
|
|
|
|
eval "\$(${HOMEBREW_BREW_FILE} shellenv)"
|
|
|
|
or that ${HOMEBREW_FORCE_BREW_WRAPPER_WITHOUT_BREW} comes before ${HOMEBREW_PREFIX}/bin in your PATH:
|
|
|
|
export PATH="${HOMEBREW_FORCE_BREW_WRAPPER_WITHOUT_BREW}:${HOMEBREW_PREFIX}/bin:\$PATH"
|
2025-01-07 17:40:18 +00:00
|
|
|
EOS
|
|
|
|
fi
|
|
|
|
fi
|
|
|
|
|
|
|
|
# commands that take a single or no arguments and need to write to HOMEBREW_PREFIX.
|
|
|
|
# HOMEBREW_LIBRARY set by bin/brew
|
|
|
|
# shellcheck disable=SC2154
|
|
|
|
# doesn't need a default case as other arguments handled elsewhere.
|
|
|
|
# shellcheck disable=SC2249
|
|
|
|
case "$1" in
|
|
|
|
setup-ruby)
|
|
|
|
source "${HOMEBREW_LIBRARY}/Homebrew/cmd/setup-ruby.sh"
|
|
|
|
shift
|
|
|
|
homebrew-setup-ruby "$1"
|
|
|
|
exit 0
|
|
|
|
;;
|
|
|
|
esac
|
|
|
|
|
2020-10-12 09:23:49 +01:00
|
|
|
#####
|
2025-01-07 17:40:18 +00:00
|
|
|
##### Next, define all other helper functions.
|
2020-10-12 09:23:49 +01:00
|
|
|
#####
|
2018-10-26 17:08:59 -04:00
|
|
|
|
2020-10-12 09:23:49 +01:00
|
|
|
check-run-command-as-root() {
|
2024-05-14 15:29:43 +09:00
|
|
|
[[ "${EUID}" == 0 || "${UID}" == 0 ]] || return
|
2020-10-12 09:23:49 +01:00
|
|
|
|
2024-10-15 10:39:10 +02:00
|
|
|
# Allow Azure Pipelines/GitHub Actions/Docker/Podman/Concourse/Kubernetes to do everything as root (as it's normal there)
|
2022-09-06 16:32:35 +01:00
|
|
|
[[ -f /.dockerenv ]] && return
|
2024-10-15 10:39:10 +02:00
|
|
|
[[ -f /run/.containerenv ]] && return
|
2020-10-12 09:23:49 +01:00
|
|
|
[[ -f /proc/1/cgroup ]] && grep -E "azpl_job|actions_job|docker|garden|kubepods" -q /proc/1/cgroup && return
|
|
|
|
|
2025-03-19 09:51:39 +00:00
|
|
|
# `brew services` may need `sudo` for system-wide daemons.
|
2021-09-13 20:32:20 +08:00
|
|
|
[[ "${HOMEBREW_COMMAND}" == "services" ]] && return
|
2020-10-12 09:23:49 +01:00
|
|
|
|
|
|
|
# It's fine to run this as root as it's not changing anything.
|
2021-09-13 20:32:20 +08:00
|
|
|
[[ "${HOMEBREW_COMMAND}" == "--prefix" ]] && return
|
2020-10-12 09:23:49 +01:00
|
|
|
|
|
|
|
odie <<EOS
|
|
|
|
Running Homebrew as root is extremely dangerous and no longer supported.
|
|
|
|
As Homebrew does not drop privileges on installation you would be giving all
|
|
|
|
build scripts full access to your system.
|
|
|
|
EOS
|
|
|
|
}
|
|
|
|
|
|
|
|
check-prefix-is-not-tmpdir() {
|
|
|
|
[[ -z "${HOMEBREW_MACOS}" ]] && return
|
|
|
|
|
2021-09-13 20:32:20 +08:00
|
|
|
if [[ "${HOMEBREW_PREFIX}" == "${HOMEBREW_TEMP}"* ]]
|
2020-10-12 09:23:49 +01:00
|
|
|
then
|
|
|
|
odie <<EOS
|
|
|
|
Your HOMEBREW_PREFIX is in the Homebrew temporary directory, which Homebrew
|
2023-02-10 23:15:40 -05:00
|
|
|
uses to store downloads and builds. You can resolve this by installing Homebrew
|
|
|
|
to either the standard prefix for your platform or to a non-standard prefix that
|
|
|
|
is not in the Homebrew temporary directory.
|
2020-10-12 09:23:49 +01:00
|
|
|
EOS
|
|
|
|
fi
|
|
|
|
}
|
|
|
|
|
2024-04-26 20:55:51 +02:00
|
|
|
# NOTE: The members of the array in the second arg must not have spaces!
|
2023-02-08 02:41:41 +08:00
|
|
|
check-array-membership() {
|
|
|
|
local item=$1
|
|
|
|
shift
|
|
|
|
|
|
|
|
if [[ " ${*} " == *" ${item} "* ]]
|
|
|
|
then
|
|
|
|
return 0
|
|
|
|
else
|
|
|
|
return 1
|
|
|
|
fi
|
|
|
|
}
|
|
|
|
|
2021-04-17 20:34:16 +09:00
|
|
|
# These variables are set from various Homebrew scripts.
|
2021-04-16 22:32:30 +09:00
|
|
|
# shellcheck disable=SC2154
|
2022-05-19 11:04:20 -04:00
|
|
|
auto-update() {
|
2021-04-16 22:32:30 +09:00
|
|
|
[[ -z "${HOMEBREW_HELP}" ]] || return
|
|
|
|
[[ -z "${HOMEBREW_NO_AUTO_UPDATE}" ]] || return
|
|
|
|
[[ -z "${HOMEBREW_AUTO_UPDATING}" ]] || return
|
2022-05-19 11:04:20 -04:00
|
|
|
[[ -z "${HOMEBREW_UPDATE_AUTO}" ]] || return
|
2021-04-16 22:32:30 +09:00
|
|
|
[[ -z "${HOMEBREW_AUTO_UPDATE_CHECKED}" ]] || return
|
2020-10-12 09:23:49 +01:00
|
|
|
|
|
|
|
# If we've checked for updates, we don't need to check again.
|
|
|
|
export HOMEBREW_AUTO_UPDATE_CHECKED="1"
|
|
|
|
|
2023-03-10 17:53:15 +00:00
|
|
|
if [[ -n "${HOMEBREW_AUTO_UPDATE_COMMAND}" ]]
|
2020-10-12 09:23:49 +01:00
|
|
|
then
|
|
|
|
export HOMEBREW_AUTO_UPDATING="1"
|
|
|
|
|
2024-04-29 17:42:51 +01:00
|
|
|
# Look for commands that may be referring to a formula/cask in a specific
|
|
|
|
# 3rd-party tap so they can be auto-updated more often (as they do not get
|
|
|
|
# their data from the API).
|
|
|
|
AUTO_UPDATE_TAP_COMMANDS=(
|
|
|
|
install
|
|
|
|
outdated
|
|
|
|
upgrade
|
|
|
|
)
|
|
|
|
if check-array-membership "${HOMEBREW_COMMAND}" "${AUTO_UPDATE_TAP_COMMANDS[@]}"
|
|
|
|
then
|
|
|
|
for arg in "$@"
|
|
|
|
do
|
|
|
|
if [[ "${arg}" == */*/* ]] && [[ "${arg}" != Homebrew/* ]] && [[ "${arg}" != homebrew/* ]]
|
|
|
|
then
|
|
|
|
|
|
|
|
HOMEBREW_AUTO_UPDATE_TAP="1"
|
|
|
|
break
|
|
|
|
fi
|
|
|
|
done
|
|
|
|
fi
|
|
|
|
|
2021-04-16 22:32:30 +09:00
|
|
|
if [[ -z "${HOMEBREW_AUTO_UPDATE_SECS}" ]]
|
2021-01-21 13:19:06 +00:00
|
|
|
then
|
2024-04-29 17:42:51 +01:00
|
|
|
if [[ -n "${HOMEBREW_NO_INSTALL_FROM_API}" || -n "${HOMEBREW_AUTO_UPDATE_TAP}" ]]
|
2023-01-18 15:11:30 +00:00
|
|
|
then
|
2023-06-22 15:17:19 +01:00
|
|
|
# 5 minutes
|
|
|
|
HOMEBREW_AUTO_UPDATE_SECS="300"
|
2023-02-15 17:37:12 +00:00
|
|
|
elif [[ -n "${HOMEBREW_DEV_CMD_RUN}" ]]
|
|
|
|
then
|
|
|
|
# 1 hour
|
|
|
|
HOMEBREW_AUTO_UPDATE_SECS="3600"
|
2023-01-18 15:11:30 +00:00
|
|
|
else
|
2023-06-22 15:17:19 +01:00
|
|
|
# 24 hours
|
|
|
|
HOMEBREW_AUTO_UPDATE_SECS="86400"
|
2023-01-18 15:11:30 +00:00
|
|
|
fi
|
2021-01-21 13:19:06 +00:00
|
|
|
fi
|
|
|
|
|
2023-06-19 03:50:47 +01:00
|
|
|
repo_fetch_heads=("${HOMEBREW_REPOSITORY}/.git/FETCH_HEAD")
|
|
|
|
# We might have done an auto-update recently, but not a core/cask clone auto-update.
|
|
|
|
# So we check the core/cask clone FETCH_HEAD too.
|
2023-07-28 10:13:57 +01:00
|
|
|
if [[ -n "${HOMEBREW_AUTO_UPDATE_CORE_TAP}" && -d "${HOMEBREW_CORE_REPOSITORY}/.git" ]]
|
2023-06-19 03:50:47 +01:00
|
|
|
then
|
|
|
|
repo_fetch_heads+=("${HOMEBREW_CORE_REPOSITORY}/.git/FETCH_HEAD")
|
|
|
|
fi
|
2023-07-28 10:13:57 +01:00
|
|
|
if [[ -n "${HOMEBREW_AUTO_UPDATE_CASK_TAP}" && -d "${HOMEBREW_CASK_REPOSITORY}/.git" ]]
|
2023-06-19 03:50:47 +01:00
|
|
|
then
|
|
|
|
repo_fetch_heads+=("${HOMEBREW_CASK_REPOSITORY}/.git/FETCH_HEAD")
|
|
|
|
fi
|
|
|
|
|
|
|
|
# Skip auto-update if all of the selected repositories have been checked in the
|
2020-10-12 09:23:49 +01:00
|
|
|
# last $HOMEBREW_AUTO_UPDATE_SECS.
|
2023-06-19 03:50:47 +01:00
|
|
|
needs_auto_update=
|
|
|
|
for repo_fetch_head in "${repo_fetch_heads[@]}"
|
|
|
|
do
|
|
|
|
if [[ ! -f "${repo_fetch_head}" ]] ||
|
2024-08-05 15:43:52 +00:00
|
|
|
[[ -z "$(find "${repo_fetch_head}" -type f -newermt "-${HOMEBREW_AUTO_UPDATE_SECS} seconds" 2>/dev/null)" ]]
|
2023-06-19 03:50:47 +01:00
|
|
|
then
|
|
|
|
needs_auto_update=1
|
|
|
|
break
|
|
|
|
fi
|
|
|
|
done
|
|
|
|
if [[ -z "${needs_auto_update}" ]]
|
2020-10-12 09:23:49 +01:00
|
|
|
then
|
|
|
|
return
|
|
|
|
fi
|
|
|
|
|
2022-05-19 11:04:20 -04:00
|
|
|
brew update --auto-update
|
2020-10-12 09:23:49 +01:00
|
|
|
|
|
|
|
unset HOMEBREW_AUTO_UPDATING
|
2024-04-29 17:42:51 +01:00
|
|
|
unset HOMEBREW_AUTO_UPDATE_TAP
|
2020-10-12 09:23:49 +01:00
|
|
|
|
|
|
|
# exec a new process to set any new environment variables.
|
2021-04-16 22:32:30 +09:00
|
|
|
exec "${HOMEBREW_BREW_FILE}" "$@"
|
2020-10-12 09:23:49 +01:00
|
|
|
fi
|
2023-02-08 02:41:41 +08:00
|
|
|
|
|
|
|
unset AUTO_UPDATE_COMMANDS
|
2023-06-19 03:50:47 +01:00
|
|
|
unset AUTO_UPDATE_CORE_TAP_COMMANDS
|
|
|
|
unset AUTO_UPDATE_CASK_TAP_COMMANDS
|
2023-07-28 10:13:57 +01:00
|
|
|
unset HOMEBREW_AUTO_UPDATE_CORE_TAP
|
|
|
|
unset HOMEBREW_AUTO_UPDATE_CASK_TAP
|
2020-10-12 09:23:49 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
#####
|
|
|
|
##### Setup output so e.g. odie looks as nice as possible.
|
|
|
|
#####
|
|
|
|
|
|
|
|
# Colorize output on GitHub Actions.
|
2021-04-17 20:34:16 +09:00
|
|
|
# This is set by the user environment.
|
2021-04-16 22:32:30 +09:00
|
|
|
# shellcheck disable=SC2154
|
2021-09-13 20:32:20 +08:00
|
|
|
if [[ -n "${GITHUB_ACTIONS}" ]]
|
|
|
|
then
|
2020-10-12 09:23:49 +01:00
|
|
|
export HOMEBREW_COLOR="1"
|
|
|
|
fi
|
|
|
|
|
|
|
|
# Force UTF-8 to avoid encoding issues for users with broken locale settings.
|
2021-04-16 22:32:30 +09:00
|
|
|
if [[ -n "${HOMEBREW_MACOS}" ]]
|
2020-10-12 09:23:49 +01:00
|
|
|
then
|
|
|
|
if [[ "$(locale charmap)" != "UTF-8" ]]
|
|
|
|
then
|
|
|
|
export LC_ALL="en_US.UTF-8"
|
|
|
|
fi
|
|
|
|
else
|
|
|
|
if ! command -v locale >/dev/null
|
|
|
|
then
|
|
|
|
export LC_ALL=C
|
|
|
|
elif [[ "$(locale charmap)" != "UTF-8" ]]
|
|
|
|
then
|
2021-09-13 20:32:20 +08:00
|
|
|
locales="$(locale -a)"
|
2020-10-12 09:23:49 +01:00
|
|
|
c_utf_regex='\bC\.(utf8|UTF-8)\b'
|
|
|
|
en_us_regex='\ben_US\.(utf8|UTF-8)\b'
|
|
|
|
utf_regex='\b[a-z][a-z]_[A-Z][A-Z]\.(utf8|UTF-8)\b'
|
2021-04-16 22:32:30 +09:00
|
|
|
if [[ ${locales} =~ ${c_utf_regex} || ${locales} =~ ${en_us_regex} || ${locales} =~ ${utf_regex} ]]
|
2020-10-12 09:23:49 +01:00
|
|
|
then
|
2021-09-13 20:32:20 +08:00
|
|
|
export LC_ALL="${BASH_REMATCH[0]}"
|
2020-10-12 09:23:49 +01:00
|
|
|
else
|
|
|
|
export LC_ALL=C
|
|
|
|
fi
|
|
|
|
fi
|
|
|
|
fi
|
|
|
|
|
|
|
|
#####
|
|
|
|
##### odie as quickly as possible.
|
|
|
|
#####
|
|
|
|
|
2021-09-13 20:32:20 +08:00
|
|
|
if [[ "${HOMEBREW_PREFIX}" == "/" || "${HOMEBREW_PREFIX}" == "/usr" ]]
|
2016-02-16 09:29:03 +00:00
|
|
|
then
|
|
|
|
# it may work, but I only see pain this route and don't want to support it
|
2021-04-16 22:32:30 +09:00
|
|
|
odie "Cowardly refusing to continue at this prefix: ${HOMEBREW_PREFIX}"
|
2016-02-16 09:29:03 +00:00
|
|
|
fi
|
|
|
|
|
2020-10-12 09:23:49 +01:00
|
|
|
#####
|
|
|
|
##### Now, do everything else (that may be a bit slower).
|
|
|
|
#####
|
|
|
|
|
2022-09-06 04:57:06 +01:00
|
|
|
# Docker image deprecation
|
|
|
|
if [[ -f "${HOMEBREW_REPOSITORY}/.docker-deprecate" ]]
|
|
|
|
then
|
2024-08-25 03:54:40 +08:00
|
|
|
read -r DOCKER_DEPRECATION_MESSAGE <"${HOMEBREW_REPOSITORY}/.docker-deprecate"
|
2022-09-06 04:57:06 +01:00
|
|
|
if [[ -n "${GITHUB_ACTIONS}" ]]
|
|
|
|
then
|
|
|
|
echo "::warning::${DOCKER_DEPRECATION_MESSAGE}" >&2
|
|
|
|
else
|
|
|
|
opoo "${DOCKER_DEPRECATION_MESSAGE}"
|
|
|
|
fi
|
|
|
|
fi
|
|
|
|
|
2020-10-12 09:23:49 +01:00
|
|
|
# USER isn't always set so provide a fall back for `brew` and subprocesses.
|
2021-09-13 20:32:20 +08:00
|
|
|
export USER="${USER:-$(id -un)}"
|
2020-10-12 09:23:49 +01:00
|
|
|
|
|
|
|
# A depth of 1 means this command was directly invoked by a user.
|
|
|
|
# Higher depths mean this command was invoked by another Homebrew command.
|
2021-09-13 20:32:20 +08:00
|
|
|
export HOMEBREW_COMMAND_DEPTH="$((HOMEBREW_COMMAND_DEPTH + 1))"
|
2020-10-12 09:23:49 +01:00
|
|
|
|
2021-10-05 15:15:15 +01:00
|
|
|
setup_curl() {
|
|
|
|
# This is set by the user environment.
|
|
|
|
# shellcheck disable=SC2154
|
2021-10-23 15:09:34 -04:00
|
|
|
HOMEBREW_BREWED_CURL_PATH="${HOMEBREW_PREFIX}/opt/curl/bin/curl"
|
|
|
|
if [[ -n "${HOMEBREW_FORCE_BREWED_CURL}" && -x "${HOMEBREW_BREWED_CURL_PATH}" ]] &&
|
|
|
|
"${HOMEBREW_BREWED_CURL_PATH}" --version &>/dev/null
|
2021-10-05 15:15:15 +01:00
|
|
|
then
|
2021-10-23 15:09:34 -04:00
|
|
|
HOMEBREW_CURL="${HOMEBREW_BREWED_CURL_PATH}"
|
2022-06-14 10:33:30 +01:00
|
|
|
elif [[ -n "${HOMEBREW_CURL_PATH}" ]]
|
2021-10-05 15:15:15 +01:00
|
|
|
then
|
|
|
|
HOMEBREW_CURL="${HOMEBREW_CURL_PATH}"
|
|
|
|
else
|
|
|
|
HOMEBREW_CURL="curl"
|
|
|
|
fi
|
|
|
|
}
|
2020-05-04 03:16:51 -05:00
|
|
|
|
2021-10-05 15:15:15 +01:00
|
|
|
setup_git() {
|
|
|
|
# This is set by the user environment.
|
|
|
|
# shellcheck disable=SC2154
|
|
|
|
if [[ -n "${HOMEBREW_FORCE_BREWED_GIT}" && -x "${HOMEBREW_PREFIX}/opt/git/bin/git" ]] &&
|
|
|
|
"${HOMEBREW_PREFIX}/opt/git/bin/git" --version &>/dev/null
|
|
|
|
then
|
|
|
|
HOMEBREW_GIT="${HOMEBREW_PREFIX}/opt/git/bin/git"
|
2022-06-14 10:33:30 +01:00
|
|
|
elif [[ -n "${HOMEBREW_GIT_PATH}" ]]
|
2021-10-05 15:15:15 +01:00
|
|
|
then
|
|
|
|
HOMEBREW_GIT="${HOMEBREW_GIT_PATH}"
|
|
|
|
else
|
|
|
|
HOMEBREW_GIT="git"
|
|
|
|
fi
|
|
|
|
}
|
|
|
|
|
|
|
|
setup_curl
|
|
|
|
setup_git
|
2020-05-11 07:30:25 -05:00
|
|
|
|
2024-05-13 23:53:44 +01:00
|
|
|
GIT_DESCRIBE_CACHE="${HOMEBREW_REPOSITORY}/.git/describe-cache"
|
|
|
|
GIT_REVISION=$("${HOMEBREW_GIT}" -C "${HOMEBREW_REPOSITORY}" rev-parse HEAD 2>/dev/null)
|
2024-08-19 15:29:58 +01:00
|
|
|
|
|
|
|
# safe fallback in case git rev-parse fails e.g. if this is not considered a safe git directory
|
|
|
|
if [[ -z "${GIT_REVISION}" ]]
|
|
|
|
then
|
2024-10-04 16:34:55 +08:00
|
|
|
read -r GIT_HEAD 2>/dev/null <"${HOMEBREW_REPOSITORY}/.git/HEAD"
|
2024-08-19 15:29:58 +01:00
|
|
|
if [[ "${GIT_HEAD}" == "ref: refs/heads/master" ]]
|
|
|
|
then
|
2024-10-04 16:34:55 +08:00
|
|
|
read -r GIT_REVISION 2>/dev/null <"${HOMEBREW_REPOSITORY}/.git/refs/heads/master"
|
2024-08-19 15:29:58 +01:00
|
|
|
elif [[ "${GIT_HEAD}" == "ref: refs/heads/stable" ]]
|
|
|
|
then
|
2024-10-04 16:34:55 +08:00
|
|
|
read -r GIT_REVISION 2>/dev/null <"${HOMEBREW_REPOSITORY}/.git/refs/heads/stable"
|
2024-08-19 15:29:58 +01:00
|
|
|
fi
|
|
|
|
unset GIT_HEAD
|
|
|
|
fi
|
|
|
|
|
2024-05-13 23:53:44 +01:00
|
|
|
if [[ -n "${GIT_REVISION}" ]]
|
|
|
|
then
|
|
|
|
GIT_DESCRIBE_CACHE_FILE="${GIT_DESCRIBE_CACHE}/${GIT_REVISION}"
|
2024-08-28 19:21:50 +08:00
|
|
|
if [[ -r "${GIT_DESCRIBE_CACHE_FILE}" ]] && "${HOMEBREW_GIT}" -C "${HOMEBREW_REPOSITORY}" diff --quiet --no-ext-diff 2>/dev/null
|
2024-08-19 15:29:58 +01:00
|
|
|
then
|
2024-08-25 03:54:40 +08:00
|
|
|
read -r GIT_DESCRIBE_CACHE_HOMEBREW_VERSION <"${GIT_DESCRIBE_CACHE_FILE}"
|
2024-08-19 15:29:58 +01:00
|
|
|
if [[ -n "${GIT_DESCRIBE_CACHE_HOMEBREW_VERSION}" && "${GIT_DESCRIBE_CACHE_HOMEBREW_VERSION}" != *"-dirty" ]]
|
|
|
|
then
|
|
|
|
HOMEBREW_VERSION="${GIT_DESCRIBE_CACHE_HOMEBREW_VERSION}"
|
|
|
|
fi
|
|
|
|
unset GIT_DESCRIBE_CACHE_HOMEBREW_VERSION
|
|
|
|
fi
|
|
|
|
|
|
|
|
if [[ -z "${HOMEBREW_VERSION}" ]]
|
2024-05-13 23:53:44 +01:00
|
|
|
then
|
|
|
|
HOMEBREW_VERSION="$("${HOMEBREW_GIT}" -C "${HOMEBREW_REPOSITORY}" describe --tags --dirty --abbrev=7 2>/dev/null)"
|
2024-08-19 15:29:58 +01:00
|
|
|
# Don't output any permissions errors here. The user may not have write
|
|
|
|
# permissions to the cache but we don't care because it's an optional
|
|
|
|
# performance improvement.
|
2024-08-19 09:17:21 +01:00
|
|
|
rm -rf "${GIT_DESCRIBE_CACHE}" 2>/dev/null
|
|
|
|
mkdir -p "${GIT_DESCRIBE_CACHE}" 2>/dev/null
|
2024-08-19 15:29:58 +01:00
|
|
|
echo "${HOMEBREW_VERSION}" | tee "${GIT_DESCRIBE_CACHE_FILE}" &>/dev/null
|
2024-05-13 23:53:44 +01:00
|
|
|
fi
|
|
|
|
unset GIT_DESCRIBE_CACHE_FILE
|
|
|
|
else
|
2024-08-19 15:29:58 +01:00
|
|
|
# Don't care about permission errors here either.
|
|
|
|
rm -rf "${GIT_DESCRIBE_CACHE}" 2>/dev/null
|
2024-05-13 23:53:44 +01:00
|
|
|
fi
|
|
|
|
unset GIT_REVISION
|
|
|
|
unset GIT_DESCRIBE_CACHE
|
|
|
|
|
2021-04-16 22:32:30 +09:00
|
|
|
HOMEBREW_USER_AGENT_VERSION="${HOMEBREW_VERSION}"
|
|
|
|
if [[ -z "${HOMEBREW_VERSION}" ]]
|
2020-09-09 12:22:45 -05:00
|
|
|
then
|
2024-08-19 16:01:27 +01:00
|
|
|
HOMEBREW_VERSION=">=4.3.0 (shallow or no git repository)"
|
2023-11-30 11:44:10 +00:00
|
|
|
HOMEBREW_USER_AGENT_VERSION="4.X.Y"
|
2020-09-09 12:22:45 -05:00
|
|
|
fi
|
|
|
|
|
2021-04-16 22:32:30 +09:00
|
|
|
HOMEBREW_CORE_REPOSITORY="${HOMEBREW_LIBRARY}/Taps/homebrew/homebrew-core"
|
2021-05-18 17:10:20 +05:30
|
|
|
# Used in --version.sh
|
|
|
|
# shellcheck disable=SC2034
|
2021-04-28 20:47:39 +09:00
|
|
|
HOMEBREW_CASK_REPOSITORY="${HOMEBREW_LIBRARY}/Taps/homebrew/homebrew-cask"
|
2021-03-03 10:22:54 +00:00
|
|
|
|
2024-05-07 08:57:57 +01:00
|
|
|
# Shift the -v to the end of the parameter list
|
|
|
|
if [[ "$1" == "-v" ]]
|
|
|
|
then
|
|
|
|
shift
|
|
|
|
set -- "$@" -v
|
|
|
|
fi
|
|
|
|
|
2024-04-30 12:06:16 +01:00
|
|
|
# commands that take a single or no arguments.
|
2024-05-14 15:29:43 +09:00
|
|
|
# doesn't need a default case as other arguments handled elsewhere.
|
|
|
|
# shellcheck disable=SC2249
|
2024-04-30 12:06:16 +01:00
|
|
|
case "$1" in
|
2021-09-13 20:32:20 +08:00
|
|
|
--version | -v)
|
|
|
|
source "${HOMEBREW_LIBRARY}/Homebrew/cmd/--version.sh"
|
|
|
|
homebrew-version
|
|
|
|
exit 0
|
|
|
|
;;
|
2021-03-03 10:22:54 +00:00
|
|
|
esac
|
|
|
|
|
2023-10-02 16:41:51 +01:00
|
|
|
# TODO: bump version when new macOS is released or announced and update references in:
|
|
|
|
# - docs/Installation.md
|
|
|
|
# - https://github.com/Homebrew/install/blob/HEAD/install.sh
|
2024-09-26 13:03:39 +01:00
|
|
|
# - Library/Homebrew/os/mac.rb (latest_sdk_version)
|
2023-10-02 16:41:51 +01:00
|
|
|
# and, if needed:
|
|
|
|
# - MacOSVersion::SYMBOLS
|
2024-09-09 21:34:20 +02:00
|
|
|
HOMEBREW_MACOS_NEWEST_UNSUPPORTED="16"
|
2023-10-02 16:41:51 +01:00
|
|
|
# TODO: bump version when new macOS is released and update references in:
|
|
|
|
# - docs/Installation.md
|
2023-10-04 15:34:04 +01:00
|
|
|
# - HOMEBREW_MACOS_OLDEST_SUPPORTED in .github/workflows/pkg-installer.yml
|
2023-10-04 10:18:27 +01:00
|
|
|
# - `os-version min` in package/Distribution.xml
|
2023-10-02 16:41:51 +01:00
|
|
|
# - https://github.com/Homebrew/install/blob/HEAD/install.sh
|
2024-09-09 21:34:20 +02:00
|
|
|
HOMEBREW_MACOS_OLDEST_SUPPORTED="13"
|
2023-02-24 13:25:18 +00:00
|
|
|
HOMEBREW_MACOS_OLDEST_ALLOWED="10.11"
|
|
|
|
|
2021-04-16 22:32:30 +09:00
|
|
|
if [[ -n "${HOMEBREW_MACOS}" ]]
|
2016-04-04 11:46:33 +01:00
|
|
|
then
|
|
|
|
HOMEBREW_PRODUCT="Homebrew"
|
|
|
|
HOMEBREW_SYSTEM="Macintosh"
|
2021-09-13 20:32:20 +08:00
|
|
|
[[ "${HOMEBREW_PROCESSOR}" == "x86_64" ]] && HOMEBREW_PROCESSOR="Intel"
|
2017-04-27 08:53:57 +01:00
|
|
|
# Don't change this from Mac OS X to match what macOS itself does in Safari on 10.12
|
2021-04-16 22:32:30 +09:00
|
|
|
HOMEBREW_OS_USER_AGENT_VERSION="Mac OS X ${HOMEBREW_MACOS_VERSION}"
|
2016-04-04 11:46:33 +01:00
|
|
|
|
2022-11-24 22:07:30 +08:00
|
|
|
if [[ "$(sysctl -n hw.optional.arm64 2>/dev/null)" == "1" ]]
|
|
|
|
then
|
|
|
|
# used in vendor-install.sh
|
|
|
|
# shellcheck disable=SC2034
|
|
|
|
HOMEBREW_PHYSICAL_PROCESSOR="arm64"
|
|
|
|
fi
|
|
|
|
|
2024-08-24 08:21:43 +08:00
|
|
|
IFS=. read -r -a MACOS_VERSION_ARRAY <<<"${HOMEBREW_MACOS_OLDEST_ALLOWED}"
|
|
|
|
printf -v HOMEBREW_MACOS_OLDEST_ALLOWED_NUMERIC "%02d%02d%02d" "${MACOS_VERSION_ARRAY[@]}"
|
|
|
|
|
|
|
|
unset MACOS_VERSION_ARRAY
|
2017-09-16 12:41:08 +01:00
|
|
|
|
2021-01-07 09:12:11 +00:00
|
|
|
# Don't include minor versions for Big Sur and later.
|
2021-04-16 22:32:30 +09:00
|
|
|
if [[ "${HOMEBREW_MACOS_VERSION_NUMERIC}" -gt "110000" ]]
|
2021-01-07 09:12:11 +00:00
|
|
|
then
|
|
|
|
HOMEBREW_OS_VERSION="macOS ${HOMEBREW_MACOS_VERSION%.*}"
|
|
|
|
else
|
2021-04-16 22:32:30 +09:00
|
|
|
HOMEBREW_OS_VERSION="macOS ${HOMEBREW_MACOS_VERSION}"
|
2021-01-07 09:12:11 +00:00
|
|
|
fi
|
|
|
|
|
2022-05-30 14:59:14 +01:00
|
|
|
# Refuse to run on pre-El Capitan
|
2023-02-24 13:25:18 +00:00
|
|
|
if [[ "${HOMEBREW_MACOS_VERSION_NUMERIC}" -lt "${HOMEBREW_MACOS_OLDEST_ALLOWED_NUMERIC}" ]]
|
2019-01-08 19:13:46 +00:00
|
|
|
then
|
2021-04-16 22:32:30 +09:00
|
|
|
printf "ERROR: Your version of macOS (%s) is too old to run Homebrew!\\n" "${HOMEBREW_MACOS_VERSION}" >&2
|
|
|
|
if [[ "${HOMEBREW_MACOS_VERSION_NUMERIC}" -lt "100700" ]]
|
2019-01-08 19:13:46 +00:00
|
|
|
then
|
2019-04-01 16:02:13 -04:00
|
|
|
printf " For 10.4 - 10.6 support see: https://github.com/mistydemeo/tigerbrew\\n" >&2
|
2019-01-08 19:13:46 +00:00
|
|
|
fi
|
2019-04-01 16:02:13 -04:00
|
|
|
printf "\\n" >&2
|
2019-01-08 19:13:46 +00:00
|
|
|
fi
|
|
|
|
|
2021-10-01 15:06:04 +01:00
|
|
|
# Versions before Sierra don't handle custom cert files correctly, so need a full brewed curl.
|
|
|
|
if [[ "${HOMEBREW_MACOS_VERSION_NUMERIC}" -lt "101200" ]]
|
|
|
|
then
|
|
|
|
HOMEBREW_SYSTEM_CURL_TOO_OLD="1"
|
|
|
|
HOMEBREW_FORCE_BREWED_CURL="1"
|
|
|
|
fi
|
|
|
|
|
|
|
|
# The system libressl has a bug before macOS 10.15.6 where it incorrectly handles expired roots.
|
|
|
|
if [[ -z "${HOMEBREW_SYSTEM_CURL_TOO_OLD}" && "${HOMEBREW_MACOS_VERSION_NUMERIC}" -lt "101506" ]]
|
|
|
|
then
|
|
|
|
HOMEBREW_SYSTEM_CA_CERTIFICATES_TOO_OLD="1"
|
|
|
|
HOMEBREW_FORCE_BREWED_CA_CERTIFICATES="1"
|
|
|
|
fi
|
|
|
|
|
2024-02-22 17:20:01 +00:00
|
|
|
# TEMP: backwards compatiblity with existing 10.11-cross image
|
|
|
|
# Can (probably) be removed in March 2024.
|
2022-05-31 16:32:23 +01:00
|
|
|
if [[ -n "${HOMEBREW_FAKE_EL_CAPITAN}" ]]
|
2024-02-22 17:20:01 +00:00
|
|
|
then
|
|
|
|
export HOMEBREW_FAKE_MACOS="10.11.6"
|
|
|
|
fi
|
|
|
|
|
|
|
|
if [[ "${HOMEBREW_FAKE_MACOS}" =~ ^10\.11(\.|$) ]]
|
2018-02-26 16:08:10 +00:00
|
|
|
then
|
2022-05-31 16:32:23 +01:00
|
|
|
# We only need this to work enough to update brew and build the set portable formulae, so relax the requirement.
|
|
|
|
HOMEBREW_MINIMUM_GIT_VERSION="2.7.4"
|
|
|
|
else
|
|
|
|
# The system Git on macOS versions before Sierra is too old for some Homebrew functionality we rely on.
|
|
|
|
HOMEBREW_MINIMUM_GIT_VERSION="2.14.3"
|
|
|
|
if [[ "${HOMEBREW_MACOS_VERSION_NUMERIC}" -lt "101200" ]]
|
|
|
|
then
|
|
|
|
HOMEBREW_FORCE_BREWED_GIT="1"
|
|
|
|
fi
|
2018-02-26 16:08:10 +00:00
|
|
|
fi
|
2016-04-04 11:46:33 +01:00
|
|
|
else
|
|
|
|
HOMEBREW_PRODUCT="${HOMEBREW_SYSTEM}brew"
|
2023-08-16 12:01:25 +01:00
|
|
|
# Don't try to follow /etc/os-release
|
2023-08-25 17:32:02 -07:00
|
|
|
# shellcheck disable=SC1091,SC2154
|
2023-07-12 10:59:57 +02:00
|
|
|
[[ -n "${HOMEBREW_LINUX}" ]] && HOMEBREW_OS_VERSION="$(source /etc/os-release && echo "${PRETTY_NAME}")"
|
2016-04-06 01:45:02 +02:00
|
|
|
: "${HOMEBREW_OS_VERSION:=$(uname -r)}"
|
2021-04-16 22:32:30 +09:00
|
|
|
HOMEBREW_OS_USER_AGENT_VERSION="${HOMEBREW_OS_VERSION}"
|
2021-04-17 20:34:16 +09:00
|
|
|
|
2022-09-08 11:22:48 +02:00
|
|
|
# Ensure the system Curl is a version that supports modern HTTPS certificates.
|
|
|
|
HOMEBREW_MINIMUM_CURL_VERSION="7.41.0"
|
|
|
|
|
2021-04-16 22:32:30 +09:00
|
|
|
curl_version_output="$(${HOMEBREW_CURL} --version 2>/dev/null)"
|
2020-05-04 03:16:51 -05:00
|
|
|
curl_name_and_version="${curl_version_output%% (*}"
|
2021-09-13 20:32:20 +08:00
|
|
|
if [[ "$(numeric "${curl_name_and_version##* }")" -lt "$(numeric "${HOMEBREW_MINIMUM_CURL_VERSION}")" ]]
|
2018-10-26 17:08:59 -04:00
|
|
|
then
|
2022-06-14 10:33:30 +01:00
|
|
|
message="Please update your system curl or set HOMEBREW_CURL_PATH to a newer version.
|
2020-11-25 16:08:57 -06:00
|
|
|
Minimum required version: ${HOMEBREW_MINIMUM_CURL_VERSION}
|
2020-07-29 17:31:11 -04:00
|
|
|
Your curl version: ${curl_name_and_version##* }
|
2022-12-13 11:36:28 +00:00
|
|
|
Your curl executable: $(type -p "${HOMEBREW_CURL}")"
|
2020-11-18 16:38:08 -06:00
|
|
|
|
2022-06-14 10:33:30 +01:00
|
|
|
if [[ -z ${HOMEBREW_CURL_PATH} ]]
|
2021-09-13 20:32:20 +08:00
|
|
|
then
|
2020-05-11 07:17:26 -05:00
|
|
|
HOMEBREW_SYSTEM_CURL_TOO_OLD=1
|
|
|
|
HOMEBREW_FORCE_BREWED_CURL=1
|
2021-09-13 20:32:20 +08:00
|
|
|
if [[ -z ${HOMEBREW_CURL_WARNING} ]]
|
|
|
|
then
|
2021-04-16 22:32:30 +09:00
|
|
|
onoe "${message}"
|
2020-11-18 16:38:08 -06:00
|
|
|
HOMEBREW_CURL_WARNING=1
|
|
|
|
fi
|
2020-05-11 07:17:26 -05:00
|
|
|
else
|
2021-04-16 22:32:30 +09:00
|
|
|
odie "${message}"
|
2020-05-11 07:17:26 -05:00
|
|
|
fi
|
2018-10-26 17:08:59 -04:00
|
|
|
fi
|
|
|
|
|
|
|
|
# Ensure the system Git is at or newer than the minimum required version.
|
|
|
|
# Git 2.7.4 is the version of git on Ubuntu 16.04 LTS (Xenial Xerus).
|
|
|
|
HOMEBREW_MINIMUM_GIT_VERSION="2.7.0"
|
2021-04-16 22:32:30 +09:00
|
|
|
git_version_output="$(${HOMEBREW_GIT} --version 2>/dev/null)"
|
2019-08-07 14:22:20 -04:00
|
|
|
# $extra is intentionally discarded.
|
|
|
|
# shellcheck disable=SC2034
|
2021-09-13 20:32:20 +08:00
|
|
|
IFS='.' read -r major minor micro build extra <<<"${git_version_output##* }"
|
|
|
|
if [[ "$(numeric "${major}.${minor}.${micro}.${build}")" -lt "$(numeric "${HOMEBREW_MINIMUM_GIT_VERSION}")" ]]
|
2018-10-26 17:08:59 -04:00
|
|
|
then
|
2022-06-14 10:33:30 +01:00
|
|
|
message="Please update your system Git or set HOMEBREW_GIT_PATH to a newer version.
|
2020-11-26 08:35:42 +00:00
|
|
|
Minimum required version: ${HOMEBREW_MINIMUM_GIT_VERSION}
|
2021-04-16 22:32:30 +09:00
|
|
|
Your Git version: ${major}.${minor}.${micro}.${build}
|
2022-12-13 11:36:28 +00:00
|
|
|
Your Git executable: $(unset git && type -p "${HOMEBREW_GIT}")"
|
2022-06-14 10:33:30 +01:00
|
|
|
if [[ -z ${HOMEBREW_GIT_PATH} ]]
|
2021-09-13 20:32:20 +08:00
|
|
|
then
|
2020-05-11 07:20:16 -05:00
|
|
|
HOMEBREW_FORCE_BREWED_GIT="1"
|
2021-09-13 20:32:20 +08:00
|
|
|
if [[ -z ${HOMEBREW_GIT_WARNING} ]]
|
|
|
|
then
|
2021-04-16 22:32:30 +09:00
|
|
|
onoe "${message}"
|
2020-11-25 16:08:57 -06:00
|
|
|
HOMEBREW_GIT_WARNING=1
|
|
|
|
fi
|
2020-05-11 07:20:16 -05:00
|
|
|
else
|
2021-04-16 22:32:30 +09:00
|
|
|
odie "${message}"
|
2020-05-11 07:20:16 -05:00
|
|
|
fi
|
2018-10-26 17:08:59 -04:00
|
|
|
fi
|
|
|
|
|
2020-12-16 17:40:58 -06:00
|
|
|
HOMEBREW_LINUX_MINIMUM_GLIBC_VERSION="2.13"
|
2021-08-29 21:40:35 +02:00
|
|
|
|
2021-09-28 17:18:55 +08:00
|
|
|
HOMEBREW_CORE_REPOSITORY_ORIGIN="$("${HOMEBREW_GIT}" -C "${HOMEBREW_CORE_REPOSITORY}" remote get-url origin 2>/dev/null)"
|
2021-12-11 22:27:46 +00:00
|
|
|
if [[ "${HOMEBREW_CORE_REPOSITORY_ORIGIN}" =~ (/linuxbrew|Linuxbrew/homebrew)-core(\.git)?$ ]]
|
2021-08-29 21:40:35 +02:00
|
|
|
then
|
2021-10-07 11:16:03 +01:00
|
|
|
# triggers migration code in update.sh
|
|
|
|
# shellcheck disable=SC2034
|
2021-10-20 11:01:38 +01:00
|
|
|
HOMEBREW_LINUXBREW_CORE_MIGRATION=1
|
2021-08-29 21:40:35 +02:00
|
|
|
fi
|
2016-04-04 11:46:33 +01:00
|
|
|
fi
|
2018-02-15 13:26:17 -06:00
|
|
|
|
2021-10-05 15:15:15 +01:00
|
|
|
setup_ca_certificates() {
|
|
|
|
if [[ -n "${HOMEBREW_FORCE_BREWED_CA_CERTIFICATES}" && -f "${HOMEBREW_PREFIX}/etc/ca-certificates/cert.pem" ]]
|
|
|
|
then
|
|
|
|
export SSL_CERT_FILE="${HOMEBREW_PREFIX}/etc/ca-certificates/cert.pem"
|
|
|
|
export GIT_SSL_CAINFO="${HOMEBREW_PREFIX}/etc/ca-certificates/cert.pem"
|
2021-10-20 15:52:17 +01:00
|
|
|
export GIT_SSL_CAPATH="${HOMEBREW_PREFIX}/etc/ca-certificates"
|
2021-10-05 15:15:15 +01:00
|
|
|
fi
|
|
|
|
}
|
|
|
|
setup_ca_certificates
|
|
|
|
|
|
|
|
# Redetermine curl and git paths as we may have forced some options above.
|
|
|
|
setup_curl
|
|
|
|
setup_git
|
2021-10-01 15:06:04 +01:00
|
|
|
|
2021-04-16 12:17:50 +01:00
|
|
|
# A bug in the auto-update process prior to 3.1.2 means $HOMEBREW_BOTTLE_DOMAIN
|
|
|
|
# could be passed down with the default domain.
|
|
|
|
# This is problematic as this is will be the old bottle domain.
|
|
|
|
# This workaround is necessary for many CI images starting on old version,
|
|
|
|
# and will only be unnecessary when updating from <3.1.2 is not a concern.
|
|
|
|
# That will be when macOS 12 is the minimum required version.
|
2021-04-17 20:34:16 +09:00
|
|
|
# HOMEBREW_BOTTLE_DOMAIN is set from the user environment
|
2021-04-16 22:32:30 +09:00
|
|
|
# shellcheck disable=SC2154
|
2021-09-13 20:32:20 +08:00
|
|
|
if [[ -n "${HOMEBREW_BOTTLE_DEFAULT_DOMAIN}" ]] &&
|
|
|
|
[[ "${HOMEBREW_BOTTLE_DOMAIN}" == "${HOMEBREW_BOTTLE_DEFAULT_DOMAIN}" ]]
|
2021-04-16 12:17:50 +01:00
|
|
|
then
|
|
|
|
unset HOMEBREW_BOTTLE_DOMAIN
|
|
|
|
fi
|
|
|
|
|
2023-02-03 14:10:40 +00:00
|
|
|
HOMEBREW_API_DEFAULT_DOMAIN="https://formulae.brew.sh/api"
|
2021-10-20 11:01:38 +01:00
|
|
|
HOMEBREW_BOTTLE_DEFAULT_DOMAIN="https://ghcr.io/v2/homebrew/core"
|
2018-10-20 13:58:27 +01:00
|
|
|
|
2021-04-16 22:32:30 +09:00
|
|
|
HOMEBREW_USER_AGENT="${HOMEBREW_PRODUCT}/${HOMEBREW_USER_AGENT_VERSION} (${HOMEBREW_SYSTEM}; ${HOMEBREW_PROCESSOR} ${HOMEBREW_OS_USER_AGENT_VERSION})"
|
2021-10-03 21:47:17 +01:00
|
|
|
curl_version_output="$(curl --version 2>/dev/null)"
|
2018-10-26 17:08:59 -04:00
|
|
|
curl_name_and_version="${curl_version_output%% (*}"
|
2021-04-16 22:32:30 +09:00
|
|
|
HOMEBREW_USER_AGENT_CURL="${HOMEBREW_USER_AGENT} ${curl_name_and_version// //}"
|
2016-04-04 11:46:33 +01:00
|
|
|
|
2023-02-10 17:27:10 +00:00
|
|
|
# Timeout values to check for dead connections
|
|
|
|
# We don't use --max-time to support slow connections
|
|
|
|
HOMEBREW_CURL_SPEED_LIMIT=100
|
|
|
|
HOMEBREW_CURL_SPEED_TIME=5
|
|
|
|
|
2024-07-13 16:40:14 -04:00
|
|
|
export HOMEBREW_HELP_MESSAGE
|
2016-04-04 11:46:33 +01:00
|
|
|
export HOMEBREW_VERSION
|
2023-02-24 13:25:18 +00:00
|
|
|
export HOMEBREW_MACOS_ARM_DEFAULT_PREFIX
|
|
|
|
export HOMEBREW_LINUX_DEFAULT_PREFIX
|
|
|
|
export HOMEBREW_GENERIC_DEFAULT_PREFIX
|
|
|
|
export HOMEBREW_DEFAULT_PREFIX
|
|
|
|
export HOMEBREW_MACOS_ARM_DEFAULT_REPOSITORY
|
|
|
|
export HOMEBREW_LINUX_DEFAULT_REPOSITORY
|
|
|
|
export HOMEBREW_GENERIC_DEFAULT_REPOSITORY
|
|
|
|
export HOMEBREW_DEFAULT_REPOSITORY
|
2020-04-05 15:44:50 +01:00
|
|
|
export HOMEBREW_DEFAULT_CACHE
|
2016-05-03 16:01:42 +08:00
|
|
|
export HOMEBREW_CACHE
|
2020-04-05 15:44:50 +01:00
|
|
|
export HOMEBREW_DEFAULT_LOGS
|
2018-12-26 17:03:31 -08:00
|
|
|
export HOMEBREW_LOGS
|
2020-04-05 15:44:50 +01:00
|
|
|
export HOMEBREW_DEFAULT_TEMP
|
|
|
|
export HOMEBREW_TEMP
|
2016-02-16 09:29:03 +00:00
|
|
|
export HOMEBREW_CELLAR
|
2024-05-17 11:59:40 +09:00
|
|
|
export HOMEBREW_CASKROOM
|
2016-04-25 17:57:51 +01:00
|
|
|
export HOMEBREW_SYSTEM
|
2021-10-01 15:06:04 +01:00
|
|
|
export HOMEBREW_SYSTEM_CA_CERTIFICATES_TOO_OLD
|
2016-04-04 11:46:33 +01:00
|
|
|
export HOMEBREW_CURL
|
2021-10-23 15:09:34 -04:00
|
|
|
export HOMEBREW_BREWED_CURL_PATH
|
2020-11-18 16:38:08 -06:00
|
|
|
export HOMEBREW_CURL_WARNING
|
2018-10-04 09:31:37 +01:00
|
|
|
export HOMEBREW_SYSTEM_CURL_TOO_OLD
|
2018-08-23 11:50:42 -04:00
|
|
|
export HOMEBREW_GIT
|
2020-11-25 16:08:57 -06:00
|
|
|
export HOMEBREW_GIT_WARNING
|
2018-10-27 20:44:13 -04:00
|
|
|
export HOMEBREW_MINIMUM_GIT_VERSION
|
2020-12-16 17:40:58 -06:00
|
|
|
export HOMEBREW_LINUX_MINIMUM_GLIBC_VERSION
|
2023-02-15 16:34:50 +00:00
|
|
|
export HOMEBREW_PHYSICAL_PROCESSOR
|
2016-04-25 17:57:51 +01:00
|
|
|
export HOMEBREW_PROCESSOR
|
2016-04-12 11:02:22 +01:00
|
|
|
export HOMEBREW_PRODUCT
|
2016-04-04 11:46:33 +01:00
|
|
|
export HOMEBREW_OS_VERSION
|
2016-09-18 19:57:19 +01:00
|
|
|
export HOMEBREW_MACOS_VERSION
|
2018-09-20 13:49:10 +01:00
|
|
|
export HOMEBREW_MACOS_VERSION_NUMERIC
|
2023-02-24 13:25:18 +00:00
|
|
|
export HOMEBREW_MACOS_NEWEST_UNSUPPORTED
|
|
|
|
export HOMEBREW_MACOS_OLDEST_SUPPORTED
|
|
|
|
export HOMEBREW_MACOS_OLDEST_ALLOWED
|
2016-04-04 11:46:33 +01:00
|
|
|
export HOMEBREW_USER_AGENT
|
|
|
|
export HOMEBREW_USER_AGENT_CURL
|
2023-02-03 14:10:40 +00:00
|
|
|
export HOMEBREW_API_DEFAULT_DOMAIN
|
2019-05-17 17:29:12 +08:00
|
|
|
export HOMEBREW_BOTTLE_DEFAULT_DOMAIN
|
2023-02-10 17:27:10 +00:00
|
|
|
export HOMEBREW_CURL_SPEED_LIMIT
|
|
|
|
export HOMEBREW_CURL_SPEED_TIME
|
2016-02-16 09:29:03 +00:00
|
|
|
|
2021-04-16 22:32:30 +09:00
|
|
|
if [[ -n "${HOMEBREW_MACOS}" && -x "/usr/bin/xcode-select" ]]
|
2016-02-16 09:29:03 +00:00
|
|
|
then
|
2021-09-13 20:32:20 +08:00
|
|
|
XCODE_SELECT_PATH="$('/usr/bin/xcode-select' --print-path 2>/dev/null)"
|
|
|
|
if [[ "${XCODE_SELECT_PATH}" == "/" ]]
|
2016-02-16 09:29:03 +00:00
|
|
|
then
|
|
|
|
odie <<EOS
|
|
|
|
Your xcode-select path is currently set to '/'.
|
|
|
|
This causes the 'xcrun' tool to hang, and can render Homebrew unusable.
|
|
|
|
If you are using Xcode, you should:
|
2020-12-16 21:33:20 -05:00
|
|
|
sudo xcode-select --switch /Applications/Xcode.app
|
2016-02-16 09:29:03 +00:00
|
|
|
Otherwise, you should:
|
|
|
|
sudo rm -rf /usr/share/xcode-select
|
|
|
|
EOS
|
|
|
|
fi
|
|
|
|
|
2016-06-08 05:53:10 -07:00
|
|
|
# Don't check xcrun if Xcode and the CLT aren't installed, as that opens
|
|
|
|
# a popup window asking the user to install the CLT
|
2021-04-16 22:32:30 +09:00
|
|
|
if [[ -n "${XCODE_SELECT_PATH}" ]]
|
2016-02-16 09:29:03 +00:00
|
|
|
then
|
2024-05-14 15:29:43 +09:00
|
|
|
# TODO: this is fairly slow, figure out if there's a faster way.
|
2016-06-08 05:53:10 -07:00
|
|
|
XCRUN_OUTPUT="$(/usr/bin/xcrun clang 2>&1)"
|
|
|
|
XCRUN_STATUS="$?"
|
|
|
|
|
2021-09-13 20:32:20 +08:00
|
|
|
if [[ "${XCRUN_STATUS}" -ne 0 && "${XCRUN_OUTPUT}" == *license* ]]
|
2016-06-08 05:53:10 -07:00
|
|
|
then
|
|
|
|
odie <<EOS
|
2016-02-16 09:29:03 +00:00
|
|
|
You have not agreed to the Xcode license. Please resolve this by running:
|
2016-10-18 18:40:57 -07:00
|
|
|
sudo xcodebuild -license accept
|
2016-02-16 09:29:03 +00:00
|
|
|
EOS
|
2016-06-08 05:53:10 -07:00
|
|
|
fi
|
2016-02-16 09:29:03 +00:00
|
|
|
fi
|
|
|
|
fi
|
|
|
|
|
2016-09-30 00:43:07 +03:00
|
|
|
for arg in "$@"
|
|
|
|
do
|
2021-09-13 20:32:20 +08:00
|
|
|
[[ "${arg}" == "--" ]] && break
|
2020-07-30 18:40:10 +02:00
|
|
|
|
2021-09-13 20:32:20 +08:00
|
|
|
if [[ "${arg}" == "--help" || "${arg}" == "-h" || "${arg}" == "--usage" || "${arg}" == "-?" ]]
|
2016-09-30 00:43:07 +03:00
|
|
|
then
|
|
|
|
export HOMEBREW_HELP="1"
|
|
|
|
break
|
|
|
|
fi
|
|
|
|
done
|
|
|
|
|
2016-02-25 22:38:43 +01:00
|
|
|
HOMEBREW_ARG_COUNT="$#"
|
2016-02-16 09:29:03 +00:00
|
|
|
HOMEBREW_COMMAND="$1"
|
|
|
|
shift
|
2023-02-01 13:51:18 +01:00
|
|
|
# If you are going to change anything in below case statement,
|
|
|
|
# be sure to also update HOMEBREW_INTERNAL_COMMAND_ALIASES hash in commands.rb
|
2024-05-14 15:29:43 +09:00
|
|
|
# doesn't need a default case as other arguments handled elsewhere.
|
|
|
|
# shellcheck disable=SC2249
|
2021-04-16 22:32:30 +09:00
|
|
|
case "${HOMEBREW_COMMAND}" in
|
2021-09-16 01:08:02 +08:00
|
|
|
ls) HOMEBREW_COMMAND="list" ;;
|
|
|
|
homepage) HOMEBREW_COMMAND="home" ;;
|
|
|
|
-S) HOMEBREW_COMMAND="search" ;;
|
|
|
|
up) HOMEBREW_COMMAND="update" ;;
|
|
|
|
ln) HOMEBREW_COMMAND="link" ;;
|
|
|
|
instal) HOMEBREW_COMMAND="install" ;; # gem does the same
|
|
|
|
uninstal) HOMEBREW_COMMAND="uninstall" ;;
|
2023-07-28 11:26:09 +01:00
|
|
|
post_install) HOMEBREW_COMMAND="postinstall" ;;
|
2021-09-16 01:08:02 +08:00
|
|
|
rm) HOMEBREW_COMMAND="uninstall" ;;
|
|
|
|
remove) HOMEBREW_COMMAND="uninstall" ;;
|
|
|
|
abv) HOMEBREW_COMMAND="info" ;;
|
|
|
|
dr) HOMEBREW_COMMAND="doctor" ;;
|
|
|
|
--repo) HOMEBREW_COMMAND="--repository" ;;
|
2016-08-07 11:56:51 +02:00
|
|
|
environment) HOMEBREW_COMMAND="--env" ;;
|
2021-09-16 01:08:02 +08:00
|
|
|
--config) HOMEBREW_COMMAND="config" ;;
|
|
|
|
-v) HOMEBREW_COMMAND="--version" ;;
|
2023-02-01 13:51:18 +01:00
|
|
|
lc) HOMEBREW_COMMAND="livecheck" ;;
|
|
|
|
tc) HOMEBREW_COMMAND="typecheck" ;;
|
2016-02-16 09:29:03 +00:00
|
|
|
esac
|
|
|
|
|
2017-12-05 14:07:28 +00:00
|
|
|
# Set HOMEBREW_DEV_CMD_RUN for users who have run a development command.
|
|
|
|
# This makes them behave like HOMEBREW_DEVELOPERs for brew update.
|
2021-04-16 22:32:30 +09:00
|
|
|
if [[ -z "${HOMEBREW_DEVELOPER}" ]]
|
2017-12-05 14:07:28 +00:00
|
|
|
then
|
2021-04-16 22:32:30 +09:00
|
|
|
export HOMEBREW_GIT_CONFIG_FILE="${HOMEBREW_REPOSITORY}/.git/config"
|
|
|
|
HOMEBREW_GIT_CONFIG_DEVELOPERMODE="$(git config --file="${HOMEBREW_GIT_CONFIG_FILE}" --get homebrew.devcmdrun 2>/dev/null)"
|
2021-09-13 20:32:20 +08:00
|
|
|
if [[ "${HOMEBREW_GIT_CONFIG_DEVELOPERMODE}" == "true" ]]
|
2017-12-05 14:07:28 +00:00
|
|
|
then
|
|
|
|
export HOMEBREW_DEV_CMD_RUN="1"
|
|
|
|
fi
|
2018-02-27 11:52:47 +00:00
|
|
|
|
|
|
|
# Don't allow non-developers to customise Ruby warnings.
|
|
|
|
unset HOMEBREW_RUBY_WARNINGS
|
|
|
|
fi
|
|
|
|
|
2023-06-19 03:50:47 +01:00
|
|
|
unset HOMEBREW_AUTO_UPDATE_COMMAND
|
|
|
|
|
2023-03-10 17:53:15 +00:00
|
|
|
# Check for commands that should call `brew update --auto-update` first.
|
|
|
|
AUTO_UPDATE_COMMANDS=(
|
|
|
|
install
|
|
|
|
outdated
|
|
|
|
upgrade
|
|
|
|
bundle
|
|
|
|
release
|
|
|
|
)
|
|
|
|
if check-array-membership "${HOMEBREW_COMMAND}" "${AUTO_UPDATE_COMMANDS[@]}" ||
|
|
|
|
[[ "${HOMEBREW_COMMAND}" == "tap" && "${HOMEBREW_ARG_COUNT}" -gt 1 ]]
|
|
|
|
then
|
|
|
|
export HOMEBREW_AUTO_UPDATE_COMMAND="1"
|
|
|
|
fi
|
|
|
|
|
2023-06-19 03:50:47 +01:00
|
|
|
# Check for commands that should auto-update the homebrew-core tap.
|
|
|
|
AUTO_UPDATE_CORE_TAP_COMMANDS=(
|
|
|
|
bump
|
|
|
|
bump-formula-pr
|
|
|
|
)
|
|
|
|
if check-array-membership "${HOMEBREW_COMMAND}" "${AUTO_UPDATE_CORE_TAP_COMMANDS[@]}"
|
|
|
|
then
|
|
|
|
export HOMEBREW_AUTO_UPDATE_COMMAND="1"
|
2023-07-28 10:13:57 +01:00
|
|
|
export HOMEBREW_AUTO_UPDATE_CORE_TAP="1"
|
2024-03-14 01:40:29 +00:00
|
|
|
elif [[ -z "${HOMEBREW_AUTO_UPDATING}" ]]
|
|
|
|
then
|
2023-07-28 10:13:57 +01:00
|
|
|
unset HOMEBREW_AUTO_UPDATE_CORE_TAP
|
2023-06-19 03:50:47 +01:00
|
|
|
fi
|
|
|
|
|
|
|
|
# Check for commands that should auto-update the homebrew-cask tap.
|
|
|
|
AUTO_UPDATE_CASK_TAP_COMMANDS=(
|
|
|
|
bump
|
|
|
|
bump-cask-pr
|
2023-06-22 16:53:46 +01:00
|
|
|
bump-unversioned-casks
|
2023-06-19 03:50:47 +01:00
|
|
|
)
|
|
|
|
if check-array-membership "${HOMEBREW_COMMAND}" "${AUTO_UPDATE_CASK_TAP_COMMANDS[@]}"
|
|
|
|
then
|
|
|
|
export HOMEBREW_AUTO_UPDATE_COMMAND="1"
|
2023-07-28 10:13:57 +01:00
|
|
|
export HOMEBREW_AUTO_UPDATE_CASK_TAP="1"
|
2024-03-14 01:40:29 +00:00
|
|
|
elif [[ -z "${HOMEBREW_AUTO_UPDATING}" ]]
|
|
|
|
then
|
|
|
|
unset HOMEBREW_AUTO_UPDATE_CASK_TAP
|
2023-06-19 03:50:47 +01:00
|
|
|
fi
|
|
|
|
|
2021-04-16 22:32:30 +09:00
|
|
|
if [[ -z "${HOMEBREW_RUBY_WARNINGS}" ]]
|
2018-02-27 11:52:47 +00:00
|
|
|
then
|
2021-02-11 16:22:01 -05:00
|
|
|
export HOMEBREW_RUBY_WARNINGS="-W1"
|
2017-12-05 14:07:28 +00:00
|
|
|
fi
|
|
|
|
|
2020-04-05 15:44:50 +01:00
|
|
|
export HOMEBREW_BREW_DEFAULT_GIT_REMOTE="https://github.com/Homebrew/brew"
|
2021-04-16 22:32:30 +09:00
|
|
|
if [[ -z "${HOMEBREW_BREW_GIT_REMOTE}" ]]
|
2019-12-03 00:45:11 +09:00
|
|
|
then
|
2021-04-16 22:32:30 +09:00
|
|
|
HOMEBREW_BREW_GIT_REMOTE="${HOMEBREW_BREW_DEFAULT_GIT_REMOTE}"
|
2019-12-03 00:45:11 +09:00
|
|
|
fi
|
2019-12-30 10:38:47 +00:00
|
|
|
export HOMEBREW_BREW_GIT_REMOTE
|
2019-12-03 00:45:11 +09:00
|
|
|
|
2022-04-23 02:21:31 +01:00
|
|
|
export HOMEBREW_CORE_DEFAULT_GIT_REMOTE="https://github.com/Homebrew/homebrew-core"
|
2021-04-16 22:32:30 +09:00
|
|
|
if [[ -z "${HOMEBREW_CORE_GIT_REMOTE}" ]]
|
2019-12-30 10:38:47 +00:00
|
|
|
then
|
2021-04-16 22:32:30 +09:00
|
|
|
HOMEBREW_CORE_GIT_REMOTE="${HOMEBREW_CORE_DEFAULT_GIT_REMOTE}"
|
2019-12-03 00:45:11 +09:00
|
|
|
fi
|
2019-12-30 10:38:47 +00:00
|
|
|
export HOMEBREW_CORE_GIT_REMOTE
|
2019-12-03 00:45:11 +09:00
|
|
|
|
2021-10-26 01:29:15 -04:00
|
|
|
# Set HOMEBREW_DEVELOPER_COMMAND if the command being run is a developer command
|
2024-07-15 02:45:27 +01:00
|
|
|
unset HOMEBREW_DEVELOPER_COMMAND
|
2021-10-26 01:29:15 -04:00
|
|
|
if [[ -f "${HOMEBREW_LIBRARY}/Homebrew/dev-cmd/${HOMEBREW_COMMAND}.sh" ]] ||
|
|
|
|
[[ -f "${HOMEBREW_LIBRARY}/Homebrew/dev-cmd/${HOMEBREW_COMMAND}.rb" ]]
|
2016-05-25 01:53:14 +02:00
|
|
|
then
|
2021-10-26 01:29:15 -04:00
|
|
|
export HOMEBREW_DEVELOPER_COMMAND="1"
|
|
|
|
fi
|
|
|
|
|
|
|
|
if [[ -n "${HOMEBREW_DEVELOPER_COMMAND}" && -z "${HOMEBREW_DEVELOPER}" ]]
|
2016-05-25 01:53:14 +02:00
|
|
|
then
|
2021-10-26 01:29:15 -04:00
|
|
|
if [[ -z "${HOMEBREW_DEV_CMD_RUN}" ]]
|
2016-09-05 21:32:18 +01:00
|
|
|
then
|
2023-02-10 23:15:40 -05:00
|
|
|
opoo <<EOS
|
|
|
|
$(bold "${HOMEBREW_COMMAND}") is a developer command, so Homebrew's
|
|
|
|
developer mode has been automatically turned on.
|
|
|
|
To turn developer mode off, run:
|
|
|
|
brew developer off
|
|
|
|
|
|
|
|
EOS
|
2016-09-05 21:32:18 +01:00
|
|
|
fi
|
2021-10-26 01:29:15 -04:00
|
|
|
|
|
|
|
git config --file="${HOMEBREW_GIT_CONFIG_FILE}" --replace-all homebrew.devcmdrun true 2>/dev/null
|
|
|
|
export HOMEBREW_DEV_CMD_RUN="1"
|
|
|
|
fi
|
|
|
|
|
2023-09-01 19:37:32 +01:00
|
|
|
if [[ -n "${HOMEBREW_DEVELOPER}" || -n "${HOMEBREW_DEV_CMD_RUN}" ]]
|
|
|
|
then
|
|
|
|
# Always run with Sorbet for Homebrew developers or when a Homebrew developer command has been run.
|
|
|
|
export HOMEBREW_SORBET_RUNTIME="1"
|
|
|
|
fi
|
|
|
|
|
2025-02-27 11:59:08 +08:00
|
|
|
# Provide a (temporary, undocumented) way to disable Sorbet globally if needed
|
|
|
|
# to avoid reverting the above.
|
|
|
|
if [[ -n "${HOMEBREW_NO_SORBET_RUNTIME}" ]]
|
|
|
|
then
|
|
|
|
unset HOMEBREW_SORBET_RUNTIME
|
|
|
|
fi
|
|
|
|
|
2021-10-26 01:29:15 -04:00
|
|
|
if [[ -f "${HOMEBREW_LIBRARY}/Homebrew/cmd/${HOMEBREW_COMMAND}.sh" ]]
|
|
|
|
then
|
|
|
|
HOMEBREW_BASH_COMMAND="${HOMEBREW_LIBRARY}/Homebrew/cmd/${HOMEBREW_COMMAND}.sh"
|
|
|
|
elif [[ -f "${HOMEBREW_LIBRARY}/Homebrew/dev-cmd/${HOMEBREW_COMMAND}.sh" ]]
|
|
|
|
then
|
2021-04-16 22:32:30 +09:00
|
|
|
HOMEBREW_BASH_COMMAND="${HOMEBREW_LIBRARY}/Homebrew/dev-cmd/${HOMEBREW_COMMAND}.sh"
|
2016-02-16 09:29:03 +00:00
|
|
|
fi
|
|
|
|
|
2016-07-17 02:07:06 +08:00
|
|
|
check-run-command-as-root
|
2016-02-16 09:29:03 +00:00
|
|
|
|
2018-06-30 09:34:21 -04:00
|
|
|
check-prefix-is-not-tmpdir
|
|
|
|
|
2021-09-13 20:32:20 +08:00
|
|
|
if [[ "${HOMEBREW_PREFIX}" == "/usr/local" ]] &&
|
|
|
|
[[ "${HOMEBREW_PREFIX}" != "${HOMEBREW_REPOSITORY}" ]] &&
|
|
|
|
[[ "${HOMEBREW_CELLAR}" == "${HOMEBREW_REPOSITORY}/Cellar" ]]
|
2016-10-11 09:37:37 +01:00
|
|
|
then
|
|
|
|
cat >&2 <<EOS
|
|
|
|
Warning: your HOMEBREW_PREFIX is set to /usr/local but HOMEBREW_CELLAR is set
|
2024-08-24 08:21:43 +08:00
|
|
|
to ${HOMEBREW_CELLAR}. Your current HOMEBREW_CELLAR location will stop
|
2016-10-11 09:37:37 +01:00
|
|
|
you being able to use all the binary packages (bottles) Homebrew provides. We
|
|
|
|
recommend you move your HOMEBREW_CELLAR to /usr/local/Cellar which will get you
|
2024-08-24 08:21:43 +08:00
|
|
|
access to all bottles.
|
2016-10-11 09:37:37 +01:00
|
|
|
EOS
|
|
|
|
fi
|
|
|
|
|
2021-04-16 22:32:30 +09:00
|
|
|
source "${HOMEBREW_LIBRARY}/Homebrew/utils/analytics.sh"
|
2016-04-12 11:02:22 +01:00
|
|
|
setup-analytics
|
2016-03-28 09:33:45 +01:00
|
|
|
|
2021-10-19 08:35:12 -05:00
|
|
|
# Use this configuration file instead of ~/.ssh/config when fetching git over SSH.
|
|
|
|
if [[ -n "${HOMEBREW_SSH_CONFIG_PATH}" ]]
|
|
|
|
then
|
2022-06-28 09:42:50 +01:00
|
|
|
export GIT_SSH_COMMAND="ssh -F${HOMEBREW_SSH_CONFIG_PATH}"
|
2021-10-19 08:35:12 -05:00
|
|
|
fi
|
|
|
|
|
2022-05-23 10:33:05 +02:00
|
|
|
if [[ -n "${HOMEBREW_DOCKER_REGISTRY_TOKEN}" ]]
|
2022-01-27 15:44:34 +00:00
|
|
|
then
|
|
|
|
export HOMEBREW_GITHUB_PACKAGES_AUTH="Bearer ${HOMEBREW_DOCKER_REGISTRY_TOKEN}"
|
2022-05-23 10:33:05 +02:00
|
|
|
elif [[ -n "${HOMEBREW_DOCKER_REGISTRY_BASIC_AUTH_TOKEN}" ]]
|
2022-01-27 15:44:34 +00:00
|
|
|
then
|
|
|
|
export HOMEBREW_GITHUB_PACKAGES_AUTH="Basic ${HOMEBREW_DOCKER_REGISTRY_BASIC_AUTH_TOKEN}"
|
|
|
|
else
|
|
|
|
export HOMEBREW_GITHUB_PACKAGES_AUTH="Bearer QQ=="
|
|
|
|
fi
|
|
|
|
|
2021-04-16 22:32:30 +09:00
|
|
|
if [[ -n "${HOMEBREW_BASH_COMMAND}" ]]
|
2016-02-16 09:29:03 +00:00
|
|
|
then
|
|
|
|
# source rather than executing directly to ensure the entire file is read into
|
|
|
|
# memory before it is run. This makes running a Bash script behave more like
|
|
|
|
# a Ruby script and avoids hard-to-debug issues if the Bash script is updated
|
|
|
|
# at the same time as being run.
|
|
|
|
#
|
2021-04-22 13:18:44 +01:00
|
|
|
# Shellcheck can't follow this dynamic `source`.
|
2018-10-04 09:31:37 +01:00
|
|
|
# shellcheck disable=SC1090
|
2021-04-16 22:32:30 +09:00
|
|
|
source "${HOMEBREW_BASH_COMMAND}"
|
2021-09-13 20:32:20 +08:00
|
|
|
|
|
|
|
{
|
2022-05-19 11:04:20 -04:00
|
|
|
auto-update "$@"
|
2021-09-13 20:32:20 +08:00
|
|
|
"homebrew-${HOMEBREW_COMMAND}" "$@"
|
|
|
|
exit $?
|
|
|
|
}
|
|
|
|
|
2016-02-16 09:29:03 +00:00
|
|
|
else
|
2021-04-16 22:32:30 +09:00
|
|
|
source "${HOMEBREW_LIBRARY}/Homebrew/utils/ruby.sh"
|
2016-07-12 08:51:36 +01:00
|
|
|
setup-ruby-path
|
|
|
|
|
2016-02-25 22:38:43 +01:00
|
|
|
# Unshift command back into argument list (unless argument list was empty).
|
2021-04-16 22:32:30 +09:00
|
|
|
[[ "${HOMEBREW_ARG_COUNT}" -gt 0 ]] && set -- "${HOMEBREW_COMMAND}" "$@"
|
2021-04-17 20:34:16 +09:00
|
|
|
# HOMEBREW_RUBY_PATH set by utils/ruby.sh
|
2021-04-16 22:32:30 +09:00
|
|
|
# shellcheck disable=SC2154
|
2021-09-13 20:32:20 +08:00
|
|
|
{
|
2022-05-19 11:04:20 -04:00
|
|
|
auto-update "$@"
|
2022-11-05 01:58:12 +00:00
|
|
|
exec "${HOMEBREW_RUBY_PATH}" "${HOMEBREW_RUBY_WARNINGS}" "${HOMEBREW_RUBY_DISABLE_OPTIONS}" \
|
2021-09-16 01:04:06 +08:00
|
|
|
"${HOMEBREW_LIBRARY}/Homebrew/brew.rb" "$@"
|
2021-09-13 20:32:20 +08:00
|
|
|
}
|
2016-02-16 09:29:03 +00:00
|
|
|
fi
|