nixpkgs/pkgs/os-specific/darwin/xcode-project-check-hook/setup-hook.sh
Randy Eckenrode 121149836e
darwin: add xcodeProjectCheckHook
This hook is used by source releases that build with Meson to assert
that the Xcode project has not changed since the previous release. This
is meant to be a check to force those updating source release packages
to make sure they have incorporated any changes that were made to the
Xcode project into the Meson build.
2024-10-10 01:07:39 -04:00

56 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)