summaryrefslogtreecommitdiff
path: root/src/lib/cross.cc
diff options
context:
space:
mode:
authorCarl Hetherington <cth@carlh.net>2013-06-10 12:06:04 +0100
committerCarl Hetherington <cth@carlh.net>2013-06-10 12:06:04 +0100
commita991c734ebfedb5456cec827d5eaf2583fdbb9a1 (patch)
treea1315b26da908ad6de4247064a00a7493482c933 /src/lib/cross.cc
parent6db935ce99e1aac8f11afb023941922265670e6b (diff)
Detect CPU info on OS X.
Diffstat (limited to 'src/lib/cross.cc')
-rw-r--r--src/lib/cross.cc43
1 files changed, 43 insertions, 0 deletions
diff --git a/src/lib/cross.cc b/src/lib/cross.cc
index 2c66ab53a..1f1be907f 100644
--- a/src/lib/cross.cc
+++ b/src/lib/cross.cc
@@ -24,6 +24,12 @@
#ifdef DVDOMATIC_WINDOWS
#include "windows.h"
#endif
+#ifdef DVDOMATIC_OSX
+#include <sys/sysctl.h>
+#endif
+
+using std::pair;
+using std::string;
void
dvdomatic_sleep (int s)
@@ -35,3 +41,40 @@ dvdomatic_sleep (int s)
Sleep (s * 1000);
#endif
}
+
+/** @return A pair containing CPU model name and the number of processors */
+pair<string, int>
+cpu_info ()
+{
+ pair<string, int> info;
+ info.second = 0;
+
+#ifdef DVDOMATIC_LINUX
+ ifstream f (N_("/proc/cpuinfo"));
+ while (f.good ()) {
+ string l;
+ getline (f, l);
+ if (boost::algorithm::starts_with (l, N_("model name"))) {
+ string::size_type const c = l.find (':');
+ if (c != string::npos) {
+ info.first = l.substr (c + 2);
+ }
+ } else if (boost::algorithm::starts_with (l, N_("processor"))) {
+ ++info.second;
+ }
+ }
+#endif
+
+#ifdef DVDOMATIC_OSX
+ size_t N = sizeof (info.second);
+ sysctlbyname ("hw.ncpu", &info.second, &N, 0, 0);
+ char buffer[64];
+ N = sizeof (buffer);
+ if (sysctlbyname ("machdep.cpu.brand_string", buffer, &N, 0, 0) == 0) {
+ info.first = buffer;
+ }
+#endif
+
+ return info;
+}
+