mirror of
https://codeberg.org/libreboot/lbmk.git
synced 2026-07-17 08:40:14 +02:00
init.sh: Set python version only on parent
Do it after the creation of xbmkpath. This avoids performing an unnecessary check, since PATH will have already been corrected for child instances; Python will already be correct there. Signed-off-by: Leah Rowe <leah@libreboot.org>
This commit is contained in:
+48
-48
@@ -30,8 +30,8 @@ xbmk_init()
|
|||||||
id -u 1>/dev/null 2>/dev/null || err "suid check failed (id -u)"
|
id -u 1>/dev/null 2>/dev/null || err "suid check failed (id -u)"
|
||||||
[ "$(id -u)" != "0" ] || err "this command as root is not permitted"
|
[ "$(id -u)" != "0" ] || err "this command as root is not permitted"
|
||||||
|
|
||||||
for init_cmd in set_pyver set_version set_env lock git_init \
|
for init_cmd in set_version set_env lock git_init \
|
||||||
mkdirs create_pathdirs child_exec; do
|
mkdirs set_pyver create_pathdirs child_exec; do
|
||||||
xbmk_$init_cmd "$@" || break
|
xbmk_$init_cmd "$@" || break
|
||||||
done
|
done
|
||||||
}
|
}
|
||||||
@@ -50,52 +50,6 @@ xbmkpkg()
|
|||||||
printf "You need AUR packages: %s\n" "$aur_notice" 1>&2; :
|
printf "You need AUR packages: %s\n" "$aur_notice" 1>&2; :
|
||||||
}
|
}
|
||||||
|
|
||||||
xbmk_set_pyver()
|
|
||||||
{
|
|
||||||
pyv="import sys; print(sys.version_info[:])"
|
|
||||||
python="python3"
|
|
||||||
pybin python3 1>/dev/null || python="python"
|
|
||||||
pyver="2" && [ "$python" = "python3" ] && pyver="3"
|
|
||||||
pybin "$python" 1>/dev/null || pyver=""
|
|
||||||
[ -z "$pyver" ] || "`pybin "$python"`" -c "$pyv" 1>/dev/null \
|
|
||||||
2>/dev/null || err "Cannot detect host Python version."
|
|
||||||
[ -n "$pyver" ] && \
|
|
||||||
pyver="$("$(pybin "$python")" -c "$pyv" | awk '{print $1}')" && \
|
|
||||||
pyver="${pyver#(}" && pyver="${pyver%,}"
|
|
||||||
[ "${pyver%%.*}" = "3" ] || err "Bad python version (must by 3.x)"; :
|
|
||||||
}
|
|
||||||
|
|
||||||
# Use direct path, to prevent a hang if Python is using a virtual environment,
|
|
||||||
# not command -v, to prevent a hang when checking python's version
|
|
||||||
# See: https://docs.python.org/3/library/venv.html#how-venvs-work
|
|
||||||
pybin()
|
|
||||||
{
|
|
||||||
py="import sys; quit(1) if sys.prefix == sys.base_prefix else quit(0)"
|
|
||||||
|
|
||||||
venv=1
|
|
||||||
command -v "$1" 1>/dev/null 2>/dev/null || venv=0
|
|
||||||
[ $venv -lt 1 ] || "$1" -c "$py" 1>/dev/null 2>/dev/null || venv=0
|
|
||||||
|
|
||||||
# ideally, don't rely on PATH or hardcoded paths if python venv.
|
|
||||||
# use the *real*, direct executable linked to by the venv symlink
|
|
||||||
if [ $venv -gt 0 ] && [ -L "`command -v "$1" 2>/dev/null`" ]; then
|
|
||||||
pypath="$(findpath \
|
|
||||||
"$(command -v "$1" 2>/dev/null)" 2>/dev/null || :)"
|
|
||||||
[ -e "$pypath" ] && [ ! -d "$pypath" ] && \
|
|
||||||
[ -x "$pypath" ] && printf "%s\n" "$pypath" && return 0; :
|
|
||||||
fi
|
|
||||||
|
|
||||||
# if python venv: fall back to common PATH directories for checking
|
|
||||||
[ $venv -gt 0 ] && for pypath in "/usr/local/bin" "/usr/bin"; do
|
|
||||||
[ -e "$pypath/$1" ] && [ ! -d "$pypath/$1" ] && \
|
|
||||||
[ -x "$pypath/$1" ] && printf "%s/%s\n" "$pypath" "$1" && \
|
|
||||||
return 0
|
|
||||||
done && return 1
|
|
||||||
|
|
||||||
# Defer to normal command -v if not a venv
|
|
||||||
command -v "$1" 2>/dev/null || return 1
|
|
||||||
}
|
|
||||||
|
|
||||||
xbmk_set_version()
|
xbmk_set_version()
|
||||||
{
|
{
|
||||||
[ ! -f ".version" ] || read -r version < ".version" || :; :
|
[ ! -f ".version" ] || read -r version < ".version" || :; :
|
||||||
@@ -193,6 +147,52 @@ xbmk_mkdirs()
|
|||||||
remkdir "$XBMK_CACHE/gnupath" "$XBMK_CACHE/xbmkpath"
|
remkdir "$XBMK_CACHE/gnupath" "$XBMK_CACHE/xbmkpath"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
xbmk_set_pyver()
|
||||||
|
{
|
||||||
|
pyv="import sys; print(sys.version_info[:])"
|
||||||
|
python="python3"
|
||||||
|
pybin python3 1>/dev/null || python="python"
|
||||||
|
pyver="2" && [ "$python" = "python3" ] && pyver="3"
|
||||||
|
pybin "$python" 1>/dev/null || pyver=""
|
||||||
|
[ -z "$pyver" ] || "`pybin "$python"`" -c "$pyv" 1>/dev/null \
|
||||||
|
2>/dev/null || err "Cannot detect host Python version."
|
||||||
|
[ -n "$pyver" ] && \
|
||||||
|
pyver="$("$(pybin "$python")" -c "$pyv" | awk '{print $1}')" && \
|
||||||
|
pyver="${pyver#(}" && pyver="${pyver%,}"
|
||||||
|
[ "${pyver%%.*}" = "3" ] || err "Bad python version (must by 3.x)"; :
|
||||||
|
}
|
||||||
|
|
||||||
|
# Use direct path, to prevent a hang if Python is using a virtual environment,
|
||||||
|
# not command -v, to prevent a hang when checking python's version
|
||||||
|
# See: https://docs.python.org/3/library/venv.html#how-venvs-work
|
||||||
|
pybin()
|
||||||
|
{
|
||||||
|
py="import sys; quit(1) if sys.prefix == sys.base_prefix else quit(0)"
|
||||||
|
|
||||||
|
venv=1
|
||||||
|
command -v "$1" 1>/dev/null 2>/dev/null || venv=0
|
||||||
|
[ $venv -lt 1 ] || "$1" -c "$py" 1>/dev/null 2>/dev/null || venv=0
|
||||||
|
|
||||||
|
# ideally, don't rely on PATH or hardcoded paths if python venv.
|
||||||
|
# use the *real*, direct executable linked to by the venv symlink
|
||||||
|
if [ $venv -gt 0 ] && [ -L "`command -v "$1" 2>/dev/null`" ]; then
|
||||||
|
pypath="$(findpath \
|
||||||
|
"$(command -v "$1" 2>/dev/null)" 2>/dev/null || :)"
|
||||||
|
[ -e "$pypath" ] && [ ! -d "$pypath" ] && \
|
||||||
|
[ -x "$pypath" ] && printf "%s\n" "$pypath" && return 0; :
|
||||||
|
fi
|
||||||
|
|
||||||
|
# if python venv: fall back to common PATH directories for checking
|
||||||
|
[ $venv -gt 0 ] && for pypath in "/usr/local/bin" "/usr/bin"; do
|
||||||
|
[ -e "$pypath/$1" ] && [ ! -d "$pypath/$1" ] && \
|
||||||
|
[ -x "$pypath/$1" ] && printf "%s/%s\n" "$pypath" "$1" && \
|
||||||
|
return 0
|
||||||
|
done && return 1
|
||||||
|
|
||||||
|
# Defer to normal command -v if not a venv
|
||||||
|
command -v "$1" 2>/dev/null || return 1
|
||||||
|
}
|
||||||
|
|
||||||
xbmk_create_pathdirs()
|
xbmk_create_pathdirs()
|
||||||
{
|
{
|
||||||
(
|
(
|
||||||
|
|||||||
Reference in New Issue
Block a user