From 9344cd6a9d437198bc6baf32d225d8a6c4a0c462 Mon Sep 17 00:00:00 2001 From: Jakob Odersky Date: Sun, 30 Jun 2013 15:07:11 +0200 Subject: remove plugin dependencies --- project/jni.scala | 41 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) create mode 100644 project/jni.scala (limited to 'project/jni.scala') 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) + } + +} + -- cgit v1.2.3