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