firefox: Don't rely on file extension to identify dynamic libraries

Since a2e886428b, dynamic libraries are
copied rather than symlinked.  The issue is that not all dynamic
libraries follow the convention of ending in .dylib.  This patch
addresses this by implementing a more robust search for dynamic
libraries using `otool`.

Resolves #462923.
This commit is contained in:
Frank Plowman
2026-02-23 07:55:33 +00:00
parent f5fb7f6782
commit 24c57a581c
@@ -423,10 +423,21 @@ let
# Maybe related to how omni.ja file is mmapped into memory. See:
# https://github.com/mozilla/gecko-dev/blob/b1662b447f306e6554647914090d4b73ac8e1664/modules/libjar/nsZipArchive.cpp#L204
#
# The *.dylib files are copied, otherwise some basic functionality, e.g. Crypto API, is broken.
for file in $(find . -name "omni.ja" -o -name "*.dylib"); do
# Mach-O shared libraries must be copied, not symlinked, otherwise some
# functionality like the Crypto API and audio decoding is broken.
find . -type l -print0 |
while IFS= read -r -d "" file; do
case "$(basename "$file")" in
omni.ja)
;;
*)
# Copy if the symlink resolves to a Mach-O dylib
otool -l "$file" 2>/dev/null | grep -q 'LC_ID_DYLIB' || continue
;;
esac
rm "$file"
cp "${browser}/${appPath}/$file" "$file"
cp "${browser}/${appPath}/''${file#./}" "$file"
done
# Copy any embedded .app directories; plugin-container fails to start otherwise.