diff options
-rw-r--r-- | .hgignore | 1 | ||||
-rw-r--r-- | CHANGES.txt | 2 | ||||
-rw-r--r-- | premake4.lua | 1 | ||||
-rwxr-xr-x | src/host/host.c | 96 | ||||
-rwxr-xr-x | src/host/os_getversion.c | 171 | ||||
-rwxr-xr-x | src/host/premake.c | 4 | ||||
-rwxr-xr-x | src/host/premake.h | 2 |
7 files changed, 188 insertions, 89 deletions
@@ -16,6 +16,7 @@ Makefile *.sdf *.sln *.suo +*.ncb *.vcproj* *.vcxproj* *.opensdf diff --git a/CHANGES.txt b/CHANGES.txt index 176dd04..e0a1f41 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -8,7 +8,7 @@ * Switched PS3 builds from GCC to SNC * Ignore NoRTTI flag for Managed C++ projects (Nick Darnell) * Added host.is64bit -* Added host.windowsversion +* Added os.getversion ------- diff --git a/premake4.lua b/premake4.lua index 57de46a..1a460c7 100644 --- a/premake4.lua +++ b/premake4.lua @@ -58,6 +58,7 @@ configuration "macosx" defines { "LUA_USE_MACOSX" } + links { "CoreServices.framework" } configuration { "macosx", "gmake" } buildoptions { "-mmacosx-version-min=10.1" } diff --git a/src/host/host.c b/src/host/host.c index 4246df6..6414359 100755 --- a/src/host/host.c +++ b/src/host/host.c @@ -1,16 +1,14 @@ -/** - * \file host.c - * \brief Functions to query the specifics of the operating environment. - * \author Copyright (c) 2011 Jason Perkins and the Premake project - */ +/**
+ * \file host.c
+ * \brief Functions to query the specifics of the operating environment.
+ * \author Copyright (c) 2011 Jason Perkins and the Premake project
+ */
#include "premake.h"
-#if PLATFORM_WINDOWS
-#define VER_SUITE_WH_SERVER (0x00008000)
-#endif
-
-
+/**
+ * Determine if we're running under 64-bit Windows.
+ */
int windows_is_64bit_running_under_wow(struct lua_State* L)
{
#if PLATFORM_WINDOWS
@@ -18,86 +16,14 @@ int windows_is_64bit_running_under_wow(struct lua_State* L) BOOL is_wow = FALSE;
wow_func_sig func = (wow_func_sig)GetProcAddress(GetModuleHandle(TEXT("kernel32")),"IsWow64Process");
- if(func)
+ if (func)
+ {
if(! func(GetCurrentProcess(),&is_wow))
luaL_error(L, "IsWow64Process returned an error");
+ }
#else
int is_wow = 0;
#endif
lua_pushboolean(L, is_wow);
return 1;
}
-
-int windows_version(struct lua_State* L)
-{
-#if PLATFORM_WINDOWS
- OSVERSIONINFOEX versionInfo;
- SYSTEM_INFO systemInfo;
-
- ZeroMemory(&versionInfo, sizeof(OSVERSIONINFOEX));
- versionInfo.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX);
- GetVersionEx((OSVERSIONINFO*)&versionInfo);
-
- ZeroMemory(&systemInfo, sizeof(SYSTEM_INFO));
- GetSystemInfo(&systemInfo);
-
- if (versionInfo.dwMajorVersion == 5 && versionInfo.dwMinorVersion == 0)
- {
- lua_pushliteral(L, "Windows2000");
- }
- else if (versionInfo.dwMajorVersion == 5 && versionInfo.dwMinorVersion == 1)
- {
- lua_pushliteral(L, "WindowsXP");
- }
- else if (versionInfo.dwMajorVersion == 5 && versionInfo.dwMinorVersion == 2)
- {
- if (versionInfo.wProductType == VER_NT_WORKSTATION &&
- systemInfo.wProcessorArchitecture == PROCESSOR_ARCHITECTURE_AMD64)
- {
- lua_pushliteral(L, "WindowsXPProfessionalx64");
- }
- else if (versionInfo.wSuiteMask & VER_SUITE_WH_SERVER)
- {
- lua_pushliteral(L, "WindowsHomeServer");
- }
- else if (GetSystemMetrics(SM_SERVERR2) == 0)
- {
- lua_pushliteral(L, "WindowsServer2003");
- }
- else
- {
- lua_pushliteral(L, "WindowsServer2003R2");
- }
- }
- else if (versionInfo.dwMajorVersion == 6 && versionInfo.dwMinorVersion == 0)
- {
- if (versionInfo.wProductType == VER_NT_WORKSTATION)
- {
- lua_pushliteral(L, "WindowsVista");
- }
- else
- {
- lua_pushliteral(L, "WindowsServer2008");
- }
- }
- else if (versionInfo.dwMajorVersion == 6 && versionInfo.dwMinorVersion == 1 )
- {
- if (versionInfo.wProductType != VER_NT_WORKSTATION)
- {
- lua_pushliteral(L, "WindowsServer2008R2");
- }
- else
- {
- lua_pushliteral(L, "Windows7");
- }
- }
- else
- {
- lua_pushliteral(L, "unknown windows version");
- }
-#else
- lua_pushliteral(L, "host is not windows");
-#endif
-
- return 1;
-}
\ No newline at end of file diff --git a/src/host/os_getversion.c b/src/host/os_getversion.c new file mode 100755 index 0000000..c396ed2 --- /dev/null +++ b/src/host/os_getversion.c @@ -0,0 +1,171 @@ +/** + * \file os_getversioninfo.c + * \brief Retrieve operating system version information. + * \author Copyright (c) 2011 Jason Perkins and the Premake project + */ + +#include "premake.h" + +struct OsVersionInfo +{ + int majorversion; + int minorversion; + int revision; + const char* description; +} ; + +static void getversion(struct OsVersionInfo* info); + +int os_getversion(lua_State* L) +{ + struct OsVersionInfo info; + getversion(&info); + + lua_newtable(L); + + lua_pushstring(L, "majorversion"); + lua_pushnumber(L, info.majorversion); + lua_settable(L, -3); + + lua_pushstring(L, "minorversion"); + lua_pushnumber(L, info.minorversion); + lua_settable(L, -3); + + lua_pushstring(L, "revision"); + lua_pushnumber(L, info.revision); + lua_settable(L, -3); + + lua_pushstring(L, "description"); + lua_pushstring(L, info.description); + lua_settable(L, -3); + + return 1; +} + +/*************************************************************/ + +#if defined(PLATFORM_WINDOWS) + +#if !defined(VER_SUITE_WH_SERVER) +#define VER_SUITE_WH_SERVER (0x00008000) +#endif + +void getversion(struct OsVersionInfo* info) +{ + OSVERSIONINFOEX versionInfo; + SYSTEM_INFO systemInfo; + + ZeroMemory(&versionInfo, sizeof(OSVERSIONINFOEX)); + versionInfo.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX); + GetVersionEx((OSVERSIONINFO*)&versionInfo); + + info->majorversion = versionInfo.dwMajorVersion; + info->minorversion = versionInfo.dwMinorVersion; + info->revision = versionInfo.wServicePackMajor; + + ZeroMemory(&systemInfo, sizeof(SYSTEM_INFO)); + GetSystemInfo(&systemInfo); + + if (versionInfo.dwMajorVersion == 5 && versionInfo.dwMinorVersion == 0) + { + info->description = "Windows 2000"; + } + else if (versionInfo.dwMajorVersion == 5 && versionInfo.dwMinorVersion == 1) + { + info->description = "Windows XP"; + } + else if (versionInfo.dwMajorVersion == 5 && versionInfo.dwMinorVersion == 2) + { + if (versionInfo.wProductType == VER_NT_WORKSTATION && + systemInfo.wProcessorArchitecture == PROCESSOR_ARCHITECTURE_AMD64) + { + info->description = "Windows XP Professional x64"; + } + else if (versionInfo.wSuiteMask & VER_SUITE_WH_SERVER) + { + info->description = "Windows Home Server"; + } + else if (GetSystemMetrics(SM_SERVERR2) == 0) + { + info->description = "Windows Server 2003"; + } + else + { + info->description = "Windows Server 2003 R2"; + } + } + else if (versionInfo.dwMajorVersion == 6 && versionInfo.dwMinorVersion == 0) + { + if (versionInfo.wProductType == VER_NT_WORKSTATION) + { + info->description = "Windows Vista"; + } + else + { + info->description = "Windows Server 2008"; + } + } + else if (versionInfo.dwMajorVersion == 6 && versionInfo.dwMinorVersion == 1 ) + { + if (versionInfo.wProductType != VER_NT_WORKSTATION) + { + info->description = "Windows Server 2008 R2"; + } + else + { + info->description = "Windows 7"; + } + } + else + { + info->description = "Windows"; + } +} + +/*************************************************************/ + +#elif defined(PLATFORM_MACOSX) + +#include <CoreServices/CoreServices.h> + +void getversion(struct OsVersionInfo* info) +{ + Gestalt(gestaltSystemVersionMajor, &info->majorversion); + Gestalt(gestaltSystemVersionMinor, &info->minorversion); + Gestalt(gestaltSystemVersionBugFix, &info->revision); + + info->description = "Mac OS X"; + if (info->majorversion == 10) + { + switch (info->minorversion) + { + case 4: + info->description = "Mac OS X Tiger"; + break; + case 5: + info->description = "Mac OS X Leopard"; + break; + case 6: + info->description = "Mac OS X Snow Leopard"; + break; + case 7: + info->description = "Mac OS X Lion"; + break; + } + } +} + +/*************************************************************/ + +#else + +void getversion(struct OsVersionInfo* info) +{ + info->majorversion = 0; + info->minorversion = 0; + info->revision = 0; + info->description = PLATFORM_STRING; +} + +#endif + diff --git a/src/host/premake.c b/src/host/premake.c index 8fc7240..ff0bdde 100755 --- a/src/host/premake.c +++ b/src/host/premake.c @@ -38,6 +38,7 @@ static const luaL_Reg os_functions[] = { { "copyfile", os_copyfile }, { "isdir", os_isdir }, { "getcwd", os_getcwd }, + { "getversion", os_getversion }, { "isfile", os_isfile }, { "matchdone", os_matchdone }, { "matchisfile", os_matchisfile }, @@ -59,7 +60,6 @@ static const luaL_Reg string_functions[] = { static const luaL_Reg host_functions[] = { { "windows_is_64bit_running_under_wow", windows_is_64bit_running_under_wow }, - { "windowsversion",windows_version}, { NULL, NULL } }; @@ -77,7 +77,7 @@ int main(int argc, const char** argv) luaL_register(L, "path", path_functions); luaL_register(L, "os", os_functions); luaL_register(L, "string", string_functions); - luaL_register(L, "host", host_functions); + luaL_register(L, "host", host_functions); /* push the application metadata */ lua_pushstring(L, LUA_COPYRIGHT); diff --git a/src/host/premake.h b/src/host/premake.h index 6967ae2..0e99b6c 100755 --- a/src/host/premake.h +++ b/src/host/premake.h @@ -55,6 +55,7 @@ int path_isabsolute(lua_State* L); int os_chdir(lua_State* L); int os_copyfile(lua_State* L); int os_getcwd(lua_State* L); +int os_getversion(lua_State* L); int os_isdir(lua_State* L); int os_isfile(lua_State* L); int os_matchdone(lua_State* L); @@ -68,6 +69,5 @@ int os_rmdir(lua_State* L); int os_uuid(lua_State* L); int string_endswith(lua_State* L); int windows_is_64bit_running_under_wow(struct lua_State* l); -int windows_version(struct lua_State* l); |