aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJakob Odersky <jodersky@gmail.com>2015-03-23 12:01:38 +0100
committerJakob Odersky <jodersky@gmail.com>2015-03-23 12:01:38 +0100
commitd46a344b15fde5fabdb0917f321d3169242edc55 (patch)
tree279d4e46653da431487c902866d18d683a5c104d
parentdac8f076338ad121ce482993b226f945304969dc (diff)
downloadsbt-mavlink-d46a344b15fde5fabdb0917f321d3169242edc55.tar.gz
sbt-mavlink-d46a344b15fde5fabdb0917f321d3169242edc55.tar.bz2
sbt-mavlink-d46a344b15fde5fabdb0917f321d3169242edc55.zip
generate bindings only when neededv0.3
-rw-r--r--mavlink-library/src/main/scala/com/github/jodersky/mavlink/Generator.scala21
-rw-r--r--mavlink-plugin/src/main/scala/com/github/jodersky/mavlink/sbt/SbtMavlink.scala16
-rw-r--r--project/Build.scala2
3 files changed, 21 insertions, 18 deletions
diff --git a/mavlink-library/src/main/scala/com/github/jodersky/mavlink/Generator.scala b/mavlink-library/src/main/scala/com/github/jodersky/mavlink/Generator.scala
index 9b5b447..4f8b207 100644
--- a/mavlink-library/src/main/scala/com/github/jodersky/mavlink/Generator.scala
+++ b/mavlink-library/src/main/scala/com/github/jodersky/mavlink/Generator.scala
@@ -21,18 +21,21 @@ class Generator(dialect: Dialect) {
}
/**
- * Generates Scala code implementing MAVLink.
- * @return a list containing proposed Scala file names pointing to their contents
+ * Represents a generator's target file
+ * @param path the path of the generated file
+ * @param generate contents of the generated file
*/
- def generate(): List[(String, String)] = {
- val context = Context(dialect.version)
+ case class Target(path: String, generate: () => String)
+ def targets: List[Target] = {
+ val context = Context(dialect.version)
List(
- "org/mavlink/Assembler.scala" -> org.mavlink.txt.Assembler(context).body,
- "org/mavlink/Crc.scala" -> org.mavlink.txt.Crc(context).body,
- "org/mavlink/Packet.scala" -> org.mavlink.txt.Packet(context, maxPayloadLength, extraCrcs).body,
- "org/mavlink/Parser.scala" -> org.mavlink.txt.Parser(context).body,
- "org/mavlink/messages/messages.scala" -> org.mavlink.messages.txt.messages(context, dialect.messages).body
+ Target("org/mavlink/Assembler.scala", () => org.mavlink.txt.Assembler(context).body),
+ Target("org/mavlink/Crc.scala", () => org.mavlink.txt.Crc(context).body),
+ Target("org/mavlink/Packet.scala", () => org.mavlink.txt.Packet(context, maxPayloadLength, extraCrcs).body),
+ Target("org/mavlink/Parser.scala", () => org.mavlink.txt.Parser(context).body),
+ Target("org/mavlink/messages/messages.scala", () => org.mavlink.messages.txt.messages(context, dialect.messages).body)
)
}
+
} \ No newline at end of file
diff --git a/mavlink-plugin/src/main/scala/com/github/jodersky/mavlink/sbt/SbtMavlink.scala b/mavlink-plugin/src/main/scala/com/github/jodersky/mavlink/sbt/SbtMavlink.scala
index 613538c..e1b044b 100644
--- a/mavlink-plugin/src/main/scala/com/github/jodersky/mavlink/sbt/SbtMavlink.scala
+++ b/mavlink-plugin/src/main/scala/com/github/jodersky/mavlink/sbt/SbtMavlink.scala
@@ -38,20 +38,20 @@ object SbtMavlink extends AutoPlugin {
val dialectDefinition = XML.loadFile(dialectDefinitionFile)
val dialect = (new Parser(reporter)).parseDialect(dialectDefinition)
- val pathToSource = (new Generator(dialect)).generate()
+ val targets = (new Generator(dialect)).targets
val outDirectory = mavlinkTarget.value
- streams.value.log.info("Generating mavlink files...")
+ val files = for (tgt <- targets) yield {
+ val file = outDirectory / tgt.path
- val files = for ((path, source) <- pathToSource) yield {
- val file = outDirectory / path
- streams.value.log.info("Generating " + file)
- IO.write(file, source)
+ if (dialectDefinitionFile.lastModified > file.lastModified) {
+ streams.value.log.info("Generating mavlink binding " + file)
+ IO.write(file, tgt.generate())
+ }
file.getAbsoluteFile
}
-
- streams.value.log.info("Done generating mavlink files")
+
files
}
diff --git a/project/Build.scala b/project/Build.scala
index 4ab6a80..0f7acc2 100644
--- a/project/Build.scala
+++ b/project/Build.scala
@@ -10,7 +10,7 @@ object ApplicationBuild extends Build {
scalaVersion := "2.10.4",
scalacOptions ++= Seq("-feature", "-deprecation"),
organization := "com.github.jodersky",
- version := "0.2-SNAPSHOT"
+ version := "0.3-SNAPSHOT"
) ++ publishSettings
lazy val root = (