55 lines
1.8 KiB
Bash
55 lines
1.8 KiB
Bash
# Verify that the Xcode project has not changed unexpectedly. This is only useful for source releases that are
|
|
# being built with other build systems (e.g., Meson) instead of xcbuild.
|
|
|
|
verifyXcodeProjectHash() {
|
|
printHashInstructions() {
|
|
echo '1. Set xcodeHash to an empty string: `xcodeHash = "";`'
|
|
echo '2. Build the derivation and wait for it to fail with a hash mismatch'
|
|
echo '3. Copy the "got: sha256-..." value back into the xcodeHash field'
|
|
echo ' You should have: xcodeHash = "sha256-XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX=";'
|
|
}
|
|
|
|
if [ -z "${xcodeHash-}" ]; then
|
|
echo "error: xcodeHash missing"
|
|
echo
|
|
echo "To fix the issue:"
|
|
printHashInstructions
|
|
exit 1
|
|
fi
|
|
|
|
if [ -z "${xcodeProject-}" ]; then
|
|
echo "error: xcodeProject missing"
|
|
echo
|
|
echo "To fix the issue: Set xcodeProject to the name of the project"
|
|
exit 1
|
|
fi
|
|
|
|
local xcodeHashArr
|
|
readarray -t -d - xcodeHashArr < <(printf "$xcodeHash")
|
|
|
|
local hashType=${xcodeHashArr[0]}
|
|
local expectedHash=${xcodeHashArr[1]}
|
|
|
|
if [ -z "$hashType" ] || [ -z "$expectedHash" ]; then
|
|
echo "error: xcodeHash is in invalid format"
|
|
echo
|
|
echo "To fix the issue:"
|
|
printHashInstructions
|
|
exit 1
|
|
fi
|
|
|
|
local hash
|
|
hash=$(openssl "$hashType" -binary "$sourceRoot/$xcodeProject/project.pbxproj" | base64)
|
|
|
|
if [ "$hash" != "$expectedHash" ]; then
|
|
echo "error: hash mismatch in $xcodeProject/project.pbxproj"
|
|
echo " specified: $xcodeHash"
|
|
echo " got: $hashType-$hash"
|
|
echo
|
|
echo 'Upstream Xcode project has changed. Update `meson.build` with any changes, then update `xcodeHash`.'
|
|
printHashInstructions
|
|
exit 1
|
|
fi
|
|
}
|
|
|
|
postUnpackHooks+=(verifyXcodeProjectHash)
|