aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJakob Odersky <jodersky@gmail.com>2015-01-15 16:36:13 +0100
committerJakob Odersky <jodersky@gmail.com>2015-01-15 16:42:42 +0100
commit20c4d8950ac56ae99fe80c1acff961f25c7d2e2d (patch)
tree3e33b1d25d3a11bd8e90513935f4dc914c9e860c
parentd548c49b019845a1bf0c15da1a38db5eb48c8446 (diff)
downloadakka-serial-20c4d8950ac56ae99fe80c1acff961f25c7d2e2d.tar.gz
akka-serial-20c4d8950ac56ae99fe80c1acff961f25c7d2e2d.tar.bz2
akka-serial-20c4d8950ac56ae99fe80c1acff961f25c7d2e2d.zip
Remove dependencies on scala-io.
Thanks go to EAD Fritz <ead.fritz@gmail.com> for implementing something similar on his fork.
-rw-r--r--CHANGELOG.md3
-rw-r--r--flow/src/main/scala/com/github/jodersky/flow/internal/NativeLoader.scala61
-rw-r--r--project/Dependencies.scala2
-rw-r--r--project/FlowBuild.scala4
4 files changed, 45 insertions, 25 deletions
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 43f1285..557e3af 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,6 @@
+Version 2.0.10
+- Remove dependencies on scala-io
+
Version 2.0.9
- Fix termios initialization issues (#12)
diff --git a/flow/src/main/scala/com/github/jodersky/flow/internal/NativeLoader.scala b/flow/src/main/scala/com/github/jodersky/flow/internal/NativeLoader.scala
index 9f26ef0..2526293 100644
--- a/flow/src/main/scala/com/github/jodersky/flow/internal/NativeLoader.scala
+++ b/flow/src/main/scala/com/github/jodersky/flow/internal/NativeLoader.scala
@@ -1,37 +1,58 @@
package com.github.jodersky.flow.internal
import java.io.File
-
-import scalax.file.Path
-import scalax.io.Resource
+import java.io.FileOutputStream
+import java.io.InputStream
+import java.io.OutputStream
/** Handles loading of the current platform's native library for flow. */
object NativeLoader {
- private def os = System.getProperty("os.name").toLowerCase.filter(_ != ' ')
+ private final val BufferSize = 4096
- private def arch = System.getProperty("os.arch").toLowerCase
+ private def os = System.getProperty("os.name").toLowerCase.replaceAll("\\s", "")
- private def extractNative(nativeLibrary: String): Option[File] = {
- val fqlib = System.mapLibraryName(nativeLibrary) //fully qualified library name
-
- val in = NativeLoader.getClass().getResourceAsStream(s"/native/${os}-${arch}/${fqlib}")
- if (in == null) return None
+ private def arch = System.getProperty("os.arch").toLowerCase
- val temp = Path.createTempFile(nativeLibrary)
- Resource.fromInputStream(in).copyDataTo(temp)
- temp.fileOption
+ /** Extract a resource from this class loader to a temporary file. */
+ private def extract(path: String, prefix: String): Option[File] = {
+ var in: Option[InputStream] = None
+ var out: Option[OutputStream] = None
+
+ try {
+ in = Option(NativeLoader.getClass.getResourceAsStream(path))
+ if (in.isEmpty) return None
+
+ val file = File.createTempFile(prefix, "")
+ out = Some(new FileOutputStream(file))
+
+ val buffer = new Array[Byte](BufferSize)
+ var length = -1;
+ do {
+ length = in.get.read(buffer)
+ if (length != -1) out.get.write(buffer, 0, length)
+ } while (length != -1)
+
+ Some(file)
+ } finally {
+ in.foreach(_.close)
+ out.foreach(_.close)
+ }
}
- private def loadFromJar(nativeLibrary: String) = extractNative(nativeLibrary) match {
- case Some(file) => System.load(file.getAbsolutePath)
- case None => throw new UnsatisfiedLinkError("Cannot extract flow's native library, the native library may not exist for your specific architecture/OS combination.")
+ private def loadFromJar(library: String) = {
+ val fqlib = System.mapLibraryName(library) //fully qualified library name
+ extract(s"/native/${os}-${arch}/${fqlib}", fqlib) match {
+ case Some(file) => System.load(file.getAbsolutePath)
+ case None => throw new UnsatisfiedLinkError("Cannot extract flow's native library, " +
+ "the native library may not exist for your specific architecture/OS combination.")
+ }
}
-
- def load(nativeLibrary: String) = try {
- System.loadLibrary(nativeLibrary)
+
+ def load(library: String) = try {
+ System.loadLibrary(library)
} catch {
- case ex: UnsatisfiedLinkError => loadFromJar(nativeLibrary)
+ case ex: UnsatisfiedLinkError => loadFromJar(library)
}
} \ No newline at end of file
diff --git a/project/Dependencies.scala b/project/Dependencies.scala
index 0d97b22..d9c32be 100644
--- a/project/Dependencies.scala
+++ b/project/Dependencies.scala
@@ -3,7 +3,5 @@ import sbt._
object Dependencies {
lazy val akkaActor = "com.typesafe.akka" %% "akka-actor" % "2.3.8"
- lazy val ioCore = "com.github.scala-incubator.io" %% "scala-io-core" % "0.4.3"
- lazy val ioFile = "com.github.scala-incubator.io" %% "scala-io-file" % "0.4.3"
}
diff --git a/project/FlowBuild.scala b/project/FlowBuild.scala
index efac9b7..05883d6 100644
--- a/project/FlowBuild.scala
+++ b/project/FlowBuild.scala
@@ -70,9 +70,7 @@ object FlowBuild extends Build {
javahHeaderDirectory := (baseDirectory in ThisBuild).value / "flow-native" / "src",
javahClasses := Seq("com.github.jodersky.flow.internal.NativeSerial"),
compileOrder in Compile := CompileOrder.Mixed,
- libraryDependencies += Dependencies.akkaActor,
- libraryDependencies += Dependencies.ioCore,
- libraryDependencies += Dependencies.ioFile
+ libraryDependencies += Dependencies.akkaActor
)
)