mirror of
https://github.com/pyenv/pyenv.git
synced 2026-10-03 07:51:06 +09:00
pyenv-binary: support checking FreeBSD system libraries
* Handle both spaced and unspaced FreeBSD `ldconfig -r` output
This commit is contained in:
parent
da172db42d
commit
5a31fea21b
@ -155,10 +155,23 @@ case "$EXPECT_LIBC" in
|
|||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
|
|
||||||
# Required system libraries must already be present on the target. ldconfig -p
|
# Required system libraries must already be present on the target. Linux lists
|
||||||
# lists each library as "<soname> (...) => <path>"; match the soname column
|
# the soname first; FreeBSD lists it in the resolved path, so normalize that
|
||||||
# exactly so a longer name like libc.so.6.1 does not satisfy libc.so.6.
|
# path before matching exact names.
|
||||||
if command -v ldconfig &>/dev/null && cache="$(ldconfig -p)"; then
|
cache=""
|
||||||
|
if command -v ldconfig &>/dev/null; then
|
||||||
|
case "$os" in
|
||||||
|
FreeBSD )
|
||||||
|
cache="$(ldconfig -r 2>/dev/null)" &&
|
||||||
|
cache="$(printf '%s\n' "$cache" | awk -F ' *=> *' '{ sub(/^.*\//, "", $2); print $2 }')" \
|
||||||
|
|| cache=""
|
||||||
|
;;
|
||||||
|
* )
|
||||||
|
cache="$(ldconfig -p 2>/dev/null)" || cache=""
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
fi
|
||||||
|
if [ -n "$cache" ]; then
|
||||||
missing=""
|
missing=""
|
||||||
for dep in $DEPS; do
|
for dep in $DEPS; do
|
||||||
printf '%s\n' "$cache" | awk -v d="$dep" '$1 == d { found = 1 } END { exit !found }' \
|
printf '%s\n' "$cache" | awk -v d="$dep" '$1 == d { found = 1 } END { exit !found }' \
|
||||||
@ -169,7 +182,7 @@ if command -v ldconfig &>/dev/null && cache="$(ldconfig -p)"; then
|
|||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
elif [ -n "$DEPS" ]; then
|
elif [ -n "$DEPS" ]; then
|
||||||
echo "pyenv-binary: cannot check required system libraries (ldconfig with -p not found)" >&2
|
echo "pyenv-binary: cannot check required system libraries (ldconfig cache unavailable)" >&2
|
||||||
fi
|
fi
|
||||||
|
|
||||||
build_package_relocate() {
|
build_package_relocate() {
|
||||||
|
|||||||
@ -93,6 +93,19 @@ create_meta() {
|
|||||||
assert_failure "pyenv-binary: archive needs glibc 99.0 or newer, but this system has 2.31"
|
assert_failure "pyenv-binary: archive needs glibc 99.0 or newer, but this system has 2.31"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@test "checks required libraries in the FreeBSD ldconfig cache" {
|
||||||
|
local out="${BATS_TEST_TMPDIR}/definition"
|
||||||
|
local meta="$(create_meta FreeBSD amd64 '')"
|
||||||
|
printf 'dep=libc.so.7\ndep=libmissing.so.1\n' >> "$meta"
|
||||||
|
pyenv-binary-generate-installer "$meta" \
|
||||||
|
--archive-url http://example.com/a.tar.gz -o "$out"
|
||||||
|
create_stub uname 'case "$1" in -s) echo FreeBSD;; -m) echo amd64;; esac'
|
||||||
|
create_stub ldconfig '[ "$1" = "-r" ] && echo "0:-lc.7=>/lib/libc.so.7"'
|
||||||
|
|
||||||
|
run bash "$out"
|
||||||
|
assert_failure "pyenv-binary: missing required system libraries: libmissing.so.1"
|
||||||
|
}
|
||||||
|
|
||||||
@test "fails when the archive is not beside the metadata" {
|
@test "fails when the archive is not beside the metadata" {
|
||||||
local meta="$(create_meta)"
|
local meta="$(create_meta)"
|
||||||
rm "${BATS_TEST_TMPDIR}/3.12.7.tar.gz"
|
rm "${BATS_TEST_TMPDIR}/3.12.7.tar.gz"
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user