aboutsummaryrefslogtreecommitdiff
path: root/macros/src/main/scala/ch/jodersky/jni/util/PlatformMacros.scala
blob: a4af100553aeade85e1b571d8409aebd9f66fbae (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
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)
  }

}