diff options
Diffstat (limited to 'NorthstarDedicatedTest/version.cpp')
-rw-r--r-- | NorthstarDedicatedTest/version.cpp | 59 |
1 files changed, 59 insertions, 0 deletions
diff --git a/NorthstarDedicatedTest/version.cpp b/NorthstarDedicatedTest/version.cpp new file mode 100644 index 00000000..dfeb9670 --- /dev/null +++ b/NorthstarDedicatedTest/version.cpp @@ -0,0 +1,59 @@ +#include "version.h" +#include "pch.h" + +char version[16]; +char NSUserAgent[32]; + +void InitialiseVersion() { + HRSRC hResInfo; + DWORD dwSize; + HGLOBAL hResData; + LPVOID pRes, pResCopy; + UINT uLen = 0; + VS_FIXEDFILEINFO* lpFfi = NULL; + HINSTANCE hInst = ::GetModuleHandle(NULL); + + hResInfo = FindResourceW(hInst, MAKEINTRESOURCE(1), RT_VERSION); + if (hResInfo != NULL) { + dwSize = SizeofResource(hInst, hResInfo); + hResData = LoadResource(hInst, hResInfo); + if (hResData != NULL) { + pRes = LockResource(hResData); + pResCopy = LocalAlloc(LMEM_FIXED, dwSize); + if (pResCopy != 0) { + CopyMemory(pResCopy, pRes, dwSize); + VerQueryValueW(pResCopy, L"\\", (LPVOID*)&lpFfi, &uLen); + + DWORD dwFileVersionMS = lpFfi->dwFileVersionMS; + DWORD dwFileVersionLS = lpFfi->dwFileVersionLS; + + DWORD dwLeftMost = HIWORD(dwFileVersionMS); + DWORD dwSecondLeft = LOWORD(dwFileVersionMS); + DWORD dwSecondRight = HIWORD(dwFileVersionLS); + DWORD dwRightMost = LOWORD(dwFileVersionLS); + + // We actually use the rightmost integer do determine whether or not we're a debug/dev build + // If it is set to 1 (as in resources.rc), we are a dev build + // On github CI, we set this 1 to a 0 automatically as we replace the 0.0.0.1 with the real version number + if (dwRightMost == 1) { + sprintf(version, "%d.%d.%d.%d+dev", dwLeftMost, dwSecondLeft, dwSecondRight, dwRightMost); + sprintf(NSUserAgent, "R2Northstar/%d.%d.%d+dev", dwLeftMost, dwSecondLeft, dwSecondRight); + } + else { + sprintf(version, "%d.%d.%d.%d", dwLeftMost, dwSecondLeft, dwSecondRight, dwRightMost); + sprintf(NSUserAgent, "R2Northstar/%d.%d.%d", dwLeftMost, dwSecondLeft, dwSecondRight); + } + UnlockResource(hResData); + FreeResource(hResData); + LocalFree(pResCopy); + return; + } + UnlockResource(hResData); + FreeResource(hResData); + LocalFree(pResCopy); + } + } + // Could not locate version info for whatever reason + spdlog::error("Failed to load version info:\n{}", std::system_category().message(GetLastError())); + sprintf(NSUserAgent, "R2Northstar/0.0.0"); +} |