diff --git a/packaging/macos/update_qt_specs.sh b/packaging/macos/update_qt_specs.sh
new file mode 100755
index 000000000..ad5ffaa80
--- /dev/null
+++ b/packaging/macos/update_qt_specs.sh
@@ -0,0 +1,51 @@
+#!/bin/zsh
+
+set -e
+
+QT_VERSION=$1
+QT_BASE_URL=https://download.qt.io/official_releases/qt/
+
+TMPF=$(mktemp)
+
+trap "rm -f ${TMPF}" EXIT
+
+if [[ -z ${QT_VERSION} ]]; then
+ print -- "Determining latest Qt version"
+
+ curl --silent ${QT_BASE_URL} | \
+ grep -E ' ${TMPF}
+
+ QT_VERSION=$(<${TMPF})
+
+ curl --silent ${QT_BASE_URL}/${QT_VERSION}/ | \
+ grep -E ' ${TMPF}
+
+ QT_VERSION=$(<${TMPF})
+fi
+
+print -- "Qt version to update to: ${QT_VERSION}"
+
+QT_URL=${QT_BASE_URL}${QT_VERSION%.*}/${QT_VERSION}/submodules/
+
+print -- "Determining submodule hashes"
+
+# spec_qtbase=(qtbase-everywhere-src-5.13.1.tar.xz https://download.qt.io/official_releases/qt/5.13/5.13.1/submodules/qtbase-everywhere-src-5.13.1.tar.xz 20fbc7efa54ff7db9552a7a2cdf9047b80253c1933c834f35b0bc5c1ae021195)
+
+for SUBMODULE in qtbase qtimageformats qtmultimedia qtsvg qttools qttranslations; do
+ FILE_NAME=${SUBMODULE}-everywhere-src-${QT_VERSION}.tar.xz
+ FILE_URL=${QT_URL}${FILE_NAME}
+
+ curl --silent ${FILE_URL}.mirrorlist | \
+ grep SHA-256 | \
+ sed -e 's/.*//' -e 's/<\/tt>.*//' > ${TMPF}
+
+ FILE_SHA256=$(<${TMPF})
+
+ echo "spec_${SUBMODULE}=(${FILE_NAME} ${FILE_URL} ${FILE_SHA256})"
+done