diff options
Diffstat (limited to 'contrib/buildinfo/src/BuildInfo.scala')
-rw-r--r-- | contrib/buildinfo/src/BuildInfo.scala | 44 |
1 files changed, 44 insertions, 0 deletions
diff --git a/contrib/buildinfo/src/BuildInfo.scala b/contrib/buildinfo/src/BuildInfo.scala new file mode 100644 index 00000000..1c8d9d9e --- /dev/null +++ b/contrib/buildinfo/src/BuildInfo.scala @@ -0,0 +1,44 @@ +package mill.contrib + +import mill.T +import mill.define.Target +import mill.api.PathRef +import mill.scalalib.ScalaModule +import mill.api.Ctx + +trait BuildInfo extends ScalaModule { + + def buildInfoPackageName: Option[String] = None + + def buildInfoObjectName: String = "BuildInfo" + + def buildInfoMembers: T[Map[String, String]] = T { + Map.empty[String, String] + } + + private def generateBuildInfo(members: Map[String, Any])(implicit dest: Ctx.Dest): Seq[PathRef] = + if(!members.isEmpty){ + val outputFile = dest.dest / "BuildInfo.scala" + val internalMembers = + members + .map { + case (name, value) => s""" def ${name} = "${value}"""" + } + .mkString("\n") + os.write(outputFile, + s"""|${buildInfoPackageName.map(p => s"package ${p}").getOrElse("")} + |object ${buildInfoObjectName} { + |$internalMembers + |}""".stripMargin) + Seq(PathRef(outputFile)) + } else { + Seq.empty[PathRef] + } + + def buildInfo = T { + generateBuildInfo(buildInfoMembers()) + } + + override def generatedSources: Target[Seq[PathRef]] = super.generatedSources() ++ buildInfo() + +} |