From 1cf6e37dc356144f3da2a2dcde75d1ced8bc5ad6 Mon Sep 17 00:00:00 2001 From: Jakob Odersky Date: Thu, 19 Mar 2015 16:08:46 +0100 Subject: initial commit --- .../github/jodersky/mavlink/sbt/MavlinkKeys.scala | 14 ++++++ .../github/jodersky/mavlink/sbt/SbtMavlink.scala | 51 ++++++++++++++++++++++ 2 files changed, 65 insertions(+) create mode 100644 mavlink-plugin/src/main/scala/com/github/jodersky/mavlink/sbt/MavlinkKeys.scala create mode 100644 mavlink-plugin/src/main/scala/com/github/jodersky/mavlink/sbt/SbtMavlink.scala (limited to 'mavlink-plugin') 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 + } + +} -- cgit v1.2.3