summaryrefslogtreecommitdiff
path: root/contrib/buildinfo/src/BuildInfo.scala
diff options
context:
space:
mode:
Diffstat (limited to 'contrib/buildinfo/src/BuildInfo.scala')
-rw-r--r--contrib/buildinfo/src/BuildInfo.scala44
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()
+
+}