|
6 | 6 | #include "Core/AtomLockGuids.h" |
7 | 7 | #include <CommonPal.h> |
8 | 8 | #ifdef _WIN32 |
| 9 | +#include <winver.h> |
9 | 10 | #include <process.h> |
10 | 11 | #endif |
11 | 12 |
|
@@ -90,9 +91,65 @@ void __stdcall PrintUsage() |
90 | 91 | #endif |
91 | 92 | } |
92 | 93 |
|
| 94 | +void __stdcall PrintChVersion() |
| 95 | +{ |
| 96 | + wprintf(_u("%s version %d.%d.%d.0\n"), hostName, CHAKRA_CORE_MAJOR_VERSION, CHAKRA_CORE_MINOR_VERSION, CHAKRA_CORE_PATCH_VERSION); |
| 97 | +} |
| 98 | + |
| 99 | +#ifdef _WIN32 |
| 100 | +void __stdcall PrintChakraCoreVersion() |
| 101 | +{ |
| 102 | + char filename[_MAX_PATH]; |
| 103 | + char drive[_MAX_DRIVE]; |
| 104 | + char dir[_MAX_DIR]; |
| 105 | + |
| 106 | + LPCSTR chakraDllName = GetChakraDllName(); |
| 107 | + |
| 108 | + char modulename[_MAX_PATH]; |
| 109 | + GetModuleFileNameA(NULL, modulename, _MAX_PATH); |
| 110 | + _splitpath_s(modulename, drive, _MAX_DRIVE, dir, _MAX_DIR, nullptr, 0, nullptr, 0); |
| 111 | + _makepath_s(filename, drive, dir, chakraDllName, nullptr); |
| 112 | + |
| 113 | + DWORD verHandle = NULL; |
| 114 | + UINT size = 0; |
| 115 | + LPBYTE lpBuffer = NULL; |
| 116 | + DWORD verSize = GetFileVersionInfoSizeA(filename, &verHandle); |
| 117 | + |
| 118 | + if (verSize != NULL) |
| 119 | + { |
| 120 | + LPSTR verData = new char[verSize]; |
| 121 | + |
| 122 | + if (GetFileVersionInfoA(filename, NULL, verSize, verData) && |
| 123 | + VerQueryValue(verData, _u("\\"), (VOID FAR * FAR *)&lpBuffer, &size) && |
| 124 | + (size != 0)) |
| 125 | + { |
| 126 | + VS_FIXEDFILEINFO *verInfo = (VS_FIXEDFILEINFO *)lpBuffer; |
| 127 | + if (verInfo->dwSignature == 0xfeef04bd) |
| 128 | + { |
| 129 | + // Doesn't matter if you are on 32 bit or 64 bit, |
| 130 | + // DWORD is always 32 bits, so first two revision numbers |
| 131 | + // come from dwFileVersionMS, last two come from dwFileVersionLS |
| 132 | + printf("%s version %d.%d.%d.%d\n", |
| 133 | + chakraDllName, |
| 134 | + (verInfo->dwFileVersionMS >> 16) & 0xffff, |
| 135 | + (verInfo->dwFileVersionMS >> 0) & 0xffff, |
| 136 | + (verInfo->dwFileVersionLS >> 16) & 0xffff, |
| 137 | + (verInfo->dwFileVersionLS >> 0) & 0xffff); |
| 138 | + } |
| 139 | + } |
| 140 | + |
| 141 | + delete[] verData; |
| 142 | + } |
| 143 | +} |
| 144 | +#endif |
| 145 | + |
93 | 146 | void __stdcall PrintVersion() |
94 | 147 | { |
95 | | - wprintf(_u("%d.%d.%d\n"), CHAKRA_CORE_MAJOR_VERSION, CHAKRA_CORE_MINOR_VERSION, CHAKRA_CORE_PATCH_VERSION); |
| 148 | + PrintChVersion(); |
| 149 | + |
| 150 | +#ifdef _WIN32 |
| 151 | + PrintChakraCoreVersion(); |
| 152 | +#endif |
96 | 153 | } |
97 | 154 |
|
98 | 155 | // On success the param byteCodeBuffer will be allocated in the function. |
|
0 commit comments