From 9b3e9082d39bf7b6fde6c4e6e8816b9611819142 Mon Sep 17 00:00:00 2001
From: Marek Roszko <mark.roszko@gmail.com>
Date: Sun, 23 Jan 2022 14:46:37 -0500
Subject: [PATCH] Add extraction of patch version to feed to resource defines

---
 .../BuildSteps/WriteVersionHeader.cmake       | 19 ++++++++++++-------
 1 file changed, 12 insertions(+), 7 deletions(-)

diff --git a/CMakeModules/BuildSteps/WriteVersionHeader.cmake b/CMakeModules/BuildSteps/WriteVersionHeader.cmake
index 200969f5c9..889d93c5a6 100644
--- a/CMakeModules/BuildSteps/WriteVersionHeader.cmake
+++ b/CMakeModules/BuildSteps/WriteVersionHeader.cmake
@@ -28,17 +28,21 @@ include( ${CMAKE_MODULE_PATH}/KiCadFullVersion.cmake )
 
 # Extract the major and minor build version as a string
 string( REGEX MATCH
-        "([0-9]+)\\.([0-9]+)\\..*"
-        KICAD_MAJOR_MINOR_VERSION
+        "([0-9]+)\\.([0-9]+)\\.([0-9]+).*"
+        KICAD_MAJOR_MINOR_PATCH_VERSION
         "${KICAD_SEMANTIC_VERSION}"
     )
 
-if( CMAKE_MATCH_COUNT EQUAL 2 )
+if( CMAKE_MATCH_COUNT EQUAL 3 )
     # Match slot 0 is the full string, so we want slots 1 & 2
     set( KICAD_MAJOR_MINOR_VERSION "${CMAKE_MATCH_1}.${CMAKE_MATCH_2}" )
     set( KICAD_MAJOR_MINOR_VERSION_TUPLE "{ ${CMAKE_MATCH_1}, ${CMAKE_MATCH_2} }" )
+
+    set( KICAD_MAJOR_MINOR_PATCH_VERSION "${CMAKE_MATCH_1}.${CMAKE_MATCH_2}.${CMAKE_MATCH_3}" )
+
     set( KICAD_MAJOR_VERSION "${CMAKE_MATCH_1}" )
     set( KICAD_MINOR_VERSION "${CMAKE_MATCH_2}" )
+    set( KICAD_PATCH_VERSION "${CMAKE_MATCH_3}" )
 
     if( KICAD_MINOR_VERSION STREQUAL "99" )
         set( KICAD_IS_NIGHTLY "1" )
@@ -46,12 +50,12 @@ if( CMAKE_MATCH_COUNT EQUAL 2 )
         set( KICAD_IS_NIGHTLY "0" )
     endif()
 
-    set( KICAD_WIN32_RC_FILEVER_STR "${CMAKE_MATCH_1}.${CMAKE_MATCH_2}.0.${KICAD_GIT_REV}\\0" )
-    set( KICAD_WIN32_RC_FILEVER     "${CMAKE_MATCH_1}, ${CMAKE_MATCH_2}, 0, ${KICAD_GIT_REV}" )
+    set( KICAD_WIN32_RC_FILEVER_STR "${CMAKE_MATCH_1}.${CMAKE_MATCH_2}.${CMAKE_MATCH_3}.${KICAD_GIT_REV}\\0" )
+    set( KICAD_WIN32_RC_FILEVER     "${CMAKE_MATCH_1}, ${CMAKE_MATCH_2}, ${CMAKE_MATCH_3}, ${KICAD_GIT_REV}" )
     set( KICAD_WIN32_RC_PRODVER_STR "${CMAKE_MATCH_1}.${CMAKE_MATCH_2}\\0" )
-    set( KICAD_WIN32_RC_PRODVER     "${CMAKE_MATCH_1}, ${CMAKE_MATCH_2}, 0, ${KICAD_GIT_REV}" )
+    set( KICAD_WIN32_RC_PRODVER     "${CMAKE_MATCH_1}, ${CMAKE_MATCH_2}, ${CMAKE_MATCH_3}, ${KICAD_GIT_REV}" )
 else()
-    message( FATAL_ERROR "Unable to extract major and minor version string" )
+    message( FATAL_ERROR "Unable to extract major, minor and patch version string" )
 endif()
 
 set( _wvh_new_version_text
@@ -67,6 +71,7 @@ set( _wvh_new_version_text
 #define KICAD_SEMANTIC_VERSION          \"${KICAD_SEMANTIC_VERSION}\"
 #define KICAD_MAJOR_VERSION             \"${KICAD_MAJOR_VERSION}\"
 #define KICAD_MINOR_VERSION             \"${KICAD_MINOR_VERSION}\"
+#define KICAD_PATCH_VERSION             \"${KICAD_PATCH_VERSION}\"
 #define KICAD_IS_NIGHTLY                ${KICAD_IS_NIGHTLY}
 #define KICAD_MAJOR_MINOR_VERSION       \"${KICAD_MAJOR_MINOR_VERSION}\"
 #define KICAD_MAJOR_MINOR_VERSION_TUPLE ${KICAD_MAJOR_MINOR_VERSION_TUPLE}