Added Win32 file info (#198)

This commit is contained in:
Hyper 2025-01-26 16:18:25 +00:00 committed by GitHub
parent d2d8c541e1
commit dee2a36d0f
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
4 changed files with 196 additions and 83 deletions

View file

@ -247,11 +247,48 @@ set(UNLEASHED_RECOMP_CXX_SOURCES
${UNLEASHED_RECOMP_USER_CXX_SOURCES}
${UNLEASHED_RECOMP_MOD_CXX_SOURCES}
${UNLEASHED_RECOMP_THIRDPARTY_SOURCES}
)
)
include("version.cmake")
set(VERSION_TXT "${PROJECT_SOURCE_DIR}/res/version.txt")
# Only show Git info and build type if not Release.
set(SHOW_GIT_INFO_AND_BUILD_TYPE 0)
if (NOT ${CMAKE_BUILD_TYPE} MATCHES "Release")
set(SHOW_GIT_INFO_AND_BUILD_TYPE 1)
endif()
GenerateVersionSources(
OUTPUT_DIR ${PROJECT_SOURCE_DIR}
VERSION_TXT ${VERSION_TXT}
H_TEMPLATE "${PROJECT_SOURCE_DIR}/res/version.h.template"
CXX_TEMPLATE "${PROJECT_SOURCE_DIR}/res/version.cpp.template"
BUILD_TYPE ${CMAKE_BUILD_TYPE}
SHOW_GIT_INFO ${SHOW_GIT_INFO_AND_BUILD_TYPE}
SHOW_BUILD_TYPE ${SHOW_GIT_INFO_AND_BUILD_TYPE}
)
if (WIN32)
# Set up Win32 resources for application icon.
set(ICON_PATH "${PROJECT_SOURCE_DIR}/../UnleashedRecompResources/images/game_icon.ico")
# Create binary version number for Win32 integer attributes.
CreateVersionString(
VERSION_TXT ${VERSION_TXT}
OUTPUT_CSV 1
OUTPUT_VAR WIN32_VERSION_BINARY
)
# Create string version number for Win32 detailed attributes.
CreateVersionString(
VERSION_TXT ${VERSION_TXT}
BUILD_TYPE ${CMAKE_BUILD_TYPE}
SHOW_GIT_INFO ${SHOW_GIT_INFO_AND_BUILD_TYPE}
SHOW_BUILD_TYPE ${SHOW_GIT_INFO_AND_BUILD_TYPE}
OUTPUT_VAR WIN32_VERSION_STRING
)
# Set Win32 icon path.
set(WIN32_ICON_PATH "${PROJECT_SOURCE_DIR}/../UnleashedRecompResources/images/game_icon.ico")
configure_file("res/win32/res.rc.template" "${CMAKE_BINARY_DIR}/res.rc" @ONLY)
add_executable(UnleashedRecomp ${UNLEASHED_RECOMP_CXX_SOURCES} "${CMAKE_BINARY_DIR}/res.rc")
else()
@ -409,23 +446,6 @@ generate_aggregate_header(
"${CMAKE_CURRENT_SOURCE_DIR}/api/SWA.h"
)
# Only show build type if not Release.
set(SHOW_GIT_INFO_AND_BUILD_TYPE 0)
if (NOT ${CMAKE_BUILD_TYPE} MATCHES "Release")
set(SHOW_GIT_INFO_AND_BUILD_TYPE 1)
endif()
include("version.cmake")
GenerateVersionSources(
OUTPUT_DIR "${PROJECT_SOURCE_DIR}"
VERSION_TXT "${PROJECT_SOURCE_DIR}/res/version.txt"
H_TEMPLATE "${PROJECT_SOURCE_DIR}/res/version.h.template"
CXX_TEMPLATE "${PROJECT_SOURCE_DIR}/res/version.cpp.template"
BUILD_TYPE ${CMAKE_BUILD_TYPE}
SHOW_GIT_INFO ${SHOW_GIT_INFO_AND_BUILD_TYPE}
SHOW_BUILD_TYPE ${SHOW_GIT_INFO_AND_BUILD_TYPE}
)
set(RESOURCES_SOURCE_PATH "${PROJECT_SOURCE_DIR}/../UnleashedRecompResources")
set(RESOURCES_OUTPUT_PATH "${PROJECT_SOURCE_DIR}/res")

View file

@ -9,6 +9,7 @@ inline const char* g_credits[] =
"RadiantDerg",
"PTKay",
"DeaThProj",
"SuperSonic16",
"NextinHKRY",
"M&M",
"saguinee",

View file

@ -1 +1,40 @@
IDI_ICON1 ICON "@ICON_PATH@"
#include <windows.h>
#define UNLEASHED_RECOMP_VERSION_BIN @WIN32_VERSION_BINARY@
#define UNLEASHED_RECOMP_VERSION_STR "@WIN32_VERSION_STRING@"
#ifdef _DEBUG
#define UNLEASHED_RECOMP_FILE_FLAGS VS_FF_DEBUG
#else
#define UNLEASHED_RECOMP_FILE_FLAGS 0
#endif
IDI_ICON1 ICON "@WIN32_ICON_PATH@"
VS_VERSION_INFO VERSIONINFO
FILEVERSION UNLEASHED_RECOMP_VERSION_BIN
PRODUCTVERSION UNLEASHED_RECOMP_VERSION_BIN
FILEFLAGSMASK VS_FFI_FILEFLAGSMASK
FILEFLAGS UNLEASHED_RECOMP_FILE_FLAGS
FILEOS VOS_NT_WINDOWS32
FILETYPE VFT_APP
FILESUBTYPE VFT2_UNKNOWN
BEGIN
BLOCK "StringFileInfo"
BEGIN
BLOCK "080904B0" // English (UK), Unicode
BEGIN
VALUE "ProductName", "Unleashed Recompiled"
VALUE "FileDescription", "Unleashed Recompiled"
VALUE "CompanyName", "hedge-dev"
VALUE "FileVersion", UNLEASHED_RECOMP_VERSION_STR
VALUE "ProductVersion", UNLEASHED_RECOMP_VERSION_STR
VALUE "InternalName", "UnleashedRecomp"
VALUE "OriginalFilename", "SWA.exe"
END
END
BLOCK "VarFileInfo"
BEGIN
VALUE "Translation", 0x0809, 0x04B0
END
END

View file

@ -31,6 +31,113 @@ function(CheckOutputFile OUTPUT_FILE TEMPLATE_FILE)
endif()
endfunction()
# VERSION_TXT : the input text file containing the milestone, major, minor and revision variables.
function(ParseVersionInfo VERSION_TXT)
if (NOT VERSION_TXT)
message(FATAL_ERROR "VERSION_TXT not specified.")
endif()
if (NOT EXISTS "${VERSION_TXT}")
message(FATAL_ERROR "No such file: ${VERSION_TXT}")
endif()
file(READ "${VERSION_TXT}" FILE_CONTENT)
string(REGEX REPLACE "\r?\n" ";" FILE_LINES "${FILE_CONTENT}")
foreach(LINE ${FILE_LINES})
if (LINE STREQUAL "")
continue()
endif()
# Find key/value pair match.
string(REGEX MATCH "([A-Za-z_]+)=\\\"?([^\"]+)\\\"?" MATCH "${LINE}")
if (MATCH)
# Extract key/value pairs.
string(REGEX REPLACE "([A-Za-z_]+)=.*" "\\1" KEY "${MATCH}")
string(REGEX REPLACE "[A-Za-z_]+=\\\"?([^\"]+)\\\"?" "\\1" VALUE "${MATCH}")
# Set environment variable.
set("${KEY}" "${VALUE}" CACHE INTERNAL "${KEY}")
endif()
endforeach()
endfunction()
# VERSION_TXT : the input text file containing the milestone, major, minor and revision variables.
# OUTPUT_CSV : the output string will be formatted as #,#,# without any alphabetic characters (optional).
# BUILD_TYPE : the current build configuration (e.g. "Release", "RelWithDebInfo", "Debug") (optional).
# SHOW_GIT_INFO : the Git commit hash and branch name should be appended to the version string (optional).
# SHOW_BUILD_TYPE : the build type should be appended to the version string (optional).
# OUTPUT_VAR : the output variable to store the version string in.
function(CreateVersionString)
cmake_parse_arguments(ARGS "" "VERSION_TXT;OUTPUT_CSV;BUILD_TYPE;SHOW_GIT_INFO;SHOW_BUILD_TYPE;OUTPUT_VAR" "" ${ARGN})
if (NOT ARGS_VERSION_TXT)
message(FATAL_ERROR "VERSION_TXT not specified.")
endif()
if (NOT ARGS_OUTPUT_VAR)
message(FATAL_ERROR "OUTPUT_VAR not specified.")
endif()
ParseVersionInfo("${ARGS_VERSION_TXT}")
if (ARGS_OUTPUT_CSV)
set(VERSION_STRING "${VERSION_MAJOR},${VERSION_MINOR},${VERSION_REVISION}")
else()
set(VERSION_STRING "v${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_REVISION}")
if (VERSION_MILESTONE)
string(PREPEND VERSION_STRING "${VERSION_MILESTONE} ")
endif()
if (ARGS_SHOW_GIT_INFO)
find_package(Git REQUIRED)
# Get Git branch name.
execute_process(
COMMAND ${GIT_EXECUTABLE} rev-parse --abbrev-ref HEAD
OUTPUT_VARIABLE BRANCH_NAME
OUTPUT_STRIP_TRAILING_WHITESPACE
)
set(BRANCH_NAME ${BRANCH_NAME} CACHE INTERNAL "BRANCH_NAME")
# Get Git commit hash.
execute_process(
COMMAND ${GIT_EXECUTABLE} rev-parse HEAD
OUTPUT_VARIABLE COMMIT_HASH
OUTPUT_STRIP_TRAILING_WHITESPACE
)
set(COMMIT_HASH ${COMMIT_HASH} CACHE INTERNAL "COMMIT_HASH")
# Get short Git commit hash.
execute_process(
COMMAND ${GIT_EXECUTABLE} rev-parse --short HEAD
OUTPUT_VARIABLE COMMIT_HASH_SHORT
OUTPUT_STRIP_TRAILING_WHITESPACE
)
set(COMMIT_HASH_SHORT ${COMMIT_HASH_SHORT} CACHE INTERNAL "COMMIT_HASH_SHORT")
# Append commit hash and branch.
if (COMMIT_HASH_SHORT AND BRANCH_NAME)
string(APPEND VERSION_STRING ".${COMMIT_HASH_SHORT}-${BRANCH_NAME}")
endif()
endif()
# Append build configuration.
if (ARGS_BUILD_TYPE AND ARGS_SHOW_BUILD_TYPE)
string(APPEND VERSION_STRING " (${ARGS_BUILD_TYPE})")
endif()
endif()
if (ARGS_OUTPUT_VAR)
set(${ARGS_OUTPUT_VAR} ${VERSION_STRING} PARENT_SCOPE)
endif()
endfunction()
# OUTPUT_DIR : the output directory of the resulting *.h/*.cpp files.
# VERSION_TXT : the input text file containing the milestone, major, minor and revision variables.
# H_TEMPLATE : the input template for the header.
@ -59,70 +166,16 @@ function(GenerateVersionSources)
message(FATAL_ERROR "CXX_TEMPLATE not specified.")
endif()
# Required for *.cpp template.
set(BUILD_TYPE ${ARGS_BUILD_TYPE})
if (ARGS_SHOW_GIT_INFO)
find_package(Git REQUIRED)
# Get Git branch name.
execute_process(
COMMAND ${GIT_EXECUTABLE} rev-parse --abbrev-ref HEAD
OUTPUT_VARIABLE BRANCH_NAME
OUTPUT_STRIP_TRAILING_WHITESPACE
)
# Get Git commit hash.
execute_process(
COMMAND ${GIT_EXECUTABLE} rev-parse HEAD
OUTPUT_VARIABLE COMMIT_HASH
OUTPUT_STRIP_TRAILING_WHITESPACE
)
# Get short Git commit hash.
execute_process(
COMMAND ${GIT_EXECUTABLE} rev-parse --short HEAD
OUTPUT_VARIABLE COMMIT_HASH_SHORT
OUTPUT_STRIP_TRAILING_WHITESPACE
)
endif()
file(READ "${ARGS_VERSION_TXT}" FILE_CONTENT)
string(REGEX REPLACE "\r?\n" ";" FILE_LINES "${FILE_CONTENT}")
foreach(LINE ${FILE_LINES})
if (LINE STREQUAL "")
continue()
endif()
# Find key/value pair match.
string(REGEX MATCH "([A-Za-z_]+)=\\\"?([^\"]+)\\\"?" MATCH "${LINE}")
if (MATCH)
# Extract key/value pairs.
string(REGEX REPLACE "([A-Za-z_]+)=.*" "\\1" KEY "${MATCH}")
string(REGEX REPLACE "[A-Za-z_]+=\\\"?([^\"]+)\\\"?" "\\1" VALUE "${MATCH}")
# Set environment variable.
set("${KEY}" "${VALUE}")
endif()
endforeach()
set(VERSION_STRING "v${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_REVISION}")
# Prepend version milestone.
if (VERSION_MILESTONE)
string(PREPEND VERSION_STRING "${VERSION_MILESTONE} ")
endif()
# Append commit hash and branch.
if (COMMIT_HASH_SHORT)
string(APPEND VERSION_STRING ".${COMMIT_HASH_SHORT}-${BRANCH_NAME}")
endif()
# Append build configuration.
if (ARGS_BUILD_TYPE AND ARGS_SHOW_BUILD_TYPE)
string(APPEND VERSION_STRING " (${ARGS_BUILD_TYPE})")
endif()
CreateVersionString(
VERSION_TXT ${ARGS_VERSION_TXT}
BUILD_TYPE ${ARGS_BUILD_TYPE}
SHOW_GIT_INFO ${ARGS_SHOW_GIT_INFO}
SHOW_BUILD_TYPE ${ARGS_SHOW_BUILD_TYPE}
OUTPUT_VAR VERSION_STRING
)
message("-- Build: ${VERSION_STRING}")