Merge pull request #3511 from macayu17/fix/2334-freebsd-ldconfig

pyenv-binary: check FreeBSD system libraries
This commit is contained in:
native-api 2026-08-10 03:29:33 +03:00 committed by GitHub
commit b7e7adf4ec
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
5 changed files with 42 additions and 8 deletions

View file

@ -155,10 +155,23 @@ case "$EXPECT_LIBC" in
;;
esac
# Required system libraries must already be present on the target. ldconfig -p
# lists each library as "<soname> (...) => <path>"; match the soname column
# exactly so a longer name like libc.so.6.1 does not satisfy libc.so.6.
if command -v ldconfig &>/dev/null && cache="$(ldconfig -p)"; then
# Required system libraries must already be present on the target. Linux lists
# the soname first; FreeBSD lists it in the resolved path, so normalize that
# path before matching exact names.
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=""
for dep in $DEPS; do
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
fi
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
build_package_relocate() {

View file

@ -28,6 +28,8 @@ case "$version" in
;;
esac
version="$(pyenv-latest -f -k "$version")"
os="$(uname -s)"
arch="$(uname -m)"
distro=""

View file

@ -93,6 +93,19 @@ create_meta() {
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" {
local meta="$(create_meta)"
rm "${BATS_TEST_TMPDIR}/3.12.7.tar.gz"

View file

@ -2,6 +2,10 @@
load test_helper
_setup() {
create_stub pyenv-latest '[ "$1" = "-f" ] && [ "$2" = "-k" ] && shift 2 && echo "$*"'
}
@test "completion lists installable versions" {
create_stub pyenv-install \
'[ "$*" = "--list --bare" ] && echo 3.13.14'
@ -40,12 +44,13 @@ load test_helper
assert_success "3.13.14-macos-15.5-arm64"
}
@test "generates a package name for FreeBSD" {
@test "resolves a version prefix when generating a package name" {
create_stub pyenv-latest '[ "$*" = "-f -k 3" ] && echo 3.14.7'
create_stub uname \
'case "$1" in -s) echo FreeBSD;; -m) echo amd64;; -r) echo 14.2-RELEASE-p3;; esac'
run pyenv-binary-package-name 3.13.14
assert_success "3.13.14-freebsd-14.2-release-p3-amd64"
run pyenv-binary-package-name 3
assert_success "3.14.7-freebsd-14.2-release-p3-amd64"
}
@test "rejects an invalid version name" {

View file

@ -7,6 +7,7 @@ load test_helper
# `generate-installer' behave the same on any test host.
stub_build_environment() {
create_stub pyenv-install 'mkdir -p "${PYENV_ROOT}/versions/${1##*:}/bin"'
create_stub pyenv-latest '[ "$1" = "-f" ] && [ "$2" = "-k" ] && shift 2 && echo "$*"'
create_stub uname 'case "$1" in -s) echo Linux;; -m) echo x86_64;; esac'
create_stub getconf 'echo "glibc 2.17"'
}