diff --git a/src/syncterm/updvers.sh b/src/syncterm/updvers.sh
new file mode 100755
index 0000000000000000000000000000000000000000..b97569c709652de701a93a513f4d745529724f29
--- /dev/null
+++ b/src/syncterm/updvers.sh
@@ -0,0 +1,77 @@
+#!/bin/sh
+
+# Files that need to be updated:
+# CMakeLists.txt - CMake packaging... obsolete, but present
+# Info.plist - macOS information
+# Manual.txt - Ugh.
+# dpkg-control.in - Debian Package information
+# syncterm.c - syncterm_version variable
+# syncterm.rc - Windows information
+# syncterm.spec - RPM package information
+
+VERSTR=$1
+NUMERIC=${VERSTR%%[a-z]*}
+PATCH=${VERSTR##${NUMERIC}}
+case "${PATCH}" in
+a)
+	PATCHSTR=alpha
+	PATCHSEQ=0
+	ISREL=0
+	;;
+b)
+	PATCHSTR=beta
+	PATCHSEQ=1
+	ISREL=0
+	;;
+rc*)
+	PATCHSTR=${PATCH}
+	PATCHSEQ=$((1+${PATCH##rc}))
+	ISREL=0
+	;;
+"")
+	PATCHSTR=release
+	PATCHSEQ=0
+	ISREL=1
+	;;
+*)
+	echo Invalid patch value
+	exit
+	;;
+esac
+MAJOR=${NUMERIC%%.*}
+MINOR=${NUMERIC##*.}
+
+echo "VERSTR:   ${VERSTR}"
+echo "NUMERIC:  ${NUMERIC}"
+echo "MAJOR:    ${MAJOR}"
+echo "MINOR:    ${MINOR}"
+echo "PATCH:    ${PATCH}"
+echo "PATCHSEQ: ${PATCHSEQ}"
+echo "PATCHSTR: ${PATCHSTR}"
+echo "ISREL:    ${ISREL}"
+
+# CMakeLists.txt
+perl -pi -e "s/(CPACK_PACKAGE_VERSION_MAJOR )[0-9]+/\$1.'${MAJOR}'/ge" CMakeLists.txt
+perl -pi -e "s/(CPACK_PACKAGE_VERSION_MINOR )[0-9]+/\$1.'${MINOR}'/ge" CMakeLists.txt
+perl -pi -e "s/(CPACK_PACKAGE_VERSION_PATCH )[^)]+/\$1.'${PATCHSTR}'/ge" CMakeLists.txt
+perl -pi -e "s/(CPACK_PACKAGE_VERSION )[^)]+/\$1.'${VERSTR}'/ge" CMakeLists.txt
+
+# Info.plist
+perl -pgi -e "s|(<key>CFBundleShortVersionString</key>.+?<string>)[^<]+(?=</string>)|\$1.'${VERSTR}'|ges" Info.plist
+perl -pgi -e "s|(<key>CFBundleVersion</key>.+?<string>)[^<]+(?=</string>)|\$1.'${NUMERIC}'|ges" Info.plist
+
+# Manual.txt
+perl -pi -e "s/(?<=SyncTERM v)[0-9.a-z]+/${NUMERIC}/g" Manual.txt
+
+# dpkg-control.in
+perl -pi -e "s/(?<=^Version: ).*$/${VERSTR}/g" dpkg-control.in
+
+# syncterm.c
+perl -pi -e "s/(?<=^const char \\*syncterm_version = \"SyncTERM )[^\"]+/${VERSTR}/g" syncterm.c
+
+# syncterm.rc
+perl -pi -e "s/^(\s+(PRODUCTVERSION|FILEVERSION)\s+).*$/\$1.'${MAJOR},${MINOR},${ISREL},${PATCHSEQ}'/e" syncterm.rc
+perl -pi -e "s/^(\s+(VALUE \"(File|Product)Version\",)\s+\").*$/\$1.'${VERSTR}\\0\"'/e" syncterm.rc
+
+# syncterm.spec
+perl -pi -e "s/(?<=^Version: ).*$/${VERSTR}/g" dpkg-control.in