Cross-Platform build scripts for audio plugins
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.

221 lines
6.5KB

  1. #!/bin/bash
  2. set -e
  3. cd $(dirname ${0})
  4. PAWPAW_ROOT="${PWD}"
  5. # ---------------------------------------------------------------------------------------------------------------------
  6. target="${1}"
  7. if [ -z "${target}" ]; then
  8. echo "usage: ${0} <target> <plugin1> ..."
  9. exit 1
  10. fi
  11. shift
  12. # TODO check that bootstrap.sh has been run
  13. # ---------------------------------------------------------------------------------------------------------------------
  14. # source setup code
  15. source setup/check_target.sh
  16. source setup/env.sh
  17. source setup/functions.sh
  18. source setup/versions.sh
  19. # ---------------------------------------------------------------------------------------------------------------------
  20. # check for depedencies
  21. if [ -z "${jq}" ]; then
  22. echo "missing 'jq' program, cannot continue!"
  23. exit 2
  24. fi
  25. # ---------------------------------------------------------------------------------------------------------------------
  26. LV2DIR="${PAWPAW_PREFIX}/lib/lv2"
  27. if [ "${WIN32}" -eq 1 ] && [ -n "${EXE_WRAPPER}" ] && [ ! -d "${WINEPREFIX}" ]; then
  28. wineboot -u
  29. fi
  30. function validate_lv2_bundles() {
  31. local lv2bundles=(${@})
  32. rm -rf /tmp/pawpaw-plugin-check
  33. mkdir /tmp/pawpaw-plugin-check
  34. # FIXME lv2 validation fails on base64 with newlines
  35. cp -r "${LV2DIR}/${lv2bundles[0]}" /tmp/pawpaw-plugin-check/
  36. #for lv2bundle in ${lv2bundles[@]}; do
  37. # cp -r "${LV2DIR}/${lv2bundle}" /tmp/pawpaw-plugin-check/
  38. #done
  39. env LANG=C LV2_PATH="${LV2DIR}" PATH="${PAWPAW_PREFIX}/bin:${PATH}" WINEDEBUG=-all \
  40. APP_EXT="${APP_EXT}" EXE_WRAPPER="${EXE_WRAPPER}" PAWPAW_PREFIX="${PAWPAW_PREFIX}" \
  41. "${PAWPAW_PREFIX}/bin/lv2_validate" \
  42. "${LV2DIR}/kx-*/*.ttl" \
  43. "${LV2DIR}/mod.lv2/*.ttl" \
  44. "${LV2DIR}/modgui.lv2/*.ttl" \
  45. "/tmp/pawpaw-plugin-check/*/*.ttl" 1>&2
  46. local ret=$?
  47. if [ "${CROSS_COMPILING}" -eq 0 ] || [ -n "${EXE_WRAPPER}" ]; then
  48. env LANG=C LV2_PATH=/tmp/pawpaw-plugin-check WINEDEBUG=-all \
  49. ${EXE_WRAPPER} \
  50. "${PAWPAW_PREFIX}/bin/lv2ls${APP_EXT}" | tr -d '\r'
  51. fi
  52. rm -rf /tmp/pawpaw-plugin-check
  53. return ${ret}
  54. }
  55. function validate_lv2_plugin() {
  56. local lv2plugin="${1}"
  57. local carlaenv="CARLA_BRIDGE_DUMMY=1"
  58. if [ "${WIN64}" -eq 1 ]; then
  59. carlaenv+=" CARLA_BRIDGE_TESTING=win64"
  60. elif [ "${WIN32}" -eq 1 ]; then
  61. carlaenv+=" CARLA_BRIDGE_TESTING=win32"
  62. else
  63. carlaenv+=" CARLA_BRIDGE_TESTING=native"
  64. fi
  65. env LANG=C LV2_PATH="${LV2DIR}" WINEDEBUG=-all ${carlaenv} \
  66. "${PAWPAW_PREFIX}/bin/carla-single" lv2 "${lv2plugin}" 1>/dev/null
  67. if [ "${MACOS_UNIVERSAL}" -eq 1 ]; then
  68. env LANG=C LV2_PATH="${LV2DIR}" ${carlaenv} \
  69. arch -arch x86_64 "${PAWPAW_PREFIX}/bin/carla-single" lv2 "${lv2plugin}" 1>/dev/null
  70. fi
  71. }
  72. # ---------------------------------------------------------------------------------------------------------------------
  73. exitcode=0
  74. for plugin in ${@}; do
  75. pfile="${PAWPAW_ROOT}/plugins/${plugin}.json"
  76. if [ ! -e "${pfile}" ]; then
  77. echo "Requested plugin file '${pfile}' does not exist"
  78. exit 2
  79. fi
  80. name=$(${jq} -crM .name ${pfile})
  81. version=$(${jq} -crM .version ${pfile})
  82. buildtype=$(${jq} -crM .buildtype ${pfile})
  83. dlbaseurl=$(${jq} -crM .dlbaseurl ${pfile})
  84. lv2bundles=($(${jq} -crM .lv2bundles[] ${pfile}))
  85. # optional args
  86. buildargs=$(echo -e $(${jq} -ecrM .buildargs ${pfile} || echo '\n\n') | tail -n 1)
  87. dlext=$(echo -e $(${jq} -ecrM .dlext ${pfile} || echo '\n\n') | tail -n 1)
  88. dlmethod=$(echo -e $(${jq} -ecrM .dlmethod ${pfile} || echo '\n\n') | tail -n 1)
  89. dlname=$(echo -e $(${jq} -ecrM .dlname ${pfile} || echo '\n\n') | tail -n 1)
  90. combinedbundles=$(echo -e $(${jq} -ecrM .combinedbundles ${pfile} || echo '\n\n') | tail -n 1)
  91. download "${name}" "${version}" "${dlbaseurl}" "${dlext}" "${dlmethod}" "${dlname}"
  92. case ${buildtype} in
  93. "autoconf")
  94. build_autoconf "${name}" "${version}" "${buildargs}"
  95. ;;
  96. "conf")
  97. build_conf "${name}" "${version}" "${buildargs}"
  98. ;;
  99. "cmake")
  100. build_cmake "${name}" "${version}" "${buildargs}"
  101. ;;
  102. "make")
  103. build_make "${name}" "${version}" "${buildargs}"
  104. ;;
  105. "meson")
  106. build_meson "${name}" "${version}" "${buildargs}"
  107. ;;
  108. "waf")
  109. build_waf "${name}" "${version}" "${buildargs}"
  110. ;;
  111. esac
  112. # check if plugin needs validation
  113. pkgdir="${PAWPAW_BUILDDIR}/${name}-${version}"
  114. if [ -f "${pkgdir}/.stamp_verified" ]; then
  115. continue
  116. fi
  117. # cannot run validation on certain setups
  118. if [ "${CROSS_COMPILING}" -eq 1 ] && [ -z "${EXE_WRAPPER}" ]; then
  119. continue
  120. fi
  121. # validate all bundles
  122. validationfail=0
  123. if [ "${combinedbundles}" = "true" ]; then
  124. lv2bundle=${lv2bundles[0]}
  125. echo -n "Validating ${lv2bundle}... "
  126. if [ ! -f "${LV2DIR}/${lv2bundle}/manifest.ttl" ]; then
  127. echo "manifest.ttl file missing"
  128. exitcode=1
  129. validationfail=1
  130. continue
  131. fi
  132. echo
  133. # lv2 metadata validation
  134. lv2plugins=($(validate_lv2_bundles ${lv2bundles[@]}))
  135. # lv2 plugin count
  136. echo "Found ${#lv2plugins[@]} plugin(s)"
  137. # real host test
  138. for lv2plugin in ${lv2plugins[@]}; do
  139. echo -n "Verifying ${lv2plugin}... "
  140. validate_lv2_plugin ${lv2plugin}
  141. echo "ok"
  142. done
  143. else
  144. for lv2bundle in ${lv2bundles[@]}; do
  145. echo -n "Validating ${lv2bundle}... "
  146. if [ ! -f "${LV2DIR}/${lv2bundle}/manifest.ttl" ]; then
  147. echo "manifest.ttl file missing"
  148. exitcode=1
  149. validationfail=1
  150. continue
  151. fi
  152. echo
  153. # lv2 metadata validation
  154. lv2plugins=($(validate_lv2_bundles "${lv2bundle}"))
  155. # lv2 plugin count
  156. echo "Found ${#lv2plugins[@]} plugin(s)"
  157. # real host test
  158. for lv2plugin in ${lv2plugins[@]}; do
  159. echo -n "Verifying ${lv2plugin}... "
  160. validate_lv2_plugin ${lv2plugin}
  161. echo "ok"
  162. done
  163. done
  164. fi
  165. if [ "${validationfail}" -eq 0 ]; then
  166. touch "${pkgdir}/.stamp_verified"
  167. fi
  168. done
  169. exit ${exitcode}
  170. # ---------------------------------------------------------------------------------------------------------------------