From 1757002ddbde9de4e4d503e85d7ffaac5ff84c6c Mon Sep 17 00:00:00 2001
From: James R <justsomejames2@gmail.com>
Date: Fri, 10 Jul 2020 22:20:33 -0700
Subject: [PATCH] Automate VERSION/SUBVERSION; move version related definitions
 to version.h

CMake support. Srb2win.rc still needs touchy, whatever.
---
 CMakeLists.txt |  6 +++++-
 src/d_main.c   | 18 ++++++++++++++++++
 src/doomdef.h  | 20 ++------------------
 src/version.h  | 12 ++++++++++++
 4 files changed, 37 insertions(+), 19 deletions(-)
 create mode 100644 src/version.h

diff --git a/CMakeLists.txt b/CMakeLists.txt
index e12b0d3453..25a44f0165 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -1,8 +1,12 @@
 cmake_minimum_required(VERSION 3.0)
+
+file(STRINGS src/version.h SRB2_VERSION)
+string(REGEX MATCH "[0-9]+\\.[0-9.]+" SRB2_VERSION ${SRB2_VERSION})
+
 # DO NOT CHANGE THIS SRB2 STRING! Some variable names depend on this string.
 # Version change is fine.
 project(SRB2
-	VERSION 2.2.6
+	VERSION ${SRB2_VERSION}
 	LANGUAGES C)
 
 if(${PROJECT_SOURCE_DIR} MATCHES ${PROJECT_BINARY_DIR})
diff --git a/src/d_main.c b/src/d_main.c
index 28570b9093..22875593cf 100644
--- a/src/d_main.c
+++ b/src/d_main.c
@@ -1142,6 +1142,21 @@ static inline void D_Titlebar(void)
 }
 #endif
 
+static void
+D_ConvertVersionNumbers (void)
+{
+	/* leave at defaults (0) under DEVELOP */
+#ifndef DEVELOP
+	int major;
+	int minor;
+
+	sscanf(SRB2VERSION, "%d.%d.%d", &major, &minor, &SUBVERSION);
+
+	/* this is stupid */
+	VERSION = ( major * 100 ) + minor;
+#endif
+}
+
 //
 // D_SRB2Main
 //
@@ -1152,6 +1167,9 @@ void D_SRB2Main(void)
 	INT32 pstartmap = 1;
 	boolean autostart = false;
 
+	/* break the version string into version numbers, for netplay */
+	D_ConvertVersionNumbers();
+
 	// Print GPL notice for our console users (Linux)
 	CONS_Printf(
 	"\n\nSonic Robo Blast 2\n"
diff --git a/src/doomdef.h b/src/doomdef.h
index 380adf781e..50e4b9b779 100644
--- a/src/doomdef.h
+++ b/src/doomdef.h
@@ -86,6 +86,7 @@
 // warning C4213: nonstandard extension used : cast on l-value
 
 
+#include "version.h"
 #include "doomtype.h"
 
 #include <stdarg.h>
@@ -135,17 +136,11 @@ extern char logfilename[1024];
 
 //#define DEVELOP // Disable this for release builds to remove excessive cheat commands and enable MD5 checking and stuff, all in one go. :3
 #ifdef DEVELOP
-#define VERSION    0 // Game version
-#define SUBVERSION 0 // more precise version number
 #define VERSIONSTRING "Development EXE"
-#define VERSIONSTRINGW L"Development EXE"
 // most interface strings are ignored in development mode.
 // we use comprevision and compbranch instead.
 #else
-#define VERSION    202 // Game version
-#define SUBVERSION 6  // more precise version number
-#define VERSIONSTRING "v2.2.6"
-#define VERSIONSTRINGW L"v2.2.6"
+#define VERSIONSTRING "v"SRB2VERSION
 // Hey! If you change this, add 1 to the MODVERSION below!
 // Otherwise we can't force updates!
 #endif
@@ -204,17 +199,6 @@ extern char logfilename[1024];
 // Will always resemble the versionstring, 205 = 2.0.5, 210 = 2.1, etc.
 #define CODEBASE 220
 
-// The Modification ID; must be obtained from a Master Server Admin ( https://mb.srb2.org/showgroups.php ).
-// DO NOT try to set this otherwise, or your modification will be unplayable through the Master Server.
-// "18" is the default mod ID for version 2.2
-#define MODID 18
-
-// The Modification Version, starting from 1. Do not follow your version string for this,
-// it's only for detection of the version the player is using so the MS can alert them of an update.
-// Only set it higher, not lower, obviously.
-// Note that we use this to help keep internal testing in check; this is why v2.2.0 is not version "1".
-#define MODVERSION 47
-
 // To version config.cfg, MAJOREXECVERSION is set equal to MODVERSION automatically.
 // Increment MINOREXECVERSION whenever a config change is needed that does not correspond
 // to an increment in MODVERSION. This might never happen in practice.
diff --git a/src/version.h b/src/version.h
new file mode 100644
index 0000000000..31cf85bdcd
--- /dev/null
+++ b/src/version.h
@@ -0,0 +1,12 @@
+#define SRB2VERSION "2.2.6"/* this must be the first line, for cmake !! */
+
+// The Modification ID; must be obtained from a Master Server Admin ( https://mb.srb2.org/showgroups.php ).
+// DO NOT try to set this otherwise, or your modification will be unplayable through the Master Server.
+// "18" is the default mod ID for version 2.2
+#define MODID 18
+
+// The Modification Version, starting from 1. Do not follow your version string for this,
+// it's only for detection of the version the player is using so the MS can alert them of an update.
+// Only set it higher, not lower, obviously.
+// Note that we use this to help keep internal testing in check; this is why v2.2.0 is not version "1".
+#define MODVERSION 47
-- 
GitLab