diff --git a/m4/fp_setup_project_version.m4 b/m4/fp_setup_project_version.m4
index 4ec3c51b0c8a99a8cc8ecfdc953b332d9c030ed8..031e41480e43f01b75b669a3afd962b6b32981b7 100644
--- a/m4/fp_setup_project_version.m4
+++ b/m4/fp_setup_project_version.m4
@@ -2,6 +2,9 @@
 # ---------------------
 AC_DEFUN([FP_SETUP_PROJECT_VERSION],
 [
+    # number of version number components
+    NumVersionComponents="$(( $(echo "$PACKAGE_VERSION" | tr -cd . | wc -c) + 1 ))"
+
     if test "$RELEASE" = "NO"; then
         AC_MSG_CHECKING([for GHC version date])
         if test -f VERSION_DATE; then
@@ -62,6 +65,22 @@ AC_DEFUN([FP_SETUP_PROJECT_VERSION],
     VERSION_MINOR=`echo $VERSION_TMP | sed 's/^\(@<:@^.@:>@*\)\(\.\{0,1\}\(.*\)\)$/\1'/`
     ProjectPatchLevel=`echo $VERSION_TMP | sed 's/^\(@<:@^.@:>@*\)\(\.\{0,1\}\(.*\)\)$/\3'/`
 
+    # Verify that the version number has three components if a release version
+    # (that is, even minor version number).
+    AC_MSG_CHECKING([package version validity])
+    StableRelease="$(( ($VERSION_MINOR & 1) == 0))"
+    if test "$StableRelease" = "1" -a "$NumVersionComponents" != "3"; then
+        AC_MSG_ERROR([Stable (even) version numbers must have three components])
+    elif test "$StableRelease" = "0" -a "$NumVersionComponents" != "2"; then
+        AC_MSG_ERROR([Unstable (odd) version numbers must have two components])
+    elif test "$RELEASE" = "YES" -a "$StableRelease" = "0"; then
+        AC_MSG_ERROR([RELEASE=YES despite having an unstable odd minor version number])
+    elif test "$StableRelease" = "1"; then
+        AC_MSG_RESULT([okay stable branch version])
+    else
+        AC_MSG_RESULT([okay unstable branch version])
+    fi
+
     # Calculate project version as an integer, using 2 digits for minor version
     case $VERSION_MINOR in
       ?) ProjectVersionInt=${VERSION_MAJOR}0${VERSION_MINOR} ;;