aboutsummaryrefslogtreecommitdiff
path: root/project/Jni.scala
diff options
context:
space:
mode:
Diffstat (limited to 'project/Jni.scala')
-rw-r--r--project/Jni.scala37
1 files changed, 37 insertions, 0 deletions
diff --git a/project/Jni.scala b/project/Jni.scala
new file mode 100644
index 0000000..0263786
--- /dev/null
+++ b/project/Jni.scala
@@ -0,0 +1,37 @@
+import sbt._
+import Keys._
+import com.github.jodersky.build.NativeKeys._
+
+object Jni {
+ 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 javah = taskKey[Seq[File]]("Generate JNI headers.")
+
+ val defaultSettings: Seq[Setting[_]] = Seq(
+ jdkHome := file(sys.env("JAVA_HOME")),
+ javahHeaderDirectory := (sourceManaged in Native).value / "javah",
+ javah := {
+
+ val cp = (fullClasspath in Compile).value.map(_.data.getAbsolutePath).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)
+ },
+ sourceGenerators in Native <+= javah map {headers =>
+ headers
+ },
+ includeDirectories in Native += javahHeaderDirectory.value,
+ javah <<= (javah dependsOn (compile in Compile)),
+ includeDirectories in Native += jdkHome.value / "include"
+ )
+}
+