1#!/bin/zsh 2 3set -e 4 5if (( ${#@} != 2 )); then 6 echo Usage: mkvver newver codename 7 exit 1 8fi 9if [[ ! -f src/common/os.h ]]; then 10 echo Wrong directory. 11 exit 1 12fi 13 14VERSION=$(awk '-F[' '/AC_INIT/ { gsub("].*", "", $3); print $3 }' configure.ac) 15if [[ -z $VERSION ]]; then 16 echo Could not find the old version. 17 exit 1 18fi 19 20export FROM=$VERSION 21export TO=$1 22export CODENAME=$2 23export MANDATE="`date '+%Y-%m-%d'`" 24 25function update_debian_changelog { 26 export LC_TIME=en_US.UTF-8 27 tmp=$(mktemp) 28 date=$(date '+%a, %d %b %Y %H:%M:%S %z') 29 ubuntu=$(awk "-F'" '/define_debian_ubuntu.*ubuntu/ { ubuntu=$4 } END { print ubuntu }' /home/mosu/prog/video/support/rake.d/debian_ubuntu_linuxmint.rb) 30 cat > ${tmp} <<EOF 31mkvtoolnix (${TO}-0~bunkus01) ${ubuntu}; urgency=low 32 33 * New version. 34 35 -- Moritz Bunkus <moritz@bunkus.org> ${date} 36 37EOF 38 cat packaging/debian/changelog >> ${tmp} 39 cat ${tmp} > packaging/debian/changelog 40 rm -f ${tmp} 41} 42 43function update_news { 44 local date=$(LC_TIME=en_US.UTF-8 date '+%Y-%m-%d') 45 local to_replace="# Version ?" 46 local message="# Version ${TO} \"${CODENAME}\" ${date}" 47 48 grep -q -F ${message} NEWS.md && return 0 49 50 if ! grep -qF '# Version ?' NEWS.md; then 51 echo "NEWS.md is missing the 'unknown version' line." 52 exit 1 53 fi 54 55 perl -pi -e "s{^# Version \\?\$}{${message}}" NEWS.md 56} 57 58function update_spec { 59 local date="$(date '+%a %b %e %Y')" 60 perl -pi -e " 61 s/^Version:.*/Version: ${TO}/; 62 s/^Release:.*/Release: 1/; 63 s/^(\\%changelog.*)/\${1} 64* ${date} Moritz Bunkus <moritz\\@bunkus.org> ${TO}-1 65- New version 66/" packaging/centos-fedora-opensuse/mkvtoolnix.spec 67} 68 69function update_files { 70 TO_NSI=$TO 71 while ! echo "$TO_NSI" | grep -q '\..*\.' ; do 72 TO_NSI="${TO_NSI}.0" 73 done 74 75 perl -pi -e 's/^(AC_INIT.*\[)'$FROM'(\].*)/${1}'$TO'${2}/' configure.ac 76 perl -pi -e 's/^MKVToolNix '$FROM'$/MKVToolNix '$TO'/' README.md 77 perl -pi -e 's/^Building MKVToolNix [0-9.]+/Building MKVToolNix '$TO'/i' Building.for.Windows.md 78 perl -pi -e 's/define PRODUCT_VERSION .*/define PRODUCT_VERSION \"'$TO_NSI'\"/' packaging/windows/installer/mkvtoolnix.nsi 79 perl -pi -e "s{^constexpr.*VERSIONNAME.*}{constexpr auto VERSIONNAME = \"${CODENAME}\";}" src/common/version.cpp 80} 81 82function update_docs { 83 TO_VERINF="$( echo $TO | sed -e 's/\./, /g')" 84 while ! echo "$TO_VERINF" | grep -q ',.*,.*,' ; do 85 TO_VERINF="${TO_VERINF}, 0" 86 done 87 88 setopt nullglob 89 perl -pi -e "s/FILEVERSION.*/FILEVERSION ${TO_VERINF}/; 90 s/PRODUCTVERSION.*/PRODUCTVERSION ${TO_VERINF}/; 91 s/VALUE.*FileVersion.*/VALUE \"FileVersion\", \"${TO}\"/; 92 s/VALUE.*ProductVersion.*/VALUE \"ProductVersion\", \"${TO}\"/;" \ 93 src/*/*.rc 94 perl -pi -e "s/<!ENTITY version \".*\">/<!ENTITY version \"${TO}\">/; s/<!ENTITY date \".*\">/<!ENTITY date \"${MANDATE}\">/;" doc/man/**/*.xml 95 perl -pi -e 's/^msg(id|str) "'${FROM}'"/msg$1 "'${TO}'"/' doc/man/po4a/po/*.{po,pot} 96 97 drake 98} 99 100function update_appstream_metainfo { 101 perl -pi -e "s{<releases>\\n}{<releases>\\n <release version=\"${TO}\" date=\"${MANDATE}\"></release>\\n}" \ 102 share/metainfo/org.bunkus.mkvtoolnix-gui.appdata.xml 103} 104 105update_news 106update_files 107update_debian_changelog 108update_spec 109update_appstream_metainfo 110update_docs 111 112echo "Done setting the new version." 113