/*************************************************************************** * Copyright (C) 2006-2012 by Thomas Schweitzer * * thomas-schweitzer(at)arcor.de * * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License version 2.0 as * * published by the Free Software Foundation. * * * * This program is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * * GNU General Public License for more details. * * * * You should have received a copy of the GNU General Public License * * along with this program in the file LICENSE.GPL; if not, write to the * * Free Software Foundation, Inc., * * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * ***************************************************************************/ #include "UiGuiSystemInfo.h" #include #include #include #include UiGuiSystemInfo::UiGuiSystemInfo() { } /*! \brief Returns the operating system UiGUI is currently running on as one string. The String contains name and version of the os. E.g. Linux Ubuntu 9.04. */ TQString UiGuiSystemInfo::getOperatingSystem() { TQString operatingSystemString = ""; #if defined (Q_WS_WIN) switch (TQSysInfo::WindowsVersion) { case TQSysInfo::WV_32s: { operatingSystemString = "Windows 3.1 with Win 32s"; break; } case TQSysInfo::WV_95: { operatingSystemString = "Windows 95"; break; } case TQSysInfo::WV_98: { operatingSystemString = "Windows 98"; break; } case TQSysInfo::WV_Me: { operatingSystemString = "Windows Me"; break; } case TQSysInfo::WV_NT: { operatingSystemString = "Windows NT (operating system version 4.0)"; break; } case TQSysInfo::WV_2000: { operatingSystemString = "Windows 2000 (operating system version 5.0)"; break; } case TQSysInfo::WV_XP: { operatingSystemString = "Windows XP (operating system version 5.1)"; break; } case TQSysInfo::WV_2003: { operatingSystemString = "Windows Server 2003, Windows Server 2003 R2, Windows Home Server, Windows XP Professional x64 Edition (operating system version 5.2)"; break; } case TQSysInfo::WV_VISTA: { operatingSystemString = "Windows Vista, Windows Server 2008 (operating system version 6.0)"; break; } case TQSysInfo::WV_WINDOWS7: { operatingSystemString = "Windows 7 (operating system version 6.1)"; break; } case TQSysInfo::WV_CE: { operatingSystemString = "Windows CE"; break; } case TQSysInfo::WV_CENET: { operatingSystemString = "Windows CE .NET"; break; } case TQSysInfo::WV_CE_5: { operatingSystemString = "Windows CE 5.x"; break; } case TQSysInfo::WV_CE_6: { operatingSystemString = "Windows CE 6.x"; break; } default: { operatingSystemString = "Unknown Windows operating system."; break; } } #elif defined (Q_WS_MAC) switch (TQSysInfo::MacintoshVersion) { case TQSysInfo::MV_9: { operatingSystemString = "Mac OS 9 (unsupported)"; break; } case TQSysInfo::MV_10_0: { operatingSystemString = "Mac OS X 10.0 Cheetah (unsupported)"; break; } case TQSysInfo::MV_10_1: { operatingSystemString = "Mac OS X 10.1 Puma (unsupported)"; break; } case TQSysInfo::MV_10_2: { operatingSystemString = "Mac OS X 10.2 Jaguar (unsupported)"; break; } case TQSysInfo::MV_10_3: { operatingSystemString = "Mac OS X 10.3 Panther"; break; } case TQSysInfo::MV_10_4: { operatingSystemString = "Mac OS X 10.4 Tiger"; break; } case TQSysInfo::MV_10_5: { operatingSystemString = "Mac OS X 10.5 Leopard"; break; } case TQSysInfo::MV_10_6: { operatingSystemString = "Mac OS X 10.6 Snow Leopard"; break; } case TQSysInfo::MV_Unknown: { operatingSystemString = "An unknown and currently unsupported platform"; break; } default: { operatingSystemString = "Unknown Mac operating system."; break; } } #else //TODO: Detect Unix, Linux etc. distro as described on // http://www.novell.com/coolsolutions/feature/11251.html operatingSystemString = "Linux"; TQProcess process; process.start("uname -s"); bool result = process.waitForFinished(1000); TQString os = process.readAllStandardOutput().trimmed(); process.start("uname -r"); result = process.waitForFinished(1000); TQString rev = process.readAllStandardOutput().trimmed(); process.start("uname -m"); result = process.waitForFinished(1000); TQString mach = process.readAllStandardOutput().trimmed(); if (os == "SunOS") { os = "Solaris"; process.start("uname -p"); result = process.waitForFinished(1000); TQString arch = process.readAllStandardOutput().trimmed(); process.start("uname -v"); result = process.waitForFinished(1000); TQString timestamp = process.readAllStandardOutput().trimmed(); operatingSystemString = os + " " + rev + " (" + arch + " " + timestamp + ")"; } else if (os == "AIX") { process.start("oslevel -r"); result = process.waitForFinished(1000); TQString oslevel = process.readAllStandardOutput().trimmed(); operatingSystemString = os + "oslevel " + oslevel; } else if (os == "Linux") { TQString dist; TQString pseudoname; TQString kernel = rev; if (TQFile::exists("/etc/redhat-release")) { dist = "RedHat"; process.start("sh -c \"cat /etc/redhat-release | sed s/.*\\(// | sed s/\\)//\""); result = process.waitForFinished(1000); pseudoname = process.readAllStandardOutput().trimmed(); process.start("sh -c \"cat /etc/redhat-release | sed s/.*release\\ // | sed s/\\ .*//\""); result = process.waitForFinished(1000); rev = process.readAllStandardOutput().trimmed(); } else if (TQFile::exists("/etc/SUSE-release")) { process.start("sh -c \"cat /etc/SUSE-release | tr '\\n' ' '| sed s/VERSION.*//\""); result = process.waitForFinished(1000); dist = process.readAllStandardOutput().trimmed(); process.start("sh -c \"cat /etc/SUSE-release | tr '\\n' ' ' | sed s/.*=\\ //\""); result = process.waitForFinished(1000); rev = process.readAllStandardOutput().trimmed(); } else if (TQFile::exists("/etc/mandrake-release")) { dist = "Mandrake"; process.start("sh -c \"cat /etc/mandrake-release | sed s/.*\\(// | sed s/\\)//\""); result = process.waitForFinished(1000); pseudoname = process.readAllStandardOutput().trimmed(); process.start("sh -c \"cat /etc/mandrake-release | sed s/.*release\\ // | sed s/\\ .*//\""); result = process.waitForFinished(1000); rev = process.readAllStandardOutput().trimmed(); } else if (TQFile::exists("/etc/lsb-release")) { dist = "Ubuntu"; TQString processCall = "sh -c \"cat /etc/lsb-release | tr '\\n' ' ' | sed s/.*DISTRIB_RELEASE=// | sed s/\\ .*//\""; process.start(processCall); result = process.waitForFinished(1000); rev = process.readAllStandardOutput().trimmed(); TQString errorStr = process.readAllStandardError(); process.start( "sh -c \"cat /etc/lsb-release | tr '\\n' ' ' | sed s/.*DISTRIB_CODENAME=// | sed s/\\ .*//\""); result = process.waitForFinished(1000); pseudoname = process.readAllStandardOutput().trimmed(); } else if (TQFile::exists("/etc/debian_version")) { dist = "Debian"; process.start("cat /etc/debian_version"); result = process.waitForFinished(1000); dist += process.readAllStandardOutput().trimmed(); rev = ""; } if (TQFile::exists("/etc/UnitedLinux-release")) { process.start("sh -c \"cat /etc/UnitedLinux-release | tr '\\n' ' ' | sed s/VERSION.*//\""); result = process.waitForFinished(1000); dist += process.readAllStandardOutput().trimmed(); } operatingSystemString = os + " " + dist + " " + rev + " (" + pseudoname + " " + kernel + " " + mach + ")"; } #endif return operatingSystemString; }