aboutsummaryrefslogtreecommitdiff
path: root/project/jni.scala
diff options
context:
space:
mode:
authorJakob Odersky <jodersky@gmail.com>2013-06-30 15:07:11 +0200
committerJakob Odersky <jodersky@gmail.com>2013-06-30 15:07:11 +0200
commit9344cd6a9d437198bc6baf32d225d8a6c4a0c462 (patch)
treee9ed3dc94bc6d2d49837438e413937125ba0be68 /project/jni.scala
parent6fa2c93ca687e8900b00bb1403588107c7f63cbd (diff)
downloadakka-serial-9344cd6a9d437198bc6baf32d225d8a6c4a0c462.tar.gz
akka-serial-9344cd6a9d437198bc6baf32d225d8a6c4a0c462.tar.bz2
akka-serial-9344cd6a9d437198bc6baf32d225d8a6c4a0c462.zip
remove plugin dependencies
Diffstat (limited to 'project/jni.scala')
-rw-r--r--project/jni.scala41
1 files changed, 41 insertions, 0 deletions
diff --git a/project/jni.scala b/project/jni.scala
new file mode 100644
index 0000000..7cde93b
--- /dev/null
+++ b/project/jni.scala
@@ -0,0 +1,41 @@
+import sbt._
+import Keys._
+import NativeKeys._
+
+object JniKeys {
+ val jdkHome = settingKey[File]("Home of JDK.")
+ 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 defaultSettings: Seq[Setting[_]] = Seq(
+ jdkHome := file(sys.env("JAVA_HOME")),
+ javahHeaderDirectory := (sourceManaged in Native).value / "javah",
+ javah := javahImpl.value,
+ sourceGenerators in Native <+= javah map { headers => headers},
+ includeDirectories in Native += javahHeaderDirectory.value,
+ includeDirectories in Native += jdkHome.value / "include")
+
+ def javahImpl = Def.task {
+ val cps = javahClasspath.value
+ val cp = cps.mkString(":")
+ 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("Error occured running javah.")
+ }
+ IO.listFiles(javahHeaderDirectory.value)
+ }
+
+}
+