diff options
author | Jakob Odersky <jodersky@gmail.com> | 2015-03-23 12:01:38 +0100 |
---|---|---|
committer | Jakob Odersky <jodersky@gmail.com> | 2015-03-23 12:01:38 +0100 |
commit | d46a344b15fde5fabdb0917f321d3169242edc55 (patch) | |
tree | 279d4e46653da431487c902866d18d683a5c104d | |
parent | dac8f076338ad121ce482993b226f945304969dc (diff) | |
download | sbt-mavlink-d46a344b15fde5fabdb0917f321d3169242edc55.tar.gz sbt-mavlink-d46a344b15fde5fabdb0917f321d3169242edc55.tar.bz2 sbt-mavlink-d46a344b15fde5fabdb0917f321d3169242edc55.zip |
generate bindings only when neededv0.3
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 = ( |