makeinstaller-mac.sh (7706B)
1 #!/bin/bash 2 3 # IPlug2 project macOS installer build script, using pkgbuild and productbuild 4 # based on script for SURGE https://github.com/surge-synthesizer/surge 5 6 # Documentation for pkgbuild and productbuild: https://developer.apple.com/library/archive/documentation/DeveloperTools/Reference/DistributionDefinitionRef/Chapters/Distribution_XML_Ref.html 7 8 # preflight check 9 10 if [[ ! -d build-mac ]] 11 then 12 echo "You must run this script from the project directory!" 13 exit 1 14 fi 15 16 # version 17 if [ "$PLUGIN_VERSION" != "" ]; then 18 VERSION="$PLUGIN_VERSION" 19 elif [ "$1" != "" ]; then 20 VERSION="$1" 21 fi 22 23 if [ "$VERSION" == "" ]; then 24 echo "You must specify the version you are packaging as the first argument!" 25 echo "eg: makeinstaller-mac.sh 1.0.6" 26 exit 1 27 fi 28 29 PRODUCT_NAME=NeuralAmpModeler 30 31 # locations 32 PRODUCTS="build-mac" 33 34 VST2="${PRODUCT_NAME}.vst" 35 VST3="${PRODUCT_NAME}.vst3" 36 AU="${PRODUCT_NAME}.component" 37 APP="${PRODUCT_NAME}.app" 38 AAX="${PRODUCT_NAME}.aaxplugin" 39 40 RSRCS="~/Music/${PRODUCT_NAME}/Resources" 41 42 OUTPUT_BASE_FILENAME="${PRODUCT_NAME} Installer.pkg" 43 44 TARGET_DIR="./build-mac/installer" 45 PKG_DIR=${TARGET_DIR}/pkgs 46 47 if [[ ! -d ${TARGET_DIR} ]]; then 48 mkdir ${TARGET_DIR} 49 fi 50 51 if [[ ! -d ${PKG_DIR} ]]; then 52 mkdir ${PKG_DIR} 53 fi 54 55 build_flavor() 56 { 57 TMPDIR=${TARGET_DIR}/tmp 58 flavor=$1 59 flavorprod=$2 60 ident=$3 61 loc=$4 62 63 echo --- BUILDING ${PRODUCT_NAME}_${flavor}.pkg --- 64 65 mkdir -p $TMPDIR 66 cp -R -L $PRODUCTS/$flavorprod $TMPDIR 67 68 pkgbuild --root $TMPDIR --identifier $ident --version $VERSION --install-location $loc ${PKG_DIR}/${PRODUCT_NAME}_${flavor}.pkg #|| exit 1 69 70 rm -r $TMPDIR 71 } 72 73 # try to build VST2 package 74 if [[ -d $PRODUCTS/$VST2 ]]; then 75 build_flavor "VST2" $VST2 "com.StevenAtkinson.vst2.pkg.${PRODUCT_NAME}" "/Library/Audio/Plug-Ins/VST" 76 fi 77 78 # # try to build VST3 package 79 if [[ -d $PRODUCTS/$VST3 ]]; then 80 build_flavor "VST3" $VST3 "com.StevenAtkinson.vst3.pkg.${PRODUCT_NAME}" "/Library/Audio/Plug-Ins/VST3" 81 fi 82 83 # # try to build AU package 84 if [[ -d $PRODUCTS/$AU ]]; then 85 build_flavor "AU" $AU "com.StevenAtkinson.au.pkg.${PRODUCT_NAME}" "/Library/Audio/Plug-Ins/Components" 86 fi 87 88 # # try to build AAX package 89 if [[ -d $PRODUCTS/$AAX ]]; then 90 build_flavor "AAX" $AAX "com.StevenAtkinson.aax.pkg.${PRODUCT_NAME}" ""/Library/Application Support/Avid/Audio/Plug-Ins"" 91 fi 92 93 # try to build App package 94 if [[ -d $PRODUCTS/$APP ]]; then 95 build_flavor "APP" $APP "com.StevenAtkinson.app.pkg.${PRODUCT_NAME}" "/Applications" 96 fi 97 98 # write build info to resources folder 99 100 # echo "Version: ${VERSION}" > "$RSRCS/BuildInfo.txt" 101 # echo "Packaged on: $(date "+%Y-%m-%d %H:%M:%S")" >> "$RSRCS/BuildInfo.txt" 102 # echo "On host: $(hostname)" >> "$RSRCS/BuildInfo.txt" 103 # echo "Commit: $(git rev-parse HEAD)" >> "$RSRCS/BuildInfo.txt" 104 105 # build resources package 106 # --scripts ResourcesPackageScript 107 # pkgbuild --root "$RSRCS" --identifier "com.StevenAtkinson.resources.pkg.${PRODUCT_NAME}" --version $VERSION --install-location "/tmp/${PRODUCT_NAME}" ${PRODUCT_NAME}_RES.pkg 108 109 # remove build info from resource folder 110 # rm "$RSRCS/BuildInfo.txt" 111 112 # create distribution.xml 113 114 if [[ -d $PRODUCTS/$VST2 ]]; then 115 VST2_PKG_REF="<pkg-ref id=\"com.StevenAtkinson.vst2.pkg.${PRODUCT_NAME}\"/>" 116 VST2_CHOICE="<line choice=\"com.StevenAtkinson.vst2.pkg.${PRODUCT_NAME}\"/>" 117 VST2_CHOICE_DEF="<choice id=\"com.StevenAtkinson.vst2.pkg.${PRODUCT_NAME}\" visible=\"true\" start_selected=\"true\" title=\"VST2 Plug-in\"><pkg-ref id=\"com.StevenAtkinson.vst2.pkg.${PRODUCT_NAME}\"/></choice><pkg-ref id=\"com.StevenAtkinson.vst2.pkg.${PRODUCT_NAME}\" version=\"${VERSION}\" onConclusion=\"none\">${PRODUCT_NAME}_VST2.pkg</pkg-ref>" 118 fi 119 if [[ -d $PRODUCTS/$VST3 ]]; then 120 VST3_PKG_REF="<pkg-ref id=\"com.StevenAtkinson.vst3.pkg.${PRODUCT_NAME}\"/>" 121 VST3_CHOICE="<line choice=\"com.StevenAtkinson.vst3.pkg.${PRODUCT_NAME}\"/>" 122 VST3_CHOICE_DEF="<choice id=\"com.StevenAtkinson.vst3.pkg.${PRODUCT_NAME}\" visible=\"true\" start_selected=\"true\" title=\"VST3 Plug-in\"><pkg-ref id=\"com.StevenAtkinson.vst3.pkg.${PRODUCT_NAME}\"/></choice><pkg-ref id=\"com.StevenAtkinson.vst3.pkg.${PRODUCT_NAME}\" version=\"${VERSION}\" onConclusion=\"none\">${PRODUCT_NAME}_VST3.pkg</pkg-ref>" 123 fi 124 if [[ -d $PRODUCTS/$AU ]]; then 125 AU_PKG_REF="<pkg-ref id=\"com.StevenAtkinson.au.pkg.${PRODUCT_NAME}\"/>" 126 AU_CHOICE="<line choice=\"com.StevenAtkinson.au.pkg.${PRODUCT_NAME}\"/>" 127 AU_CHOICE_DEF="<choice id=\"com.StevenAtkinson.au.pkg.${PRODUCT_NAME}\" visible=\"true\" start_selected=\"true\" title=\"Audio Unit (v2) Plug-in\"><pkg-ref id=\"com.StevenAtkinson.au.pkg.${PRODUCT_NAME}\"/></choice><pkg-ref id=\"com.StevenAtkinson.au.pkg.${PRODUCT_NAME}\" version=\"${VERSION}\" onConclusion=\"none\">${PRODUCT_NAME}_AU.pkg</pkg-ref>" 128 fi 129 if [[ -d $PRODUCTS/$AAX ]]; then 130 AAX_PKG_REF="<pkg-ref id=\"com.StevenAtkinson.aax.pkg.${PRODUCT_NAME}\"/>" 131 AAX_CHOICE="<line choice=\"com.StevenAtkinson.aax.pkg.${PRODUCT_NAME}\"/>" 132 AAX_CHOICE_DEF="<choice id=\"com.StevenAtkinson.aax.pkg.${PRODUCT_NAME}\" visible=\"true\" start_selected=\"true\" title=\"AAX Plug-in\"><pkg-ref id=\"com.StevenAtkinson.aax.pkg.${PRODUCT_NAME}\"/></choice><pkg-ref id=\"com.StevenAtkinson.aax.pkg.${PRODUCT_NAME}\" version=\"${VERSION}\" onConclusion=\"none\">${PRODUCT_NAME}_AAX.pkg</pkg-ref>" 133 fi 134 if [[ -d $PRODUCTS/$APP ]]; then 135 APP_PKG_REF="<pkg-ref id=\"com.StevenAtkinson.app.pkg.${PRODUCT_NAME}\"/>" 136 APP_CHOICE="<line choice=\"com.StevenAtkinson.app.pkg.${PRODUCT_NAME}\"/>" 137 APP_CHOICE_DEF="<choice id=\"com.StevenAtkinson.app.pkg.${PRODUCT_NAME}\" visible=\"true\" start_selected=\"true\" title=\"Stand-alone App\"><pkg-ref id=\"com.StevenAtkinson.app.pkg.${PRODUCT_NAME}\"/></choice><pkg-ref id=\"com.StevenAtkinson.app.pkg.${PRODUCT_NAME}\" version=\"${VERSION}\" onConclusion=\"none\">${PRODUCT_NAME}_APP.pkg</pkg-ref>" 138 fi 139 140 # if [[ -d $PRODUCTS/$RES ]]; then 141 # RES_PKG_REF="<pkg-ref id="com.StevenAtkinson.resources.pkg.${PRODUCT_NAME}"/>' 142 # RES_CHOICE="<line choice="com.StevenAtkinson.resources.pkg.${PRODUCT_NAME}"/>' 143 # RES_CHOICE_DEF="<choice id=\"com.StevenAtkinson.resources.pkg.${PRODUCT_NAME}\" visible=\"true\" enabled=\"false\" selected=\"true\" title=\"Shared Resources\"><pkg-ref id=\"com.StevenAtkinson.resources.pkg.${PRODUCT_NAME}\"/></choice><pkg-ref id=\"com.StevenAtkinson.resources.pkg.${PRODUCT_NAME}\" version=\"${VERSION}\" onConclusion=\"none\">${PRODUCT_NAME}_RES.pkg</pkg-ref>" 144 # fi 145 146 cat > ${TARGET_DIR}/distribution.xml << XMLEND 147 <?xml version="1.0" encoding="utf-8"?> 148 <installer-gui-script minSpecVersion="1"> 149 <title>${PRODUCT_NAME} ${VERSION}</title> 150 <license file="license.rtf" mime-type="application/rtf"/> 151 <readme file="readme-mac.rtf" mime-type="application/rtf"/> 152 <welcome file="intro.rtf" mime-type="application/rtf"/> 153 <background file="${PRODUCT_NAME}-installer-bg.png" alignment="topleft" scaling="none"/> 154 ${VST2_PKG_REF} 155 ${VST3_PKG_REF} 156 ${AU_PKG_REF} 157 ${AAX_PKG_REF} 158 ${APP_PKG_REF} 159 ${RES_PKG_REF} 160 <options require-scripts="false" customize="always" hostArchitectures="arm64,x86_64"/> 161 <choices-outline> 162 ${VST2_CHOICE} 163 ${VST3_CHOICE} 164 ${AU_CHOICE} 165 ${AAX_CHOICE} 166 ${APP_CHOICE} 167 ${RES_CHOICE} 168 </choices-outline> 169 ${VST2_CHOICE_DEF} 170 ${VST3_CHOICE_DEF} 171 ${AU_CHOICE_DEF} 172 ${AAX_CHOICE_DEF} 173 ${APP_CHOICE_DEF} 174 ${RES_CHOICE_DEF} 175 </installer-gui-script> 176 XMLEND 177 178 # build installation bundle 179 # --resources . 180 181 TEMP_RESOURCES=$(mktemp -d) 182 cp ./installer/license.rtf ${TEMP_RESOURCES} 183 productbuild --resources ${TEMP_RESOURCES} --distribution ${TARGET_DIR}/distribution.xml --package-path ${PKG_DIR} "${TARGET_DIR}/$OUTPUT_BASE_FILENAME" 184 185 rm ${TARGET_DIR}/distribution.xml 186 rm -r $PKG_DIR