annotate deploy/osx/build-and-package.sh @ 64:0c94d3065ecd

Fix app signing; remove plugin signing from project files, as we now need to separate out the plugin build, plugin signing, and installer build phases on every platform
author Chris Cannam
date Tue, 11 Feb 2020 10:16:49 +0000
parents 3fd66c30eb28
children bf0fc15c3e21
rev   line source
Chris@62 1 #!/bin/bash
Chris@62 2
Chris@62 3 # Run this from the project root, without arguments, or with the
Chris@62 4 # single argument --no-notarization to skip the notarize step
Chris@62 5
Chris@62 6 set -e
Chris@62 7
Chris@62 8 notarize=yes
Chris@62 9 if [ "$1" = "--no-notarization" ]; then
Chris@62 10 notarize=no
Chris@62 11 elif [ -n "$1" ]; then
Chris@62 12 echo "Usage: $0 [--no-notarization]"
Chris@62 13 exit 2
Chris@62 14 fi
Chris@62 15
Chris@62 16 set -u
Chris@62 17
Chris@62 18 app="Vamp Plugin Pack Installer"
Chris@62 19 identity="Developer ID Application: Chris Cannam"
Chris@62 20
Chris@62 21 version=`perl -p -e 's/^[^"]*"([^"]*)".*$/$1/' version.h`
Chris@62 22
Chris@62 23 qmake=$(grep '^# Command: ' Makefile | awk '{ print $3; }')
Chris@62 24
Chris@62 25 echo "Proceed to rebuild, package, and sign version $version using"
Chris@62 26 echo -n "qmake path \"$qmake\" [Yn] ? "
Chris@62 27 read yn
Chris@62 28 case "$yn" in "") ;; [Yy]) ;; *) exit 3;; esac
Chris@62 29 echo "Proceeding"
Chris@62 30
Chris@62 31 source="$app.app"
Chris@62 32 volume="$app"-"$version"
Chris@62 33 target="$volume"/"$app".app
Chris@62 34 dmg="$volume".dmg
Chris@62 35
Chris@62 36 if [ -d "$volume" ]; then
Chris@62 37 echo "Target directory $volume already exists, not overwriting"
Chris@62 38 exit 2
Chris@62 39 fi
Chris@62 40
Chris@62 41 if [ -f "$dmg" ]; then
Chris@62 42 echo "Target disc image $dmg already exists, not overwriting"
Chris@62 43 exit 2
Chris@62 44 fi
Chris@62 45
Chris@62 46 if [ "$notarize" = no ]; then
Chris@62 47 echo
Chris@62 48 echo "Note: The --no-notarization flag is set: won't be submitting for notarization"
Chris@62 49 fi
Chris@62 50
Chris@62 51 rm -rf "$app.app"
Chris@62 52 rm -rf "$volume"
Chris@62 53 rm -f "$dmg"
Chris@62 54
Chris@62 55 ./repoint install
Chris@62 56 rm -rf .qmake.stash
Chris@62 57 "$qmake" -r
Chris@62 58 make clean
Chris@62 59 rm -rf out
Chris@62 60
Chris@62 61 echo
Chris@62 62 echo "Building plugins..."
Chris@62 63 make -j3 -f Makefile.plugins
Chris@62 64 echo "Done"
Chris@62 65
Chris@62 66 echo
Chris@62 67 echo "Signing plugins..."
Chris@62 68 codesign -s "$identity" -fv --timestamp --options runtime out/*.dylib
Chris@62 69 echo "Done"
Chris@62 70
Chris@62 71 if [ "$notarize" = no ]; then
Chris@62 72 echo
Chris@62 73 echo "The --no-notarization flag was set: not submitting for notarization"
Chris@62 74 else
Chris@62 75 echo
Chris@62 76 echo "Notarizing plugins..."
Chris@62 77 rm -f plugins.zip
Chris@62 78 ditto -c -k out plugins.zip
Chris@62 79 deploy/osx/notarize.sh plugins.zip
Chris@62 80 echo "Done"
Chris@62 81
Chris@62 82 ## No, it doesn't seem to be possible to pass a dylib to stapler
Chris@62 83 # echo
Chris@62 84 # echo "Stapling plugins..."
Chris@62 85 # xcrun stapler staple out/*.dylib
Chris@62 86 # echo "Done"
Chris@62 87 fi
Chris@62 88
Chris@62 89 echo
Chris@62 90 echo "Building installer..."
Chris@62 91 make -j3 -f Makefile.installer
Chris@62 92 echo "Done"
Chris@62 93
Chris@62 94 echo
Chris@62 95 echo "Deploying installer..."
Chris@62 96 deploy/osx/deploy.sh "$app" || exit 1
Chris@62 97 echo "Done"
Chris@62 98
Chris@62 99 echo
Chris@62 100 echo "Making target tree..."
Chris@62 101 mkdir "$volume" || exit 1
Chris@62 102
Chris@62 103 #cp README.md "$volume/README.txt"
Chris@62 104 #cp README.OSC "$volume/README-OSC.txt"
Chris@62 105 #cp COPYING "$volume/COPYING.txt"
Chris@62 106 #cp CHANGELOG "$volume/CHANGELOG.txt"
Chris@62 107 #cp CITATION "$volume/CITATION.txt"
Chris@62 108 cp -rp "$source" "$target"
Chris@62 109
Chris@62 110 # update file timestamps so as to make the build date apparent
Chris@62 111 find "$volume" -exec touch \{\} \;
Chris@62 112 echo "Done"
Chris@62 113
Chris@62 114 echo
Chris@62 115 echo "Signing installer..."
Chris@64 116 find "$target" -name \*.dylib -print | while read fr; do
Chris@64 117 codesign -s "$identity" -fv --deep --timestamp --options runtime "$fr"
Chris@64 118 done
Chris@64 119 codesign -s "$identity" -fv --deep --timestamp --options runtime "$target/Contents/MacOS/$app"
Chris@64 120 codesign -s "$identity" -fv --deep --timestamp --options runtime "$target"
Chris@62 121 echo "Done"
Chris@62 122
Chris@62 123 echo
Chris@62 124 echo "Making dmg..."
Chris@62 125 rm -f "$dmg"
Chris@62 126 hdiutil create -srcfolder "$volume" "$dmg" -volname "$volume" -fs HFS+ &&
Chris@62 127 rm -r "$volume"
Chris@62 128 echo "Done"
Chris@62 129
Chris@62 130 echo
Chris@62 131 echo "Signing dmg..."
Chris@62 132 codesign -s "$identity" -fv --timestamp "$dmg"
Chris@62 133 echo "Done"
Chris@62 134
Chris@62 135 if [ "$notarize" = no ]; then
Chris@62 136 echo
Chris@62 137 echo "The --no-notarization flag was set: not submitting for notarization"
Chris@62 138 else
Chris@62 139 echo
Chris@62 140 echo "Submitting disk image for notarization..."
Chris@62 141 deploy/osx/notarize.sh "$dmg"
Chris@62 142 echo "Done"
Chris@62 143
Chris@62 144 echo
Chris@62 145 echo "Stapling disk image..."
Chris@62 146 xcrun stapler staple "$dmg"
Chris@62 147 echo "Done"
Chris@62 148 fi
Chris@62 149
Chris@62 150 echo "Done"