Some checks failed
Build / Build openSUSE (leap:15.6) (push) Has been cancelled
Build / Build openSUSE (leap:16.0) (push) Has been cancelled
Build / Build openSUSE (tumbleweed) (push) Has been cancelled
Build / Build Fedora (42) (push) Has been cancelled
Build / Build Fedora (43) (push) Has been cancelled
Build / Build Fedora (44) (push) Has been cancelled
Build / Build OpenMandriva (cooker) (push) Has been cancelled
Build / Build Mageia (9) (push) Has been cancelled
Build / Build Debian (bookworm) (push) Has been cancelled
Build / Build Debian (forky) (push) Has been cancelled
Build / Build Debian (trixie) (push) Has been cancelled
Build / Build Ubuntu (noble) (push) Has been cancelled
Build / Build Ubuntu (questing) (push) Has been cancelled
Build / Build Ubuntu (resolute) (push) Has been cancelled
Build / Upload Ubuntu PPA (noble) (push) Has been cancelled
Build / Upload Ubuntu PPA (questing) (push) Has been cancelled
Build / Upload Ubuntu PPA (resolute) (push) Has been cancelled
Build / Build FreeBSD (push) Has been cancelled
Build / Build OpenBSD (push) Has been cancelled
Build / Build macOS Public (release, macos-15) (push) Has been cancelled
Build / Build macOS Public (release, macos-15-intel) (push) Has been cancelled
Build / Build macOS Private (release, macos-arm64) (push) Has been cancelled
Build / Build Windows MinGW (i686, debug) (push) Has been cancelled
Build / Build Windows MinGW (i686, release) (push) Has been cancelled
Build / Build Windows MinGW (x86_64, debug) (push) Has been cancelled
Build / Build Windows MinGW (x86_64, release) (push) Has been cancelled
Build / Build Windows MSVC (arm64, debug, arm64 debug, windows-11-arm) (push) Has been cancelled
Build / Build Windows MSVC (arm64, release, arm64 release, windows-11-arm) (push) Has been cancelled
Build / Build Windows MSVC (x86, debug, x86 debug, windows-2022) (push) Has been cancelled
Build / Build Windows MSVC (x86, release, x86 release, windows-2022) (push) Has been cancelled
Build / Build Windows MSVC (x86_64, debug, x86_64 debug, windows-2022) (push) Has been cancelled
Build / Build Windows MSVC (x86_64, release, x86_64 release, windows-2022) (push) Has been cancelled
Build / Upload (push) Has been cancelled
Build / Attach to release (push) Has been cancelled
This commit modifies the `macdeploycheck` formula to install the script directly from the tapped repository instead of using a local file URL. Additionally, the `Brewfile` is updated to use the directory of the Brewfile for the tap path, ensuring compatibility when running `brew bundle` from different locations. The `install_brew_deps.sh` script is also enhanced to provide more detailed error messages when missing formulae are detected.
74 lines
2.1 KiB
Bash
74 lines
2.1 KiB
Bash
#!/usr/bin/env bash
|
|
set -euo pipefail
|
|
|
|
# macdeploycheck: sanity check a deployed macOS .app bundle for accidental runtime deps
|
|
# on Homebrew/MacPorts paths (which break distribution / App Store / notarization).
|
|
#
|
|
# Usage:
|
|
# macdeploycheck /path/to/App.app
|
|
|
|
app="${1:-}"
|
|
if [[ -z "$app" ]]; then
|
|
echo "Usage: macdeploycheck <path/to/App.app>" >&2
|
|
exit 2
|
|
fi
|
|
if [[ ! -d "$app" ]]; then
|
|
echo "Error: app bundle not found: $app" >&2
|
|
exit 2
|
|
fi
|
|
if [[ ! -d "$app/Contents" ]]; then
|
|
echo "Error: not a macOS app bundle (missing Contents/): $app" >&2
|
|
exit 2
|
|
fi
|
|
|
|
fail=0
|
|
tmp="$(mktemp -t macdeploycheck.XXXXXX)"
|
|
trap 'rm -f "$tmp"' EXIT
|
|
|
|
# Collect Mach-O files (executables + dylibs) inside the bundle.
|
|
while IFS= read -r -d '' f; do
|
|
if file "$f" | grep -q "Mach-O"; then
|
|
echo "$f" >>"$tmp"
|
|
fi
|
|
done < <(find "$app/Contents" -type f \( -perm -111 -o -name "*.dylib" -o -name "*.so" \) -print0 2>/dev/null)
|
|
|
|
if [[ ! -s "$tmp" ]]; then
|
|
echo "Warning: no Mach-O files found under $app/Contents" >&2
|
|
exit 0
|
|
fi
|
|
|
|
echo "macdeploycheck: scanning for external (Homebrew/MacPorts) runtime deps..."
|
|
while IFS= read -r f; do
|
|
deps="$(otool -L "$f" 2>/dev/null | tail -n +2 | awk '{print $1}' || true)"
|
|
while IFS= read -r dep; do
|
|
[[ -z "$dep" ]] && continue
|
|
|
|
# Ignore system and rpath/loader/executable paths.
|
|
case "$dep" in
|
|
/System/*|/usr/lib/*|@rpath/*|@loader_path/*|@executable_path/*) continue ;;
|
|
esac
|
|
|
|
# Common accidental runtime deps that will break distribution.
|
|
if [[ "$dep" == /opt/homebrew/* || "$dep" == /usr/local/* || "$dep" == /opt/local/* ]]; then
|
|
echo "ERROR: $f links to external path: $dep" >&2
|
|
fail=1
|
|
fi
|
|
done <<<"$deps"
|
|
done <"$tmp"
|
|
|
|
if [[ "$fail" -ne 0 ]]; then
|
|
cat >&2 <<'EOM'
|
|
|
|
One or more binaries in your .app link to a Homebrew (or MacPorts) path.
|
|
That usually means the bundle is not self-contained and will fail on other machines.
|
|
|
|
Fix: re-run your deploy step (e.g. macdeployqt) so frameworks/dylibs are bundled and
|
|
their install names are rewritten to @rpath/@loader_path.
|
|
EOM
|
|
exit 1
|
|
fi
|
|
|
|
echo "OK: no external Homebrew/MacPorts runtime deps detected."
|
|
exit 0
|
|
|