2020-12-03 16:33:40 -06:00
#!/bin/sh
set -e
set -u
set -o pipefail
function on_error {
echo " $( realpath -mq " ${ 0 } " ) : $1 : error: Unexpected failure "
}
trap 'on_error $LINENO' ERR
# Used as a return value for each invocation of `strip_invalid_archs` function.
STRIP_BINARY_RETVAL = 0
# Strip invalid architectures
strip_invalid_archs( ) {
binary = " $1 "
warn_missing_arch = ${ 2 :- true }
# Get architectures for current target binary
binary_archs = " $( lipo -info " $binary " | rev | cut -d ':' -f1 | awk '{$1=$1;print}' | rev) "
# Intersect them with the architectures we are building for
intersected_archs = " $( echo ${ ARCHS [@] } ${ binary_archs [@] } | tr ' ' '\n' | sort | uniq -d) "
# If there are no archs supported by this binary then warn the user
if [ [ -z " $intersected_archs " ] ] ; then
if [ [ " $warn_missing_arch " = = "true" ] ] ; then
echo " warning: [CP] Vendored binary ' $binary ' contains architectures ( $binary_archs ) none of which match the current build architectures ( $ARCHS ). "
fi
STRIP_BINARY_RETVAL = 1
return
fi
stripped = ""
for arch in $binary_archs ; do
if ! [ [ " ${ ARCHS } " = = *" $arch " * ] ] ; then
# Strip non-valid architectures in-place
lipo -remove " $arch " -output " $binary " " $binary "
stripped = " $stripped $arch "
fi
done
if [ [ " $stripped " ] ] ; then
echo " Stripped $binary of architectures: $stripped "
fi
STRIP_BINARY_RETVAL = 0
}
# This protects against multiple targets copying the same framework dependency at the same time. The solution
# was originally proposed here: https://lists.samba.org/archive/rsync/2008-February/020158.html
RSYNC_PROTECT_TMP_FILES = ( --filter "P .*.??????" )
# Copies and strips a vendored dSYM
install_dsym( ) {
local source = " $1 "
warn_missing_arch = ${ 2 :- true }
if [ -r " $source " ] ; then
# Copy the dSYM into the targets temp dir.
echo "rsync --delete -av " ${ RSYNC_PROTECT_TMP_FILES [@] } " --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \" ${ source } \" \" ${ DERIVED_FILES_DIR } \" "
rsync --delete -av " ${ RSYNC_PROTECT_TMP_FILES [@] } " --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" " ${ source } " " ${ DERIVED_FILES_DIR } "
local basename
basename = " $( basename -s .dSYM " $source " ) "
binary_name = " $( ls " $source /Contents/Resources/DWARF " ) "
binary = " ${ DERIVED_FILES_DIR } / ${ basename } .dSYM/Contents/Resources/DWARF/ ${ binary_name } "
# Strip invalid architectures from the dSYM.
if [ [ " $( file " $binary " ) " = = *"Mach-O " *"dSYM companion" * ] ] ; then
strip_invalid_archs " $binary " " $warn_missing_arch "
fi
if [ [ $STRIP_BINARY_RETVAL = = 0 ] ] ; then
# Move the stripped file into its final destination.
echo "rsync --delete -av " ${ RSYNC_PROTECT_TMP_FILES [@] } " --links --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \" ${ DERIVED_FILES_DIR } / ${ basename } .framework.dSYM\" \" ${ DWARF_DSYM_FOLDER_PATH } \" "
rsync --delete -av " ${ RSYNC_PROTECT_TMP_FILES [@] } " --links --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" " ${ DERIVED_FILES_DIR } / ${ basename } .dSYM " " ${ DWARF_DSYM_FOLDER_PATH } "
else
# The dSYM was not stripped at all, in this case touch a fake folder so the input/output paths from Xcode do not reexecute this script because the file is missing.
2023-03-01 15:00:27 -06:00
mkdir -p " ${ DWARF_DSYM_FOLDER_PATH } "
2020-12-03 16:33:40 -06:00
touch " ${ DWARF_DSYM_FOLDER_PATH } / ${ basename } .dSYM "
fi
fi
}
# Copies the bcsymbolmap files of a vendored framework
install_bcsymbolmap( ) {
local bcsymbolmap_path = " $1 "
local destination = " ${ BUILT_PRODUCTS_DIR } "
echo "rsync --delete -av " ${ RSYNC_PROTECT_TMP_FILES [@] } " --filter " - CVS/" --filter " - .svn/" --filter " - .git/" --filter " - .hg/" --filter " - Headers" --filter " - PrivateHeaders" --filter " - Modules" " ${ bcsymbolmap_path } " " ${ destination } ""
rsync --delete -av " ${ RSYNC_PROTECT_TMP_FILES [@] } " --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" " ${ bcsymbolmap_path } " " ${ destination } "
}
install_dsym " ${ PODS_ROOT } /Sparkle/Sparkle.framework.dSYM "