From 50467d329670d268832baa1ecde779c231745d43 Mon Sep 17 00:00:00 2001 From: git Date: Thu, 2 Jan 2025 02:30:24 +0400 Subject: [PATCH] Added engine versioning --- .gitignore | 3 +++ CMakeLists.txt | 3 +++ cmake/gitver.cmake | 48 +++++++++++++++++++++++++++++++++++ src/game.cc | 7 +++-- src/mainmenu.cc | 14 +++++++++- src/platform/git_version.h.in | 9 +++++++ src/version.h | 1 - 7 files changed, 81 insertions(+), 4 deletions(-) create mode 100644 cmake/gitver.cmake create mode 100644 src/platform/git_version.h.in diff --git a/.gitignore b/.gitignore index a239a9a4..2ad6baeb 100644 --- a/.gitignore +++ b/.gitignore @@ -391,3 +391,6 @@ FodyWeavers.xsd # CMake /out /build + +# versioning header +src/platform/git_version.h \ No newline at end of file diff --git a/CMakeLists.txt b/CMakeLists.txt index 5db57e46..496cbf01 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -26,6 +26,9 @@ else() add_executable(${EXECUTABLE_NAME} WIN32 MACOSX_BUNDLE) endif() +# Git Info +include("cmake/gitver.cmake") + target_sources(${EXECUTABLE_NAME} PUBLIC "src/actions.cc" "src/actions.h" diff --git a/cmake/gitver.cmake b/cmake/gitver.cmake new file mode 100644 index 00000000..3325a029 --- /dev/null +++ b/cmake/gitver.cmake @@ -0,0 +1,48 @@ +# Get author name +execute_process( + COMMAND git log -1 --pretty=format:%an + WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} + OUTPUT_VARIABLE AUTHOR + OUTPUT_STRIP_TRAILING_WHITESPACE +) + +# Get current branch +execute_process( + COMMAND git branch --show-current + WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} + OUTPUT_VARIABLE BRANCH + OUTPUT_STRIP_TRAILING_WHITESPACE +) + +# Get hash of the latest commit +execute_process( + COMMAND git log --pretty=format:%h -n 1 + WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} + OUTPUT_VARIABLE HASH + OUTPUT_STRIP_TRAILING_WHITESPACE +) + +# Get last tag +execute_process( + COMMAND git describe --tags --abbrev=0 + WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} + OUTPUT_VARIABLE LATEST_TAG + OUTPUT_STRIP_TRAILING_WHITESPACE +) + +# Get date of the latest commit +execute_process( + COMMAND git log -1 --date=format:"%b %d %Y %H:%M:%S" --pretty=format:%cd + WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} + OUTPUT_VARIABLE DATE + OUTPUT_STRIP_TRAILING_WHITESPACE +) + +# Define a variable for CI_BUILD +set(CI_BUILD 0) + +# Create git_version.h file +configure_file( + ${CMAKE_CURRENT_SOURCE_DIR}/src/platform/git_version.h.in + ${CMAKE_CURRENT_SOURCE_DIR}/src/platform/git_version.h +) diff --git a/src/game.cc b/src/game.cc index d7743375..646bf389 100644 --- a/src/game.cc +++ b/src/game.cc @@ -67,6 +67,7 @@ #include "window_manager.h" #include "window_manager_private.h" #include "worldmap.h" +#include "platform/git_version.h" namespace fallout { @@ -88,7 +89,8 @@ static void showSplash(); static char _aGame_0[] = "game\\"; // 0x5020B8 -static char _aDec11199816543[] = VERSION_BUILD_TIME; +static char _aBuildDate[] = _BUILD_DATE; +static char _aBuildHash[] = _BUILD_HASH; // 0x5186B4 static bool gGameUiDisabled = false; @@ -927,7 +929,8 @@ int gameHandleKey(int eventCode, bool isInCombatMode) char version[VERSION_MAX]; versionGetVersion(version, sizeof(version)); displayMonitorAddMessage(version); - displayMonitorAddMessage(_aDec11199816543); + displayMonitorAddMessage(_aBuildHash); + displayMonitorAddMessage(_aBuildDate); } break; case KEY_ARROW_LEFT: diff --git a/src/mainmenu.cc b/src/mainmenu.cc index bc0bf0a6..2b67cbcf 100644 --- a/src/mainmenu.cc +++ b/src/mainmenu.cc @@ -18,6 +18,8 @@ #include "version.h" #include "window_manager.h" +#include "platform/git_version.h" + namespace fallout { #define MAIN_MENU_WINDOW_WIDTH 640 @@ -152,7 +154,17 @@ int mainMenuWindowInit() char version[VERSION_MAX]; versionGetVersion(version, sizeof(version)); len = fontGetStringWidth(version); - windowDrawText(gMainMenuWindow, version, 0, 615 - len, 460, fontSettings | 0x06000000); + windowDrawText(gMainMenuWindow, version, 0, 615 - len, 440, fontSettings | 0x06000000); + + char commitHash[VERSION_MAX] = "BUILD HASH: "; + strcat(commitHash, _BUILD_HASH); + len = fontGetStringWidth(commitHash); + windowDrawText(gMainMenuWindow, commitHash, 0, 615 - len, 450, fontSettings | 0x06000000); + + char buildDate[VERSION_MAX] = "DATE: "; + strcat(buildDate, _BUILD_DATE); + len = fontGetStringWidth(buildDate); + windowDrawText(gMainMenuWindow, buildDate, 0, 615 - len, 460, fontSettings | 0x06000000); // menuup.frm fid = buildFid(OBJ_TYPE_INTERFACE, 299, 0, 0, 0); diff --git a/src/platform/git_version.h.in b/src/platform/git_version.h.in new file mode 100644 index 00000000..99f8728f --- /dev/null +++ b/src/platform/git_version.h.in @@ -0,0 +1,9 @@ +#pragma once + +#define _BUILD_AUTHOR "@AUTHOR@" +#define _BUILD_BRANCH "@BRANCH@" +#define _BUILD_HASH "@HASH@" +#define _BUILD_VER "@LATEST_TAG@" +#define _BUILD_DATE @DATE@ + +#define CI_BUILD @CI_BUILD@ diff --git a/src/version.h b/src/version.h index ee48469e..5e0e0537 100644 --- a/src/version.h +++ b/src/version.h @@ -11,7 +11,6 @@ namespace fallout { #define VERSION_MAJOR (1) #define VERSION_MINOR (2) #define VERSION_RELEASE ('R') -#define VERSION_BUILD_TIME ("Dec 11 1998 16:54:30") void versionGetVersion(char* dest, size_t size);