aboutsummaryrefslogblamecommitdiff
path: root/project/jni.scala
blob: 07d8406ca14f6ded2f02a26500296f0f2cc7621f (plain) (tree)
1
2
3
4
5
6
7
8
9

             
                     
 
                

                                                                                                                
                                                                       
                                                         



                    
 
                                      



                                                             
    
                            
                                  
                                                      







                                               
                                                                                               


                                            
  

 
import sbt._
import Keys._
import scala.util.Try

object JniKeys {
  val javahHeaderDirectory = settingKey[File]("Directory where generated javah header files are placed.")
  val javahClasses = settingKey[Seq[String]]("Fully qualified names of classes containing native declarations.")
  val javahClasspath = taskKey[Seq[File]]("Classpath to use in javah.")
  val javah = taskKey[Seq[File]]("Generate JNI headers.")
}

object JniDefaults {
  import JniKeys._

  val settings: Seq[Setting[_]] = Seq(
    javahHeaderDirectory := baseDirectory.value,
    javahClasspath := Seq((classDirectory in Compile).value),
    javah := javahImpl.value
  )
    
  def javahImpl = Def.task {
    val jcp = javahClasspath.value
    val cp = jcp.mkString(sys.props("path.separator"))
    for (clazz <- javahClasses.value) {
      val parts = Seq(
        "javah",
        "-d", javahHeaderDirectory.value,
        "-classpath", cp,
        clazz)
      val cmd = parts.mkString(" ")
      val ev = Process(cmd) ! streams.value.log
      if (ev != 0) throw new RuntimeException(s"Error occured running javah. Exit code: ${ev}")
    }
    IO.listFiles(javahHeaderDirectory.value)
  }
  
}