From 639e09bd3a3ca3a4373299e8e50369a408095319 Mon Sep 17 00:00:00 2001 From: Ariya Hidayat Date: Sun, 21 Sep 2014 23:44:17 -0700 Subject: [PATCH] Provide OS kernel version in system.os. This is available via the new property called `release`. A very simple example to demonstrate it: var system = require('system'); console.log('Kernel release', system.os.release); which will print (on OS X 10.7.5 Lion): Kernel release 11.4.2 https://github.com/ariya/phantomjs/issues/12587 --- src/system.cpp | 16 ++++++++++++++++ test/module/system/os.js | 6 ++++++ 2 files changed, 22 insertions(+) diff --git a/src/system.cpp b/src/system.cpp index 7c958c08..20ec900e 100644 --- a/src/system.cpp +++ b/src/system.cpp @@ -38,6 +38,20 @@ #include "../env.h" #include "terminal.h" +#if defined(Q_OS_LINUX) || defined(Q_OS_MAC) +#include +QString getOSRelease() +{ + QString release; + struct utsname un; + if (uname(&un) != -1) { + release = QString::fromLatin1(un.release); + } + + return release; +} +#endif + System::System(QObject *parent) : QObject(parent) , m_stdout((File *)NULL) @@ -94,6 +108,7 @@ System::System(QObject *parent) : } #elif defined(Q_OS_MAC) m_os.insert("name", "mac"); + m_os.insert("release", getOSRelease()); switch (QSysInfo::MacintoshVersion) { case QSysInfo::MV_10_3: m_os.insert("version", "10.3 (Panther)"); @@ -120,6 +135,7 @@ System::System(QObject *parent) : #elif defined(Q_OS_LINUX) m_os.insert("name", "linux"); m_os.insert("version", "unknown"); + m_os.insert("release", getOSRelease()); #else m_os.insert("name", "unknown"); m_os.insert("version", "unknown"); diff --git a/test/module/system/os.js b/test/module/system/os.js index 33aacc5b..22738476 100644 --- a/test/module/system/os.js +++ b/test/module/system/os.js @@ -7,3 +7,9 @@ assert.typeOf(system.os, 'object'); assert.typeOf(system.os.architecture, 'string'); assert.typeOf(system.os.name, 'string'); assert.typeOf(system.os.version, 'string'); + +if (system.os.name === 'mac') { + // release is x.y.z with x = 10 for Snow Leopard and 14 for Yosemite + assert.typeOf(system.os.release, 'string'); + assert.isTrue(parseInt(system.os.release, 10) >= 10); +}