fix: v0.12.5 —— 修 macOS 依赖收集把 dylib 自己的 install name 当依赖
安装包 / Linux aarch64 (push) Canceled after 0s
安装包 / Linux x86_64 (push) Canceled after 0s
安装包 / Windows x86_64 (push) Canceled after 0s
安装包 / macOS arm64 (Apple Silicon) (push) Canceled after 0s
安装包 / macOS x86_64 (Intel) (push) Canceled after 0s
安装包 / 发布到 Release (push) Canceled after 0s
安装包 / Linux aarch64 (push) Canceled after 0s
安装包 / Linux x86_64 (push) Canceled after 0s
安装包 / Windows x86_64 (push) Canceled after 0s
安装包 / macOS arm64 (Apple Silicon) (push) Canceled after 0s
安装包 / macOS x86_64 (Intel) (push) Canceled after 0s
安装包 / 发布到 Release (push) Canceled after 0s
- otool -L 对 dylib 会先打印它自己的 install name(不是依赖), 之前脚本把它当依赖去 install_name_tool -change,改不动,所以一直报 「还有 20 个 Homebrew 依赖没处理」 - 现在先用 otool -D 读出 install name,用 -id 改成包内路径, 再处理真正的 /opt/homebrew 依赖;@rpath / 系统库直接跳过
This commit is contained in:
@@ -1,6 +1,10 @@
|
|||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
# 把 .app 里引用到的 Homebrew 动态库收进 Contents/Frameworks,并把引用改成包内相对路径。
|
# 把 .app 里引用到的 Homebrew 动态库收进 Contents/Frameworks,并把引用改成包内相对路径。
|
||||||
# Homebrew 的 Qt 会链到 /opt/homebrew 下的 libpng / freetype 等,macdeployqt 不会带它们。
|
# Homebrew 的 Qt 会链到 /opt/homebrew 下的 libpng / freetype 等,macdeployqt 不会带它们。
|
||||||
|
#
|
||||||
|
# 注意:dylib 的 otool -L 第一行是它自己的 install name(不是依赖),要单独用 -id 改,
|
||||||
|
# 否则会误当成依赖去 -change,改不动还一直报“没处理”。
|
||||||
|
#
|
||||||
# 用法: bundle-libs.sh <VoiletMark.app>
|
# 用法: bundle-libs.sh <VoiletMark.app>
|
||||||
set -euo pipefail
|
set -euo pipefail
|
||||||
|
|
||||||
@@ -22,8 +26,21 @@ while [ "$round" -lt 12 ]; do
|
|||||||
round=$((round + 1))
|
round=$((round + 1))
|
||||||
changed=0
|
changed=0
|
||||||
while IFS= read -r file; do
|
while IFS= read -r file; do
|
||||||
[ -f "$file" ] || continue
|
# 先把这个文件自己的 install name 从 Homebrew 路径改掉
|
||||||
|
self_id=$(otool -D "$file" 2>/dev/null | tail -n +2 | head -n1 || true)
|
||||||
|
if [ -n "$self_id" ]; then
|
||||||
|
case "$self_id" in
|
||||||
|
/opt/homebrew/*|/usr/local/*)
|
||||||
|
install_name_tool -id "@executable_path/../Frameworks/$(basename "$self_id")" "$file" 2>/dev/null || true
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
fi
|
||||||
|
|
||||||
|
# 再把真正依赖的 Homebrew dylib 收进来
|
||||||
while IFS= read -r dep; do
|
while IFS= read -r dep; do
|
||||||
|
case "$dep" in
|
||||||
|
@*|/System/*|/usr/lib/*) continue ;;
|
||||||
|
esac
|
||||||
case "$dep" in
|
case "$dep" in
|
||||||
/opt/homebrew/*|/usr/local/*)
|
/opt/homebrew/*|/usr/local/*)
|
||||||
base=$(basename "$dep")
|
base=$(basename "$dep")
|
||||||
|
|||||||
Reference in New Issue
Block a user