aboutsummaryrefslogtreecommitdiff
path: root/macros/src/main/scala/ch/jodersky/jni/util/PlatformMacros.scala
diff options
context:
space:
mode:
Diffstat (limited to 'macros/src/main/scala/ch/jodersky/jni/util/PlatformMacros.scala')
-rw-r--r--macros/src/main/scala/ch/jodersky/jni/util/PlatformMacros.scala31
1 files changed, 31 insertions, 0 deletions
diff --git a/macros/src/main/scala/ch/jodersky/jni/util/PlatformMacros.scala b/macros/src/main/scala/ch/jodersky/jni/util/PlatformMacros.scala
new file mode 100644
index 0000000..a4af100
--- /dev/null
+++ b/macros/src/main/scala/ch/jodersky/jni/util/PlatformMacros.scala
@@ -0,0 +1,31 @@
+package ch.jodersky.jni
+package util
+
+import scala.language.experimental.macros
+
+import scala.reflect.macros.whitebox.Context
+
+object PlatformMacros {
+
+ // arch-kernel
+ def current(c: Context): c.Expr[String] = {
+ import c.universe._
+ val result = q"""
+ val line = try {
+ scala.sys.process.Process("uname -sm").lineStream.head
+ } catch {
+ case ex: Exception => sys.error("Error running `uname` command")
+ }
+ val parts = line.split(" ")
+ if (parts.length != 2) {
+ sys.error("Could not determine platform: 'uname -sm' returned unexpected string: " + line)
+ } else {
+ val arch = parts(1).toLowerCase.replaceAll("\\s", "")
+ val kernel = parts(0).toLowerCase.replaceAll("\\s", "")
+ arch + "-" + kernel
+ }
+ """
+ c.Expr[String](result)
+ }
+
+}