aboutsummaryrefslogtreecommitdiff
path: root/mavlink-plugin
diff options
context:
space:
mode:
authorJakob Odersky <jodersky@gmail.com>2015-03-19 16:08:46 +0100
committerJakob Odersky <jodersky@gmail.com>2015-03-19 16:08:46 +0100
commit1cf6e37dc356144f3da2a2dcde75d1ced8bc5ad6 (patch)
tree287a8e4ce18d3a8c299d7b2a91599a7a48c7b59d /mavlink-plugin
downloadsbt-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.scala14
-rw-r--r--mavlink-plugin/src/main/scala/com/github/jodersky/mavlink/sbt/SbtMavlink.scala51
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
+ }
+
+}