diff options
author | Robin Gareus <robin@gareus.org> | 2020-03-24 14:25:22 +0100 |
---|---|---|
committer | Robin Gareus <robin@gareus.org> | 2020-03-24 14:25:22 +0100 |
commit | 853bf6d1789b49d233fe4d093a0afa485720bcde (patch) | |
tree | d8b199f2db690cf9dc1ba873165f88419053a8db /gtk2_ardour | |
parent | 2f0914c73060bad387bf2d92e5eae2de51b6d1e0 (diff) |
Add API to query OSX/MacOS version
Diffstat (limited to 'gtk2_ardour')
-rw-r--r-- | gtk2_ardour/bundle_env_cocoa.cc | 1 | ||||
-rw-r--r-- | gtk2_ardour/cocoacarbon.mm | 40 |
2 files changed, 41 insertions, 0 deletions
diff --git a/gtk2_ardour/bundle_env_cocoa.cc b/gtk2_ardour/bundle_env_cocoa.cc index 828212459e..1ae39c6452 100644 --- a/gtk2_ardour/bundle_env_cocoa.cc +++ b/gtk2_ardour/bundle_env_cocoa.cc @@ -54,6 +54,7 @@ using namespace std; extern void set_language_preference (); // cocoacarbon.mm extern void no_app_nap (); // cocoacarbon.mm +extern int query_darwin_version (); // cocoacarbon.mm static void setup_logging (void) diff --git a/gtk2_ardour/cocoacarbon.mm b/gtk2_ardour/cocoacarbon.mm index 421050b5fc..8c5cac90fa 100644 --- a/gtk2_ardour/cocoacarbon.mm +++ b/gtk2_ardour/cocoacarbon.mm @@ -21,9 +21,13 @@ #include <string> #include <ctype.h> #include <stdlib.h> +#include <sys/utsname.h> +#include <sys/sysctl.h> + #include <pbd/error.h> #include <gtkmm2ext/gtkapplication.h> #include <gdk/gdkquartz.h> + #undef check #undef YES #undef NO @@ -124,3 +128,39 @@ no_app_nap () [ [ NSProcessInfo processInfo] beginActivityWithOptions:NSActivityLatencyCritical reason:@"realtime audio" ]; } } + +/** Query Darwin kernel version. + * @return major kernel version or -1 on failure + * + * kernel version is 4 ahead of OS X release + * 19.x.x - OS 10.15 (Catalina) + * 18.x.x - OS 10.14 (Mojave) + * 17.x.x - OS 10.13 (High Sierra) + * 16.x.x - OS 10.12 (Sierra) + * ... + * 10.x.x - OS 10.6 (Snow Leopard) + */ +int +query_darwin_version () +{ + char str[256] = {0}; + size_t size = sizeof(str); + + if (0 == sysctlbyname ("kern.osrelease", str, &size, NULL, 0)) { + short int v[3]; + if (3 == sscanf (str, "%hd.%hd.%hd", &v[0], &v[1], &v[2])) { + return v[0]; // major version only + } + } else { + struct utsname name; + uname (&name); + int v[3]; + if (3 == sscanf (name.release, "%d.%d.%d", &v[0], &v[1], &v[2])) { + return v[0]; // major version only + } + if (2 == sscanf (name.release, "%d.%d", &v[0], &v[1])) { + return v[0]; // major version only + } + } + return -1; +} |