project/Common.scala (46 lines of code) (raw):

/* * Licensed to the Apache Software Foundation (ASF) under one or more * license agreements; and to You under the Apache License, version 2.0: * * https://www.apache.org/licenses/LICENSE-2.0 * * This file is part of the Apache Pekko project, which was derived from Akka. */ /* * Copyright (C) 2017-2020 Lightbend Inc. <https://www.lightbend.com> */ import sbt._ import Keys._ import com.lightbend.paradox.projectinfo.ParadoxProjectInfoPluginKeys._ import com.typesafe.tools.mima.plugin.MimaKeys._ object Common extends AutoPlugin { override def trigger: PluginTrigger = allRequirements override lazy val projectSettings = Seq( projectInfoVersion := (if (isSnapshot.value) "snapshot" else version.value), scalacOptions ++= Seq( "-deprecation", "-encoding", "UTF-8", // yes, this is 2 args "-unchecked", "-Ywarn-dead-code", // Silence deprecation notices for changes introduced in Scala 2.12 // Can be removed when we drop support for Scala 2.12: "-Wconf:msg=object JavaConverters in package collection is deprecated:s", "-Wconf:msg=is deprecated \\(since 2\\.13\\.:s", // tolerate deprecations from Akka 2.6.0 until Pekko 1.1.x where we clean up "-Wconf:cat=deprecation&msg=since Akka 2\\.6\\.:s", // tolerate deprecations from Akka HTTP 10.2.0 until Pekko 1.1.x where we clean up "-Wconf:cat=deprecation&msg=since Akka HTTP 10\\.2\\.:s", "-Wconf:msg=reached max recursion depth:s", "-release:8"), scalacOptions ++= onlyOnScala2(Seq( "-Xlint", // Silence deprecation notices for changes introduced in Scala 2.12 // Can be removed when we drop support for Scala 2.12: "-Wconf:cat=unused-imports&origin=org.apache.pekko.http.ccompat.*:s", // Exhaustivity checking is only useful for simple sealed hierarchies and matches without filters. // In all other cases, the warning is non-actionable: you get spurious warnings that need to be suppressed // verbosely. So, opt out of those in general. "-Wconf:cat=other-match-analysis&msg=match may not be exhaustive:s")).value, scalacOptions ++= onlyOnScala3(Seq("-Wconf:cat=deprecation:s")).value, javacOptions ++= Seq("-encoding", "UTF-8") ++ onlyOnJdk8("-source", "1.8") ++ onlyAfterJdk8("--release", "8"), // restrict to 'compile' scope because otherwise it is also passed to // javadoc and -target is not valid there. // https://github.com/sbt/sbt/issues/1785 Compile / compile / javacOptions ++= // From jdk9 onwards this is covered by the '-release' flag above onlyOnJdk8("-target", "1.8"), mimaReportSignatureProblems := true, Global / parallelExecution := sys.props.getOrElse("pekko.http.parallelExecution", "true") != "false") val specificationVersion: String = sys.props("java.specification.version") def isJdk8: Boolean = VersionNumber(specificationVersion).matchesSemVer(SemanticSelector(s"=1.8")) def onlyOnJdk8[T](values: T*): Seq[T] = if (isJdk8) values else Seq.empty[T] def onlyAfterJdk8[T](values: T*): Seq[T] = if (isJdk8) Seq.empty[T] else values def onlyAfterScala212[T](values: Seq[T]): Def.Initialize[Seq[T]] = Def.setting { if (scalaMinorVersion.value >= 12) values else Seq.empty[T] } def onlyOnScala2[T](values: Seq[T]): Def.Initialize[Seq[T]] = Def.setting { if (scalaVersion.value.startsWith("3")) Seq.empty[T] else values } def onlyOnScala3[T](values: Seq[T]): Def.Initialize[Seq[T]] = Def.setting { if (scalaVersion.value.startsWith("3")) values else Seq.empty[T] } def scalaMinorVersion: Def.Initialize[Long] = Def.setting { CrossVersion.partialVersion(scalaVersion.value).get._2 } }