Skip to content

Commit adba73a

Browse files
committed
build: stamp PE version resource on the DLL
Wire a Windows VERSIONINFO resource to the existing CLASSICAPI_TAG so the DLL's file/product version (Explorer -> Properties -> Details, and GetFileVersionInfo) matches the CLASSIC_API_VERSION Lua global. Both derive from the vMAJOR.MINOR.PATCH tag; an untagged dev build gets the 9999.99.99 "newer than everything" sentinel. Enables the RC language, keeps the tag's major/minor/patch components that were previously discarded after the integer math, and configure_file's a version.rc into the build. The resource lands in .rsrc, untouched by the .rdata/.pdata section merges.
1 parent d09137c commit adba73a

2 files changed

Lines changed: 59 additions & 5 deletions

File tree

CMakeLists.txt

Lines changed: 21 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
cmake_minimum_required(VERSION 3.10)
22

3-
project(ClassicAPI LANGUAGES CXX)
3+
project(ClassicAPI LANGUAGES CXX RC)
44

55
set(CMAKE_CXX_STANDARD 17)
66
set(CMAKE_CXX_STANDARD_REQUIRED ON)
@@ -77,17 +77,20 @@ add_library(${PROJECT_NAME} SHARED
7777
# `CLASSIC_API_VERSION >= X` always pass during local development;
7878
# CI release builds overwrite it via `-DCLASSICAPI_TAG=vX.Y.Z`.
7979
set(CLASSICAPI_VERSION_VALUE 99999999)
80+
set(CLASSICAPI_VER_MAJOR 9999)
81+
set(CLASSICAPI_VER_MINOR 99)
82+
set(CLASSICAPI_VER_PATCH 99)
8083

8184
set(CLASSICAPI_TAG
8285
""
8386
CACHE STRING "Release tag like v1.2.3")
8487

8588
if(CLASSICAPI_TAG MATCHES "^v([0-9]+)\\.([0-9]+)\\.([0-9]+)$")
86-
set(_MAJOR "${CMAKE_MATCH_1}")
87-
set(_MINOR "${CMAKE_MATCH_2}")
88-
set(_PATCH "${CMAKE_MATCH_3}")
89+
set(CLASSICAPI_VER_MAJOR "${CMAKE_MATCH_1}")
90+
set(CLASSICAPI_VER_MINOR "${CMAKE_MATCH_2}")
91+
set(CLASSICAPI_VER_PATCH "${CMAKE_MATCH_3}")
8992
math(EXPR CLASSICAPI_VERSION_VALUE
90-
"${_MAJOR} * 10000 + ${_MINOR} * 100 + ${_PATCH}")
93+
"${CLASSICAPI_VER_MAJOR} * 10000 + ${CLASSICAPI_VER_MINOR} * 100 + ${CLASSICAPI_VER_PATCH}")
9194
elseif(CLASSICAPI_TAG)
9295
message(
9396
FATAL_ERROR
@@ -99,6 +102,19 @@ target_compile_definitions(
99102
${PROJECT_NAME}
100103
PRIVATE CLASSICAPI_VERSION_VALUE=${CLASSICAPI_VERSION_VALUE})
101104

105+
# Stamp the PE VERSIONINFO resource from the same version components, so the
106+
# DLL's file/product version (Explorer -> Properties -> Details) matches the
107+
# CLASSIC_API_VERSION Lua global. The .rsrc section the resource lands in is
108+
# untouched by the .rdata/.pdata section merges below.
109+
set(CLASSICAPI_VER_STRING
110+
"${CLASSICAPI_VER_MAJOR}.${CLASSICAPI_VER_MINOR}.${CLASSICAPI_VER_PATCH}.0")
111+
set(CLASSICAPI_VERSION_RC "${CMAKE_BINARY_DIR}/generated/version.rc")
112+
configure_file(
113+
"${CMAKE_CURRENT_SOURCE_DIR}/cmake/version.rc.in"
114+
"${CLASSICAPI_VERSION_RC}"
115+
@ONLY)
116+
target_sources(${PROJECT_NAME} PRIVATE "${CLASSICAPI_VERSION_RC}")
117+
102118
# ole32: COM (CoInitializeEx / CoCreateInstance / CoTaskMemFree) for the
103119
# SAPI text-to-speech backend in src/voicechat/Tts.cpp. The SAPI GUIDs are
104120
# instantiated in that TU via <initguid.h>, so no sapi.lib is needed.

cmake/version.rc.in

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
// Generated from cmake/version.rc.in by CMake configure_file().
2+
// Stamps the PE VERSIONINFO resource so Explorer -> Properties -> Details
3+
// and GetFileVersionInfo() report the same version as the CLASSIC_API_VERSION
4+
// Lua global. Both derive from the CLASSICAPI_TAG (vMAJOR.MINOR.PATCH) cache
5+
// var; an untagged dev build gets the 9999.99.99 "newer than everything"
6+
// sentinel.
7+
8+
#include <winver.h>
9+
10+
VS_VERSION_INFO VERSIONINFO
11+
FILEVERSION @CLASSICAPI_VER_MAJOR@,@CLASSICAPI_VER_MINOR@,@CLASSICAPI_VER_PATCH@,0
12+
PRODUCTVERSION @CLASSICAPI_VER_MAJOR@,@CLASSICAPI_VER_MINOR@,@CLASSICAPI_VER_PATCH@,0
13+
FILEFLAGSMASK VS_FFI_FILEFLAGSMASK
14+
FILEFLAGS 0x0L
15+
FILEOS VOS_NT_WINDOWS32
16+
FILETYPE VFT_DLL
17+
FILESUBTYPE VFT2_UNKNOWN
18+
BEGIN
19+
BLOCK "StringFileInfo"
20+
BEGIN
21+
BLOCK "040904b0"
22+
BEGIN
23+
VALUE "CompanyName", "ClassicAPI Team"
24+
VALUE "FileDescription", "ClassicAPI - modern WoW API backport for 1.12.1"
25+
VALUE "FileVersion", "@CLASSICAPI_VER_STRING@"
26+
VALUE "InternalName", "ClassicAPI"
27+
VALUE "LegalCopyright", "Licensed under GPLv3"
28+
VALUE "OriginalFilename", "ClassicAPI.dll"
29+
VALUE "ProductName", "ClassicAPI"
30+
VALUE "ProductVersion", "@CLASSICAPI_VER_STRING@"
31+
END
32+
END
33+
BLOCK "VarFileInfo"
34+
BEGIN
35+
// 0x0409 = U.S. English, 1200 = Unicode codepage.
36+
VALUE "Translation", 0x409, 1200
37+
END
38+
END

0 commit comments

Comments
 (0)