setup_macos 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127
  1. autoload -Uz log_error log_status log_info mkcd
  2. if (( ! ${+commands[curl]} )) {
  3. log_error 'curl not found. Please install curl.'
  4. return 2
  5. }
  6. if (( ! ${+commands[jq]} )) {
  7. log_error 'jq not found. Please install jq.'
  8. return 2
  9. }
  10. if (( ! ${+project_root} )) {
  11. log_error "'project_root' not set. Please set before running ${0}."
  12. return 2
  13. }
  14. if (( ! ${+target} )) {
  15. log_error "'target' not set. Please set before running ${0}."
  16. return 2
  17. }
  18. local -a curl_opts=()
  19. if (( ! ${+CI} )) {
  20. curl_opts+=(--progress-bar)
  21. } else {
  22. curl_opts+=(--show-error --silent)
  23. }
  24. curl_opts+=(--location -O ${@})
  25. pushd ${project_root}
  26. local _qt_version
  27. local _deployment_target
  28. read -r _qt_version _deployment_target <<< \
  29. "$(jq -r --arg target "${target}" \
  30. '.platformConfig[$target] | { qtVersion, deploymentTarget } | join (" ")' \
  31. ${buildspec_file})"
  32. typeset -g QT_VERSION=${_qt_version}
  33. typeset -g DEPLOYMENT_TARGET=${_deployment_target}
  34. if (( ! (${skips[(Ie)all]} + ${skips[(Ie)deps]}) )) {
  35. mkdir -p ${project_root:h}/obs-build-dependencies
  36. local dependency
  37. local deps_version
  38. local deps_baseurl
  39. local deps_label
  40. local deps_hash
  41. local _filename
  42. local _url
  43. local _target
  44. local artifact_checksum
  45. for dependency ('prebuilt' "qt${QT_VERSION}") {
  46. IFS=';' read -r deps_version deps_baseurl deps_label deps_hash <<< \
  47. "$(jq -r --arg dependency "${dependency}" --arg target "${target}" \
  48. '.dependencies[$dependency] | {version, baseUrl, "label", "hash": .hashes[$target]} | join(";")' \
  49. ${buildspec_file})"
  50. if [[ -z "${deps_version}" ]] {
  51. log_error "No ${dependency} spec found in ${buildspec_file}."
  52. return 2
  53. }
  54. log_info "Setting up ${deps_label}..."
  55. pushd ${project_root:h}/obs-build-dependencies
  56. case ${dependency} {
  57. prebuilt)
  58. _filename="macos-deps-${deps_version}-${target##*-}.tar.xz"
  59. _url="${deps_baseurl}/${deps_version}/${_filename}"
  60. _target="plugin-deps-${deps_version}-qt${QT_VERSION}-${target##*-}"
  61. typeset -g OBS_DEPS_VERSION=${deps_version}
  62. ;;
  63. qt*)
  64. if (( ${+CI} )) {
  65. _filename="macos-deps-qt${QT_VERSION}-${deps_version}-universal.tar.xz"
  66. deps_hash="$(jq -r --arg dependency "${dependency}" \
  67. '.dependencies[$dependency].hashes["macos-universal"]' \
  68. ${buildspec_file})"
  69. } else {
  70. _filename="macos-deps-qt${QT_VERSION}-${deps_version}-${target##*-}.tar.xz"
  71. }
  72. _url="${deps_baseurl}/${deps_version}/${_filename}"
  73. _target="plugin-deps-${deps_version}-qt${QT_VERSION}-${target##*-}"
  74. ;;
  75. }
  76. if [[ ! -f ${_filename} ]] {
  77. log_debug "Running curl ${curl_opts} ${_url}"
  78. curl ${curl_opts} ${_url} && \
  79. log_status "Downloaded ${deps_label} for ${target}."
  80. } else {
  81. log_status "Found downloaded ${deps_label}"
  82. }
  83. read -r artifact_checksum _ <<< "$(sha256sum ${_filename})"
  84. if [[ ${deps_hash} != ${artifact_checksum} ]] {
  85. log_error "Checksum of downloaded ${deps_label} does not match specification.
  86. Expected : ${deps_hash}
  87. Actual : ${artifact_checksum}"
  88. return 2
  89. }
  90. log_status "Checksum of downloaded ${deps_label} matches."
  91. if (( ! (${skips[(Ie)all]} + ${skips[(Ie)unpack]}) )) {
  92. mkdir -p ${_target} && pushd ${_target}
  93. XZ_OPT=-T0 tar -xzf ../${_filename} && log_status "${deps_label} extracted."
  94. popd
  95. }
  96. }
  97. popd
  98. pushd ${project_root:h}/obs-build-dependencies
  99. xattr -r -d com.apple.quarantine *
  100. log_status 'Removed quarantine flag from downloaded dependencies...'
  101. popd
  102. } else {
  103. local deps_version
  104. read -r deps_version <<< \
  105. "$(jq -r '.dependencies.prebuilt.version' ${buildspec_file})"
  106. typeset -g OBS_DEPS_VERSION=${deps_version}
  107. }