mirror of
https://github.com/Quad4-Software/MeshChatX.git
synced 2026-08-18 09:49:09 -04:00
111 lines
2.9 KiB
Bash
Executable file
111 lines
2.9 KiB
Bash
Executable file
#!/usr/bin/env bash
|
|
# Fail if frozen pycodec2 cannot resolve libcodec2.
|
|
#
|
|
# Usage:
|
|
# github-verify-frozen-codec2.sh [build/exe]
|
|
set -euo pipefail
|
|
|
|
ROOT="$(cd "$(dirname "$0")/../.." && pwd)"
|
|
BUILD_EXE="${1:-${ROOT}/build/exe}"
|
|
|
|
if [[ ! -d "${BUILD_EXE}" ]]; then
|
|
echo "frozen codec2 verify: cx_Freeze output not found at ${BUILD_EXE}" >&2
|
|
exit 1
|
|
fi
|
|
|
|
if [[ ! -d "${BUILD_EXE}/lib" ]]; then
|
|
for sub in "${BUILD_EXE}"/*; do
|
|
if [[ -d "${sub}/lib" ]]; then
|
|
BUILD_EXE="${sub}"
|
|
break
|
|
fi
|
|
done
|
|
fi
|
|
|
|
PKG="${BUILD_EXE}/lib/pycodec2"
|
|
if [[ ! -d "${PKG}" ]]; then
|
|
echo "frozen codec2 verify: missing ${PKG}" >&2
|
|
exit 1
|
|
fi
|
|
|
|
shopt -s nullglob
|
|
exts=("${PKG}"/pycodec2*.so "${PKG}"/pycodec2*.pyd "${PKG}"/pycodec2*.dylib)
|
|
shopt -u nullglob
|
|
if [[ ${#exts[@]} -eq 0 ]]; then
|
|
echo "frozen codec2 verify: no pycodec2 extension under ${PKG}" >&2
|
|
exit 1
|
|
fi
|
|
EXT="${exts[0]}"
|
|
|
|
shopt -s nullglob
|
|
candidates=(
|
|
"${PKG}"/libcodec2.dylib
|
|
"${PKG}"/libcodec2.so
|
|
"${PKG}"/libcodec2.dll
|
|
"${PKG}"/.dylibs/libcodec2*.dylib
|
|
"${BUILD_EXE}/lib"/libcodec2*.dylib
|
|
"${BUILD_EXE}/lib"/libcodec2.so*
|
|
"${BUILD_EXE}/lib"/libcodec2.dll
|
|
)
|
|
shopt -u nullglob
|
|
|
|
libs=()
|
|
for _lib in "${candidates[@]}"; do
|
|
if [[ -f "${_lib}" ]]; then
|
|
libs+=("${_lib}")
|
|
fi
|
|
done
|
|
|
|
if [[ "$(uname -s)" == "Darwin" && ${#libs[@]} -eq 0 ]]; then
|
|
echo "frozen codec2 verify: libcodec2 missing next to ${EXT}" >&2
|
|
echo " expected lib/pycodec2/libcodec2.dylib or lib/libcodec2*.dylib" >&2
|
|
exit 1
|
|
fi
|
|
|
|
resolve_dep() {
|
|
local dep="$1"
|
|
local so_dir
|
|
so_dir="$(cd "$(dirname "${EXT}")" && pwd)"
|
|
case "${dep}" in
|
|
@executable_path/*)
|
|
printf '%s\n' "${BUILD_EXE}/${dep#@executable_path/}"
|
|
;;
|
|
@loader_path/*)
|
|
printf '%s\n' "${so_dir}/${dep#@loader_path/}"
|
|
;;
|
|
@rpath/*)
|
|
printf '%s\n' "${BUILD_EXE}/lib/${dep#@rpath/}"
|
|
;;
|
|
/*)
|
|
printf '%s\n' "${dep}"
|
|
;;
|
|
*)
|
|
printf '%s\n' "${so_dir}/${dep}"
|
|
;;
|
|
esac
|
|
}
|
|
|
|
if [[ "$(uname -s)" == "Darwin" ]] && command -v otool >/dev/null 2>&1; then
|
|
while IFS= read -r dep; do
|
|
[[ -n "${dep}" ]] || continue
|
|
case "${dep}" in
|
|
/opt/homebrew/* | /usr/local/* | /opt/local/*)
|
|
echo "frozen codec2 verify: ${EXT} still links absolute ${dep}" >&2
|
|
echo " rewrite to @loader_path/libcodec2.dylib before shipping" >&2
|
|
exit 1
|
|
;;
|
|
esac
|
|
resolved="$(resolve_dep "${dep}")"
|
|
if [[ ! -f "${resolved}" ]]; then
|
|
echo "frozen codec2 verify: ${EXT} needs ${dep}" >&2
|
|
echo " resolved missing path: ${resolved}" >&2
|
|
exit 1
|
|
fi
|
|
done < <(otool -L "${EXT}" | awk '/libcodec2/{print $1}')
|
|
fi
|
|
|
|
if [[ ${#libs[@]} -gt 0 ]]; then
|
|
echo "frozen codec2 verify: OK (${EXT} + ${libs[0]})"
|
|
else
|
|
echo "frozen codec2 verify: OK (${EXT}, libcodec2 not bundled)"
|
|
fi
|