#!/usr/bin/env bats load test_helper _setup() { create_stub pyenv-help "echo usage" create_stub uname 'case "$1" in -s) echo Linux;; -m) echo x86_64;; esac' } stub_patchelf() { create_path_executable patchelf <> "${BATS_TEST_TMPDIR}/patchelf.log" STUB } create_interpreter() { mkdir -p "${BATS_TEST_TMPDIR}/prefix/bin" printf '#!/bin/sh\n' > "${BATS_TEST_TMPDIR}/prefix/bin/python2.7" chmod +x "${BATS_TEST_TMPDIR}/prefix/bin/python2.7" } create_macos_tree() { local prefix="${BATS_TEST_TMPDIR}/prefix" local lib="${prefix}/lib/python3.12" mkdir -p "${prefix}/bin" "${lib}/lib-dynload" "${lib}/site-packages/numpy" printf '#!/bin/sh\n' > "${prefix}/bin/python3.12" chmod +x "${prefix}/bin/python3.12" touch "${prefix}/lib/libpython3.12.dylib" touch "${lib}/lib-dynload/_ssl.cpython-312-darwin.so" touch "${lib}/site-packages/numpy/_multiarray.so" } stub_macos_tools() { create_stub uname 'case "$1" in -s) echo Darwin;; -m) echo arm64;; esac' create_path_executable install_name_tool \ 'echo "$*" >> "${BATS_TEST_TMPDIR}/install-name-tool.log"' create_path_executable otool <<'STUB' file="${!#}" echo "$*" >> "${BATS_TEST_TMPDIR}/otool.log" old="/build prefix/3.12.7" case "$1" in -L ) echo "${file}:" case "$file" in */bin/python3.12 ) if [ -n "$OTOOL_RELOCATED" ]; then echo " @rpath/libpython3.12.dylib (compatibility version 3.12.0, current version 3.12.0)" else echo " ${old}/lib/libpython3.12.dylib (compatibility version 3.12.0, current version 3.12.0)" fi echo " ${old}-other/lib/libother.dylib (compatibility version 1.0.0, current version 1.0.0)" echo " /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1.0.0)" echo " /opt/homebrew/lib/libintl.8.dylib (compatibility version 1.0.0, current version 1.0.0)" echo " @loader_path/liblocal.dylib (compatibility version 1.0.0, current version 1.0.0)" ;; */lib/libpython3.12.dylib ) if [ -n "$OTOOL_RELOCATED" ]; then echo " @rpath/libpython3.12.dylib (compatibility version 3.12.0, current version 3.12.0)" else echo " ${old}/lib/libpython3.12.dylib (compatibility version 3.12.0, current version 3.12.0)" fi ;; esac ;; -D ) case "$file" in */lib/libpython3.12.dylib ) echo "${file}:" if [ -n "$OTOOL_RELOCATED" ]; then echo '@rpath/libpython3.12.dylib' else echo "${old}/lib/libpython3.12.dylib" fi ;; * ) exit 1 ;; esac ;; -l ) if [ -n "$OTOOL_RELOCATED" ]; then case "$file" in */bin/* ) rpath='@executable_path/../lib' ;; */lib/*.dylib ) rpath='@loader_path' ;; * ) rpath='@loader_path/../..' ;; esac else rpath="${old}/lib" fi cat <