31 #if !defined(Q_OS_WIN32)
32 #include <sys/utsname.h>
36 #include <QTextStream>
50 return pair.first +
' ' + pair.second;
61 proc.start (QString (
"/bin/sh"),
62 QStringList (
"-c") <<
"lsb_release -ds", QIODevice::ReadOnly);
63 if (proc.waitForStarted ())
65 QTextStream stream (&proc);
67 while (proc.waitForReadyRead ())
68 ret += stream.readAll ();
71 return ret.remove (
'"').trimmed ();
79 if (!QFile::exists (
"/etc/os-release"))
82 QSettings relFile {
"/etc/os-release", QSettings::IniFormat };
83 relFile.setIniCodec (
"UTF-8");
85 const auto& prettyName = relFile.value (
"PRETTY_NAME").toString ();
86 const auto& name = relFile.value (
"NAME").toString ();
87 const auto& version = relFile.value (
"VERSION").toString ();
88 return !prettyName.isEmpty () ? prettyName : (name +
" " + version);
99 {
"/etc/mandrake-release",
"Mandrake Linux" },
100 {
"/etc/debian_version",
"Debian GNU/Linux" },
101 {
"/etc/gentoo-release",
"Gentoo Linux" },
102 {
"/etc/exherbo-release",
"Exherbo" },
103 {
"/etc/arch-release",
"Arch Linux" },
104 {
"/etc/slackware-version",
"Slackware Linux" },
105 {
"/etc/pld-release",
"" },
106 {
"/etc/lfs-release",
"LFS" },
107 {
"/etc/SuSE-release",
"SuSE linux" },
108 {
"/etc/conectiva-release",
"Connectiva" },
109 {
"/etc/.installed",
"" },
110 {
"/etc/redhat-release",
"" },
113 OsInfo_t *osptr = OsInfo;
114 while (!osptr->path.isEmpty ())
116 QFileInfo fi (osptr->path);
119 QFile f (osptr->path);
120 f.open (QIODevice::ReadOnly);
121 QString data = QString (f.read (1024)).trimmed ();
122 if (osptr->name.isEmpty ())
125 return QString (
"%1 (%2)")
139 void Normalize (QString& osName)
141 auto trimQuotes = [&osName]
143 if (osName.startsWith (
'"') && osName.endsWith (
'"'))
144 osName = osName.mid (1, osName.size () - 1);
149 const QString nameMarker (
"NAME=");
150 if (osName.startsWith (nameMarker))
151 osName = osName.mid (nameMarker.size ());
160 #if defined(Q_OS_MAC)
161 QSysInfo::MacVersion v = QSysInfo::MacintoshVersion;
164 case QSysInfo::MV_10_3:
165 return {
"Mac OS X",
"10.3" };
166 case QSysInfo::MV_10_4:
167 return {
"Mac OS X",
"10.4" };
168 case QSysInfo::MV_10_5:
169 return {
"Mac OS X",
"10.5" };
170 case QSysInfo::MV_10_6:
171 return {
"Mac OS X",
"10.6" };
172 case QSysInfo::MV_10_7:
173 return {
"Mac OS X",
"10.7" };
174 case QSysInfo::MV_10_8:
175 return {
"Mac OS X",
"10.8" };
176 case QSysInfo::MV_10_9:
177 return {
"Mac OS X",
"10.9" };
179 return {
"Max OS X",
"Unknown version" };
181 #elif defined(Q_OS_WIN32)
182 QSysInfo::WinVersion v = QSysInfo::WindowsVersion;
183 if (v == QSysInfo::WV_95)
185 else if (v == QSysInfo::WV_98)
187 else if (v == QSysInfo::WV_Me)
189 else if (v == QSysInfo::WV_DOS_based)
191 else if (v == QSysInfo::WV_NT)
193 else if (v == QSysInfo::WV_2000)
195 else if (v == QSysInfo::WV_XP)
197 else if (v == QSysInfo::WV_2003)
199 else if (v == QSysInfo::WV_VISTA)
201 else if (v == QSysInfo::WV_WINDOWS7)
203 else if (v == 0x00a0)
205 else if (v == QSysInfo::WV_NT_based)
210 if (osName.isEmpty ())
213 if (osName.isEmpty ())
221 return qMakePair (osName.isEmpty () ? QString (u.sysname) : osName,
222 QString (
"%1 %2 %3").arg (u.machine, u.release, u.version));
225 return qMakePair (QString (
"Unknown OS"), QString (
"Unknown version"));
QString GetOSName()
Returns a string of OS name and version joined together.
QPair< QString, QString > SplitInfo_t
QPair< QString, QString > GetOSNameSplit()
Returns a pair of OS name and version.