diff options
Diffstat (limited to 'CommonBuild.sc')
| -rw-r--r-- | CommonBuild.sc | 94 |
1 files changed, 94 insertions, 0 deletions
diff --git a/CommonBuild.sc b/CommonBuild.sc new file mode 100644 index 00000000..a9a4e1a2 --- /dev/null +++ b/CommonBuild.sc @@ -0,0 +1,94 @@ +import ammonite.ops._ +import mill._ +import mill.scalalib._ + +def scalacOptionsVersion(scalaVersion: String): Seq[String] = { + Seq() ++ { + // If we're building with Scala > 2.11, enable the compile option + // switch to support our anonymous Bundle definitions: + // https://github.com/scala/bug/issues/10047 + if (scalaVersion.startsWith("2.11.")) { + Seq() + } else { + Seq( + "-Xsource:2.11", + "-Ywarn-unused:imports", + "-Ywarn-unused:locals" + ) + } + } +} + +def javacOptionsVersion(scalaVersion: String): Seq[String] = { + Seq() ++ { + // Scala 2.12 requires Java 8. We continue to generate + // Java 7 compatible code for Scala 2.11 + // for compatibility with old clients. + if (scalaVersion.startsWith("2.11.")) { + Seq("-source", "1.7", "-target", "1.7") + } else { + Seq("-source", "1.8", "-target", "1.8") + } + } +} + +// Define our own BuildInfo since mill doesn't currently have one. +trait BuildInfo extends ScalaModule { outer => + + def buildInfoObjectName: String = "BuildInfo" + + def buildInfoMembers: T[Map[String, String]] = T { + Map.empty[String, String] + } + + private def generateBuildInfo(outputPath: Path, members: Map[String, String]) = { + val outputFile = outputPath / "BuildInfo.scala" + val packageName = members.getOrElse("buildInfoPackage", "") + val packageDef = if (packageName != "") { + s"package ${packageName}" + } else { + "" + } + val internalMembers = + members + .map { + case (name, value) => s""" val ${name}: String = "${value}"""" + } + .mkString("\n") + write(outputFile, + s""" + |${packageDef} + |case object ${buildInfoObjectName}{ + |$internalMembers + | override val toString: String = { + | "buildInfoPackage: %s, version: %s, scalaVersion: %s" format ( + | buildInfoPackage, version, scalaVersion + | ) + | } + |} + """.stripMargin) + outputPath + } + + override def generatedSources = T { + super.generatedSources() :+ PathRef(generateBuildInfo(T.ctx().dest, buildInfoMembers())) + } +} + +// Define some file filters to exclude unwanted files from created jars. +type JarFileFilter = (Path, RelPath) => Boolean +// Exclude any `.DS_Store` files +val noDS_StoreFiles: JarFileFilter = (p: Path, relPath: RelPath) => { + relPath.last != ".DS_Store" +} + +// Exclude non-source files - accept all resource files, but only *.{java,scala} from source paths +val onlySourceFiles: JarFileFilter = (p: Path, relPath: RelPath) => { + p.last == "resources" || (relPath.ext == "scala" || relPath.ext == "java") +} + +// Apply a sequence of file filters - only accept files which satisfy all filters. +// We expect this to be curried, the resulting file filter passed to createJar() +def forallFilters(fileFilters: Seq[JarFileFilter])(p: Path, relPath: RelPath): Boolean = { + fileFilters.forall(f => f(p, relPath)) +} |
