From 87c7987157c0d7421145ebc4985452b59285ef00 Mon Sep 17 00:00:00 2001 From: xezon <4720891+xezon@users.noreply.github.com> Date: Tue, 15 Jul 2025 19:49:39 +0200 Subject: [PATCH] [GEN][ZH] Implement file info generation for Generals executables --- Generals/Code/Main/CMakeLists.txt | 82 +++++++++++++++++------------ Generals/Code/Main/RTS.RC | 5 +- Generals/Code/Main/Version.rc.in | 33 ++++++++++++ GeneralsMD/Code/Main/CMakeLists.txt | 67 +++++++++++++++-------- GeneralsMD/Code/Main/RTS.RC | 5 +- GeneralsMD/Code/Main/Version.rc.in | 33 ++++++++++++ 6 files changed, 168 insertions(+), 57 deletions(-) create mode 100644 Generals/Code/Main/Version.rc.in create mode 100644 GeneralsMD/Code/Main/Version.rc.in diff --git a/Generals/Code/Main/CMakeLists.txt b/Generals/Code/Main/CMakeLists.txt index 51ca97d5af..1b3a92ca24 100644 --- a/Generals/Code/Main/CMakeLists.txt +++ b/Generals/Code/Main/CMakeLists.txt @@ -1,10 +1,57 @@ +# Product version definitions +set(BUILD_USER "") +set(BUILD_LOCATION "") +set(PRODUCT_VERSION_MAJOR 1) +if (IS_VS6_BUILD) + set(PRODUCT_VERSION_MINOR 7) +else() + set(PRODUCT_VERSION_MINOR 8) +endif() +set(PRODUCT_VERSION_PATCH 0) +set(PRODUCT_VERSION_TWEAK 0) +set(PRODUCT_VERSION_STRING "${PRODUCT_VERSION_MAJOR}.${PRODUCT_VERSION_MINOR}.${PRODUCT_VERSION_PATCH}.${PRODUCT_VERSION_TWEAK}") +set(PRODUCT_NAME "Command & Conquer Generals") +set(FILE_VERSION_MAJOR ${PRODUCT_VERSION_MAJOR}) # TODO come up with a file version? +set(FILE_VERSION_MINOR ${PRODUCT_VERSION_MINOR}) +set(FILE_VERSION_PATCH ${PRODUCT_VERSION_PATCH}) +set(FILE_VERSION_TWEAK ${PRODUCT_VERSION_TWEAK}) +set(FILE_VERSION_STRING "${FILE_VERSION_MAJOR}.${FILE_VERSION_MINOR}.${FILE_VERSION_PATCH}.${FILE_VERSION_TWEAK}") +set(FILE_DESCRIPTION "Community Version") +set(FILE_NAME "GeneralsV") + +# TODO Originally referred to build host and user, replace with git info perhaps? +file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/GeneratedVersion.h +"#pragma once + +#define VERSION_LOCALBUILDNUM 0 +#define VERSION_BUILDUSER \"${BUILD_USER}\" +#define VERSION_BUILDLOC \"${BUILD_LOCATION}\" +" +) + +file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/BuildVersion.h +"#pragma once + +#define VERSION_MAJOR ${PRODUCT_VERSION_MAJOR} +#define VERSION_MINOR ${PRODUCT_VERSION_MINOR} +#define VERSION_BUILDNUM ${PRODUCT_VERSION_PATCH} +" +) + +# Configure Version rc file +configure_file(${CMAKE_CURRENT_SOURCE_DIR}/Version.rc.in + ${CMAKE_CURRENT_BINARY_DIR}/Version.rc) + + + add_executable(g_generals WIN32) # Use a binary name that doesn't conflict with original game. if("${CMAKE_SYSTEM}" MATCHES "Windows") - set_target_properties(g_generals PROPERTIES OUTPUT_NAME generalsv) + set_target_properties(g_generals PROPERTIES OUTPUT_NAME ${FILE_NAME}) else() - set_target_properties(g_generals PROPERTIES OUTPUT_NAME generalsv) + string(TOLOWER ${FILE_NAME} FILE_NAME_LOWER) + set_target_properties(g_generals PROPERTIES OUTPUT_NAME ${FILE_NAME_LOWER}) endif() target_link_libraries(g_generals PRIVATE @@ -24,37 +71,6 @@ target_link_libraries(g_generals PRIVATE winmm ) -# TODO Originally referred to build host and user, replace with git info perhaps? -file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/GeneratedVersion.h -"#pragma once - -#define VERSION_LOCALBUILDNUM 0 -#define VERSION_BUILDUSER \"\" -#define VERSION_BUILDLOC \"\" -" -) - -# Based on original binary values for these variables. -if (IS_VS6_BUILD) -file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/BuildVersion.h -"#pragma once - -#define VERSION_MAJOR 1 -#define VERSION_MINOR 7 -#define VERSION_BUILDNUM 601 -" -) -else() -file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/BuildVersion.h -"#pragma once - -#define VERSION_MAJOR 1 -#define VERSION_MINOR 8 -#define VERSION_BUILDNUM 601 -" -) -endif() - target_link_options(g_generals PRIVATE "/NODEFAULTLIB:libci.lib") target_include_directories(g_generals PRIVATE diff --git a/Generals/Code/Main/RTS.RC b/Generals/Code/Main/RTS.RC index b4e435f608..28499a01e2 100644 --- a/Generals/Code/Main/RTS.RC +++ b/Generals/Code/Main/RTS.RC @@ -1,3 +1,5 @@ +#include "version.rc" + //Microsoft Developer Studio generated resource script. // #include "resource.h" @@ -65,7 +67,8 @@ IDB_LOAD_SCREEN BITMAP DISCARDABLE "Install_Final.bmp" #endif // English (U.S.) resources ///////////////////////////////////////////////////////////////////////////// -// Add manifest to specify that the app is DPI aware and prevent forced scaling by the system +// TheSuperHackers @tweak Adds manifest to specify that the app is DPI aware +// and prevent forced scaling by the system. 1 24 "app.manifest" diff --git a/Generals/Code/Main/Version.rc.in b/Generals/Code/Main/Version.rc.in new file mode 100644 index 0000000000..8e23607fb0 --- /dev/null +++ b/Generals/Code/Main/Version.rc.in @@ -0,0 +1,33 @@ +#include + +VS_VERSION_INFO VERSIONINFO + FILEVERSION @FILE_VERSION_MAJOR@,@FILE_VERSION_MINOR@,@FILE_VERSION_PATCH@,@FILE_VERSION_TWEAK@ + PRODUCTVERSION @PRODUCT_VERSION_MAJOR@,@PRODUCT_VERSION_MINOR@,@PRODUCT_VERSION_PATCH@,@PRODUCT_VERSION_TWEAK@ + FILEFLAGSMASK 0x3fL +#if RTS_DEBUG + FILEFLAGS VS_FF_DEBUG +#else + FILEFLAGS 0x0L +#endif + FILEOS 0x40004L + FILETYPE 0x1L + FILESUBTYPE 0x0L + +BEGIN + BLOCK "StringFileInfo" + BEGIN + BLOCK "040904b0" + BEGIN + VALUE "FileDescription", "@FILE_DESCRIPTION@\0" + VALUE "FileVersion", "@FILE_VERSION_STRING@\0" + VALUE "ProductName", "@PRODUCT_NAME@\0" + VALUE "ProductVersion", "@PRODUCT_VERSION_STRING@\0" + VALUE "OriginalFilename", "@FILE_NAME@.exe\0" + VALUE "LegalCopyright", "@BUILD_USER@\0" + END + END + BLOCK "VarFileInfo" + BEGIN + VALUE "Translation", 0x409, 1200 + END +END diff --git a/GeneralsMD/Code/Main/CMakeLists.txt b/GeneralsMD/Code/Main/CMakeLists.txt index fa73f03c13..2ab76629a9 100644 --- a/GeneralsMD/Code/Main/CMakeLists.txt +++ b/GeneralsMD/Code/Main/CMakeLists.txt @@ -1,10 +1,53 @@ +# Product version definitions +set(BUILD_USER "") +set(BUILD_LOCATION "") +set(PRODUCT_VERSION_MAJOR 1) +set(PRODUCT_VERSION_MINOR 4) +set(PRODUCT_VERSION_PATCH 0) +set(PRODUCT_VERSION_TWEAK 0) +set(PRODUCT_VERSION_STRING "${PRODUCT_VERSION_MAJOR}.${PRODUCT_VERSION_MINOR}.${PRODUCT_VERSION_PATCH}.${PRODUCT_VERSION_TWEAK}") +set(PRODUCT_NAME "Command & Conquer Generals Zero Hour") +set(FILE_VERSION_MAJOR ${PRODUCT_VERSION_MAJOR}) # TODO come up with a file version? +set(FILE_VERSION_MINOR ${PRODUCT_VERSION_MINOR}) +set(FILE_VERSION_PATCH ${PRODUCT_VERSION_PATCH}) +set(FILE_VERSION_TWEAK ${PRODUCT_VERSION_TWEAK}) +set(FILE_VERSION_STRING "${FILE_VERSION_MAJOR}.${FILE_VERSION_MINOR}.${FILE_VERSION_PATCH}.${FILE_VERSION_TWEAK}") +set(FILE_DESCRIPTION "Community Version") +set(FILE_NAME "GeneralsZH") + +# TODO Originally referred to build host and user, replace with git info perhaps? +file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/GeneratedVersion.h +"#pragma once + +#define VERSION_LOCALBUILDNUM 0 +#define VERSION_BUILDUSER \"${BUILD_USER}\" +#define VERSION_BUILDLOC \"${BUILD_LOCATION}\" +" +) + +file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/BuildVersion.h +"#pragma once + +#define VERSION_MAJOR ${PRODUCT_VERSION_MAJOR} +#define VERSION_MINOR ${PRODUCT_VERSION_MINOR} +#define VERSION_BUILDNUM ${PRODUCT_VERSION_PATCH} +" +) + +# Configure Version rc file +configure_file(${CMAKE_CURRENT_SOURCE_DIR}/Version.rc.in + ${CMAKE_CURRENT_BINARY_DIR}/Version.rc) + + + add_executable(z_generals WIN32) # Use a binary name that doesn't conflict with original game. if("${CMAKE_SYSTEM}" MATCHES "Windows") - set_target_properties(z_generals PROPERTIES OUTPUT_NAME generalszh) + set_target_properties(z_generals PROPERTIES OUTPUT_NAME ${FILE_NAME}) else() - set_target_properties(z_generals PROPERTIES OUTPUT_NAME generalszh) + string(TOLOWER ${FILE_NAME} FILE_NAME_LOWER) + set_target_properties(z_generals PROPERTIES OUTPUT_NAME ${FILE_NAME_LOWER}) endif() target_link_libraries(z_generals PRIVATE @@ -26,26 +69,6 @@ target_link_libraries(z_generals PRIVATE zi_always ) -# TODO Originally referred to build host and user, replace with git info perhaps? -file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/GeneratedVersion.h -"#pragma once - -#define VERSION_LOCALBUILDNUM 0 -#define VERSION_BUILDUSER \"\" -#define VERSION_BUILDLOC \"\" -" -) - -# Based on original binary values for these variables. -file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/BuildVersion.h -"#pragma once - -#define VERSION_MAJOR 1 -#define VERSION_MINOR 4 -#define VERSION_BUILDNUM 601 -" -) - target_link_options(z_generals PRIVATE "/NODEFAULTLIB:libci.lib") target_include_directories(z_generals PRIVATE diff --git a/GeneralsMD/Code/Main/RTS.RC b/GeneralsMD/Code/Main/RTS.RC index faa4ee857f..fc95d17501 100644 --- a/GeneralsMD/Code/Main/RTS.RC +++ b/GeneralsMD/Code/Main/RTS.RC @@ -1,3 +1,5 @@ +#include "version.rc" + //Microsoft Developer Studio generated resource script. // #include "resource.h" @@ -58,7 +60,8 @@ IDI_ApplicationIcon ICON DISCARDABLE "GENERALS.ICO" #endif // English (U.S.) resources ///////////////////////////////////////////////////////////////////////////// -// Add manifest to specify that the app is DPI aware and prevent forced scaling by the system +// TheSuperHackers @tweak Adds manifest to specify that the app is DPI aware +// and prevent forced scaling by the system. 1 24 "app.manifest" diff --git a/GeneralsMD/Code/Main/Version.rc.in b/GeneralsMD/Code/Main/Version.rc.in new file mode 100644 index 0000000000..8e23607fb0 --- /dev/null +++ b/GeneralsMD/Code/Main/Version.rc.in @@ -0,0 +1,33 @@ +#include + +VS_VERSION_INFO VERSIONINFO + FILEVERSION @FILE_VERSION_MAJOR@,@FILE_VERSION_MINOR@,@FILE_VERSION_PATCH@,@FILE_VERSION_TWEAK@ + PRODUCTVERSION @PRODUCT_VERSION_MAJOR@,@PRODUCT_VERSION_MINOR@,@PRODUCT_VERSION_PATCH@,@PRODUCT_VERSION_TWEAK@ + FILEFLAGSMASK 0x3fL +#if RTS_DEBUG + FILEFLAGS VS_FF_DEBUG +#else + FILEFLAGS 0x0L +#endif + FILEOS 0x40004L + FILETYPE 0x1L + FILESUBTYPE 0x0L + +BEGIN + BLOCK "StringFileInfo" + BEGIN + BLOCK "040904b0" + BEGIN + VALUE "FileDescription", "@FILE_DESCRIPTION@\0" + VALUE "FileVersion", "@FILE_VERSION_STRING@\0" + VALUE "ProductName", "@PRODUCT_NAME@\0" + VALUE "ProductVersion", "@PRODUCT_VERSION_STRING@\0" + VALUE "OriginalFilename", "@FILE_NAME@.exe\0" + VALUE "LegalCopyright", "@BUILD_USER@\0" + END + END + BLOCK "VarFileInfo" + BEGIN + VALUE "Translation", 0x409, 1200 + END +END