diff options
author | Jakob Odersky <jodersky@gmail.com> | 2015-03-19 16:08:46 +0100 |
---|---|---|
committer | Jakob Odersky <jodersky@gmail.com> | 2015-03-19 16:08:46 +0100 |
commit | 1cf6e37dc356144f3da2a2dcde75d1ced8bc5ad6 (patch) | |
tree | 287a8e4ce18d3a8c299d7b2a91599a7a48c7b59d /mavlink-plugin | |
download | sbt-mavlink-1cf6e37dc356144f3da2a2dcde75d1ced8bc5ad6.tar.gz sbt-mavlink-1cf6e37dc356144f3da2a2dcde75d1ced8bc5ad6.tar.bz2 sbt-mavlink-1cf6e37dc356144f3da2a2dcde75d1ced8bc5ad6.zip |
initial commit
Diffstat (limited to 'mavlink-plugin')
-rw-r--r-- | mavlink-plugin/src/main/scala/com/github/jodersky/mavlink/sbt/MavlinkKeys.scala | 14 | ||||
-rw-r--r-- | mavlink-plugin/src/main/scala/com/github/jodersky/mavlink/sbt/SbtMavlink.scala | 51 |
2 files changed, 65 insertions, 0 deletions
diff --git a/mavlink-plugin/src/main/scala/com/github/jodersky/mavlink/sbt/MavlinkKeys.scala b/mavlink-plugin/src/main/scala/com/github/jodersky/mavlink/sbt/MavlinkKeys.scala new file mode 100644 index 0000000..e09a623 --- /dev/null +++ b/mavlink-plugin/src/main/scala/com/github/jodersky/mavlink/sbt/MavlinkKeys.scala @@ -0,0 +1,14 @@ +package com.github.jodersky.mavlink.sbt + +import sbt._ +import sbt.Keys._ +import java.io.File + +object MavlinkKeys { + + lazy val mavlinkDialect = settingKey[File]("Dialect definition from which to generate files.") + lazy val mavlinkTarget = settingKey[File]("Target directory to contain all generated mavlink files.") + + lazy val mavlinkGenerate = taskKey[Seq[File]]("Generate mavlink files.") + +}
\ 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 new file mode 100644 index 0000000..41a6bcf --- /dev/null +++ b/mavlink-plugin/src/main/scala/com/github/jodersky/mavlink/sbt/SbtMavlink.scala @@ -0,0 +1,51 @@ +package com.github.jodersky.mavlink.sbt + +import com.github.jodersky.mavlink.Parser +import com.github.jodersky.mavlink.Generator +import scala.xml.XML + +import MavlinkKeys._ +import sbt._ +import sbt.Keys._ +import sbt.plugins._ + +object SbtMavlink extends AutoPlugin { + + override def trigger = allRequirements + + override def requires = JvmPlugin //this is required as sourceGenerators are otherwise reset + + override lazy val projectSettings: Seq[Setting[_]] = Seq( + mavlinkDialect in Compile := (baseDirectory in Compile).value / "conf" / "mavlink.xml", + mavlinkTarget in Compile := (sourceManaged in Compile).value, + mavlinkGenerate in Compile := generationTask.value, + sourceGenerators in Compile += (mavlinkGenerate in Compile).taskValue + ) + + lazy val generationTask = Def.task[Seq[File]] { + val dialectDefinitionFile = (mavlinkDialect in Compile).value + + if (!dialectDefinitionFile.exists) sys.error( + "Dialect definition " + dialectDefinitionFile.getAbsolutePath + " does not exist." + ) + + val dialectDefinition = XML.loadFile(dialectDefinitionFile) + val dialect = Parser.parseDialect(dialectDefinition) + val pathToSource = (new Generator(dialect)).generate() + + val outDirectory = (mavlinkTarget in Compile).value + + streams.value.log.info("Generating mavlink files...") + + val files = for ((path, source) <- pathToSource) yield { + streams.value.log.debug("Generating " + path) + val file = outDirectory / path + IO.write(file, source) + file.getAbsoluteFile + } + + streams.value.log.info("Done generating mavlink files") + files + } + +} |