diff --git a/Makefile.am b/Makefile.am
index 224905dff919bad07d49bbe4fd600645e68f09f7..431b72a2ae045d60103ec88eaa7ec4eb58218aec 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -82,7 +82,8 @@ opus_custom_demo_SOURCES = celt/opus_custom_demo.c
 opus_custom_demo_LDADD = libopus.la -lm
 endif
 
-EXTRA_DIST = opus.pc.in \
+EXTRA_DIST = version.mk \
+	     opus.pc.in \
              opus-uninstalled.pc.in \
              opus.sln \
              celt/celt.vcxproj \
diff --git a/configure.ac b/configure.ac
index bcb71dae257f7099856b1f67cf1a4d8bb3f7c5e0..ce0451b42104228a105c39746c21f4e5006e88f4 100644
--- a/configure.ac
+++ b/configure.ac
@@ -7,12 +7,25 @@ AM_CONFIG_HEADER([config.h])
 dnl enable silent rules on automake 1.11 and later
 m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])])
 
-OPUS_MAJOR_VERSION=1
-OPUS_MINOR_VERSION=0
-OPUS_MICRO_VERSION=1
-OPUS_EXTRA_VERSION=-rc2
+# Read our default version string from version.mk.
+# Please update this file for releases.
+AC_MSG_CHECKING([version.mk])
+MK_VERSION=$(awk 'BEGIN { FS = "=" }
+                  /OPUS_VERSION/ { ver = $2}
+                  END {
+                        gsub(/"/, "", ver);
+                        gsub(/^ /, "", ver);
+                        gsub(/ $/, "", ver);
+                        print ver;
+                  }' $srcdir/version.mk)
+if test -z "$MK_VERSION"; then
+  AC_MSG_RESULT([no])
+else
+  AC_MSG_RESULT([$MK_VERSION])
+  OPUS_VERSION="$MK_VERSION"
+fi
 
-OPUS_VERSION="$OPUS_MAJOR_VERSION.$OPUS_MINOR_VERSION.$OPUS_MICRO_VERSION$OPUS_EXTRA_VERSION"
+# Override with the git version, if available.
 AC_MSG_CHECKING([git revision])
 GIT_VERSION=$(git describe --tags --match 'v*' 2>/dev/null | sed 's/^v//')
 if test -z "$GIT_VERSION"; then
@@ -22,21 +35,20 @@ else
   OPUS_VERSION="$GIT_VERSION"
 fi
 
+# Use 'unknown' if all else fails.
+if test -z "$OPUS_VERSION"; then
+  OPUS_VERSION="unknown"
+fi
+
 # For automake.
-VERSION=$OPUS_VERSION
 PACKAGE=opus
+VERSION=$OPUS_VERSION
 
-# For our version string.
+# For config.h.
 AC_SUBST(OPUS_VERSION)
 
-# For config.h
-AC_DEFINE_UNQUOTED(OPUS_VERSION, "${OPUS_VERSION}", [Complete version string])
-AC_DEFINE_UNQUOTED(OPUS_MAJOR_VERSION, ${OPUS_MAJOR_VERSION}, [Version major])
-AC_DEFINE_UNQUOTED(OPUS_MINOR_VERSION, ${OPUS_MINOR_VERSION}, [Version minor])
-AC_DEFINE_UNQUOTED(OPUS_MICRO_VERSION, ${OPUS_MICRO_VERSION}, [Version micro])
-AC_DEFINE_UNQUOTED(OPUS_EXTRA_VERSION, "${OPUS_EXTRA_VERSION}", [Version extra])
-
 # For libtool.
+dnl Please update these for releases.
 OPUS_LT_CURRENT=2
 OPUS_LT_REVISION=0
 OPUS_LT_AGE=2
diff --git a/version.mk b/version.mk
new file mode 100644
index 0000000000000000000000000000000000000000..fdd68fe0fe2f10bb02ef1072a06fd771566629c2
--- /dev/null
+++ b/version.mk
@@ -0,0 +1,2 @@
+# static version string; update manually every release.
+OPUS_VERSION = "1.0.1-rc2"