DISTRHO Plugin Framework
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

194 lines
7.3KB

  1. #!/bin/bash
  2. # the realpath function is not available on some systems
  3. if ! which realpath &>/dev/null; then
  4. function realpath() {
  5. [[ $1 = /* ]] && echo "$1" || echo "$PWD/${1#./}"
  6. }
  7. fi
  8. set -e
  9. DPF_UTILS_DIR="$(dirname $(realpath ${0}))"
  10. if [ -d bin ]; then
  11. cd bin
  12. elif [ -d build/bin ]; then
  13. cd build/bin
  14. else
  15. echo "Please run this script from the root folder"
  16. exit
  17. fi
  18. if [ -n "${MACOS_APP_CERTIFICATE}" ] && [ -n "${MACOS_INSTALLER_CERTIFICATE}" ] && [ -n "${MACOS_CERTIFICATE_PASSWORD}" ]; then
  19. security create-keychain -p "" $(pwd)/keychain.db
  20. security unlock-keychain -p "" $(pwd)/keychain.db
  21. echo -n "${MACOS_APP_CERTIFICATE}" | base64 --decode -o cert.p12
  22. security import cert.p12 -P "${MACOS_CERTIFICATE_PASSWORD}" -A -t cert -f pkcs12 -k $(pwd)/keychain.db
  23. echo -n "${MACOS_INSTALLER_CERTIFICATE}" | base64 --decode -o cert.p12
  24. security import cert.p12 -P "${MACOS_CERTIFICATE_PASSWORD}" -A -t cert -f pkcs12 -k $(pwd)/keychain.db
  25. rm cert.p12
  26. # security set-key-partition-list -S apple-tool:,apple: -k "" $(pwd)/keychain.db
  27. security list-keychain -d user -s $(pwd)/keychain.db
  28. export MACOS_APP_DEV_ID="$(security find-identity -v $(pwd)/keychain.db | grep 'Developer ID Application:' | head -n 1 | cut -d' ' -f 5-99 | sed 's/\"//g')"
  29. export MACOS_INSTALLER_DEV_ID="$(security find-identity -v $(pwd)/keychain.db | grep 'Developer ID Installer:' | head -n 1 | cut -d' ' -f 5-99 | sed 's/\"//g')"
  30. fi
  31. # can be overridden by environment variables
  32. MACOS_PKG_LICENSE_FILE=${MACOS_PKG_LICENSE_FILE:=""}
  33. MACOS_PKG_NAME=${MACOS_PKG_NAME:="$(basename $(git rev-parse --show-toplevel))"}
  34. MACOS_PKG_SNAME=${MACOS_PKG_SNAME:="$(echo ${MACOS_PKG_NAME} | tr -d ' ' | tr '/' '-')"}
  35. MACOS_PKG_SYMBOL=${MACOS_PKG_SYMBOL:="studio.kx.distrho.plugins.${MACOS_PKG_SNAME}"}
  36. MACOS_PKG_WELCOME_TXT=${MACOS_PKG_WELCOME_TXT:=${DPF_UTILS_DIR}/plugin.pkg/welcome.txt.in}
  37. # backwards compat
  38. if [ -n "${WELCOME_TXT}" ]; then
  39. MACOS_PKG_WELCOME_TXT="${WELCOME_TXT}"
  40. fi
  41. SKIP_START="<!--"
  42. SKIP_END="-->"
  43. if [ -n "${MACOS_INSTALLER_DEV_ID}" ]; then
  44. PKG_SIGN_ARGS=(--sign "${MACOS_INSTALLER_DEV_ID}")
  45. fi
  46. rm -rf pkg
  47. mkdir pkg
  48. if [ -z "${MACOS_PKG_LICENSE_FILE}" ]; then
  49. SKIP_LICENSE_START="${SKIP_START}"
  50. SKIP_LICENSE_END="${SKIP_END}"
  51. fi
  52. ENABLE_AU=$(find . -maxdepth 1 -name '*.component' -print -quit | grep -q '.component' && echo 1 || echo)
  53. if [ -n "${ENABLE_AU}" ]; then
  54. mkdir pkg/au
  55. cp -RL *.component pkg/au/
  56. [ -n "${MACOS_APP_DEV_ID}" ] && codesign -s "${MACOS_APP_DEV_ID}" --deep --force --verbose --option=runtime pkg/au/*.component
  57. pkgbuild \
  58. --identifier "${MACOS_PKG_SYMBOL}-components" \
  59. --install-location "/Library/Audio/Plug-Ins/Components/" \
  60. --root "${PWD}/pkg/au/" \
  61. "${PKG_SIGN_ARGS[@]}" \
  62. ../dpf-${MACOS_PKG_SNAME}-components.pkg
  63. else
  64. SKIP_AU_START="${SKIP_START}"
  65. SKIP_AU_END="${SKIP_END}"
  66. fi
  67. ENABLE_CLAP=$(find . -maxdepth 1 -name '*.clap' -print -quit | grep -q '.clap' && echo 1 || echo)
  68. if [ -n "${ENABLE_CLAP}" ]; then
  69. mkdir pkg/clap
  70. cp -RL *.clap pkg/clap/
  71. [ -n "${MACOS_APP_DEV_ID}" ] && codesign -s "${MACOS_APP_DEV_ID}" --deep --force --verbose --option=runtime pkg/clap/*.clap
  72. pkgbuild \
  73. --identifier "${MACOS_PKG_SYMBOL}-clapbundles" \
  74. --install-location "/Library/Audio/Plug-Ins/CLAP/" \
  75. --root "${PWD}/pkg/clap/" \
  76. "${PKG_SIGN_ARGS[@]}" \
  77. ../dpf-${MACOS_PKG_SNAME}-clapbundles.pkg
  78. else
  79. SKIP_CLAP_START="${SKIP_START}"
  80. SKIP_CLAP_END="${SKIP_END}"
  81. fi
  82. ENABLE_LV2=$(find . -maxdepth 1 -name '*.lv2' -print -quit | grep -q '.lv2' && echo 1 || echo)
  83. if [ -n "${ENABLE_LV2}" ]; then
  84. mkdir pkg/lv2
  85. cp -RL *.lv2 pkg/lv2/
  86. [ -n "${MACOS_APP_DEV_ID}" ] && codesign -s "${MACOS_APP_DEV_ID}" --force --verbose --option=runtime $(find pkg/lv2/*.lv2/* -type f | grep -v "^.*\.\(html\|ttl\)$")
  87. pkgbuild \
  88. --identifier "${MACOS_PKG_SYMBOL}-lv2bundles" \
  89. --install-location "/Library/Audio/Plug-Ins/LV2/" \
  90. --root "${PWD}/pkg/lv2/" \
  91. "${PKG_SIGN_ARGS[@]}" \
  92. ../dpf-${MACOS_PKG_SNAME}-lv2bundles.pkg
  93. else
  94. SKIP_LV2_START="${SKIP_START}"
  95. SKIP_LV2_END="${SKIP_END}"
  96. fi
  97. ENABLE_VST2=$(find . -maxdepth 1 -name '*.vst' -print -quit | grep -q '.vst' && echo 1 || echo)
  98. if [ -n "${ENABLE_VST2}" ]; then
  99. mkdir pkg/vst2
  100. cp -RL *.vst pkg/vst2/
  101. [ -n "${MACOS_APP_DEV_ID}" ] && codesign -s "${MACOS_APP_DEV_ID}" --deep --force --verbose --option=runtime pkg/vst2/*.vst
  102. pkgbuild \
  103. --identifier "${MACOS_PKG_SYMBOL}-vst2bundles" \
  104. --install-location "/Library/Audio/Plug-Ins/VST/" \
  105. --root "${PWD}/pkg/vst2/" \
  106. "${PKG_SIGN_ARGS[@]}" \
  107. ../dpf-${MACOS_PKG_SNAME}-vst2bundles.pkg
  108. else
  109. SKIP_VST2_START="${SKIP_START}"
  110. SKIP_VST2_END="${SKIP_END}"
  111. fi
  112. ENABLE_VST3=$(find . -maxdepth 1 -name '*.vst3' -print -quit | grep -q '.vst3' && echo 1 || echo)
  113. if [ -n "${ENABLE_VST3}" ]; then
  114. mkdir pkg/vst3
  115. cp -RL *.vst3 pkg/vst3/
  116. [ -n "${MACOS_APP_DEV_ID}" ] && codesign -s "${MACOS_APP_DEV_ID}" --deep --force --verbose --option=runtime pkg/vst3/*.vst3
  117. pkgbuild \
  118. --identifier "${MACOS_PKG_SYMBOL}-vst3bundles" \
  119. --install-location "/Library/Audio/Plug-Ins/VST3/" \
  120. --root "${PWD}/pkg/vst3/" \
  121. "${PKG_SIGN_ARGS[@]}" \
  122. ../dpf-${MACOS_PKG_SNAME}-vst3bundles.pkg
  123. else
  124. SKIP_VST3_START="${SKIP_START}"
  125. SKIP_VST3_END="${SKIP_END}"
  126. fi
  127. cd ..
  128. mkdir -p build
  129. sed -e "s|@name@|${MACOS_PKG_NAME}|" "${MACOS_PKG_WELCOME_TXT}" > build/welcome.txt
  130. sed -e "s|@builddir@|${PWD}/build|" \
  131. -e "s|@skip_license_start@|${SKIP_LICENSE_START}|" \
  132. -e "s|@skip_au_start@|${SKIP_AU_START}|" \
  133. -e "s|@skip_clap_start@|${SKIP_CLAP_START}|" \
  134. -e "s|@skip_lv2_start@|${SKIP_LV2_START}|" \
  135. -e "s|@skip_vst2_start@|${SKIP_VST2_START}|" \
  136. -e "s|@skip_vst3_start@|${SKIP_VST3_START}|" \
  137. -e "s|@skip_license_end@|${SKIP_LICENSE_END}|" \
  138. -e "s|@skip_au_end@|${SKIP_AU_END}|" \
  139. -e "s|@skip_clap_end@|${SKIP_CLAP_END}|" \
  140. -e "s|@skip_lv2_end@|${SKIP_LV2_END}|" \
  141. -e "s|@skip_vst2_end@|${SKIP_VST2_END}|" \
  142. -e "s|@skip_vst3_end@|${SKIP_VST3_END}|" \
  143. -e "s|@license_file@|${MACOS_PKG_LICENSE_FILE}|" \
  144. -e "s|@name@|${MACOS_PKG_NAME}|g" \
  145. -e "s|@sname@|${MACOS_PKG_SNAME}|g" \
  146. -e "s|@symbol@|${MACOS_PKG_SYMBOL}|g" \
  147. ${DPF_UTILS_DIR}/plugin.pkg/package.xml.in > build/package.xml
  148. productbuild \
  149. --distribution build/package.xml \
  150. --identifier "${MACOS_PKG_SYMBOL}" \
  151. --package-path "${PWD}" \
  152. --version 0 \
  153. "${PKG_SIGN_ARGS[@]}" \
  154. ${MACOS_PKG_SNAME}-macOS.pkg
  155. if [ -n "${MACOS_NOTARIZATION_USER}" ] && [ -n "${MACOS_NOTARIZATION_PASS}" ] && [ -n "${MACOS_NOTARIZATION_TEAM}" ]; then
  156. # Notarize using credentials
  157. xcrun notarytool submit ${MACOS_PKG_SNAME}-macOS.pkg \
  158. --apple-id ${MACOS_NOTARIZATION_USER} \
  159. --password ${MACOS_NOTARIZATION_PASS} \
  160. --team-id ${MACOS_NOTARIZATION_TEAM} \
  161. --wait
  162. xcrun stapler staple ${MACOS_PKG_SNAME}-macOS.pkg
  163. elif [ -n "${MACOS_KEYCHAIN_PROFILE}" ]; then
  164. # Notarize using keychain profile
  165. xcrun notarytool submit ${MACOS_PKG_SNAME}-macOS.pkg \
  166. --keychain-profile ${MACOS_KEYCHAIN_PROFILE} \
  167. --wait
  168. xcrun stapler staple ${MACOS_PKG_SNAME}-macOS.pkg
  169. fi
  170. # To get logs of your notarization note the notarization id (of the form `00000000-0000-0000-0000-000000000000`)
  171. # and use either your credentials or keychain profile:
  172. # xcrun notarytool log --keychain-profile ${MACOS_KEYCHAIN_PROFILE} ${NOTARIZATION_ID}