NeuralAmpModelerPlugin

Plugin for Neural Amp Modeler
Log | Files | Refs | Submodules | README | LICENSE

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