Skip to content

Commit

Permalink
Merge pull request #1377 from Gedochao/fix-scala-2.12.1-to-2.12.4
Browse files Browse the repository at this point in the history
Fix calculation of Scala version and turn off the `-release` flag for 2.12.x < 2.12.5
  • Loading branch information
Gedochao authored Sep 20, 2022
2 parents 72ca7c7 + 59ab39b commit d363403
Show file tree
Hide file tree
Showing 3 changed files with 40 additions and 11 deletions.
15 changes: 11 additions & 4 deletions modules/build/src/main/scala/scala/build/Build.scala
Original file line number Diff line number Diff line change
Expand Up @@ -18,13 +18,14 @@ import scala.build.compiler.{ScalaCompiler, ScalaCompilerMaker}
import scala.build.errors.*
import scala.build.internal.resource.ResourceMapper
import scala.build.internal.{Constants, CustomCodeWrapper, MainClass, Util}
import scala.build.options.ScalaVersionUtil.maybeScalaPatchVersion
import scala.build.options.*
import scala.build.options.validation.ValidationException
import scala.build.postprocessing.*
import scala.collection.mutable.ListBuffer
import scala.concurrent.duration.DurationInt
import scala.util.Properties
import scala.util.control.NonFatal
import scala.util.{Properties, Try}

trait Build {
def inputs: Inputs
Expand Down Expand Up @@ -825,9 +826,15 @@ object Build {
Seq(ScalacOpt("-scalajs"))
else Nil

val scalacReleaseV = releaseFlagVersion
.map(v => List("-release", v).map(ScalacOpt(_)))
.getOrElse(Nil)
val scalacReleaseV =
// the -release flag is not supported for Scala 2.12.x < 2.12.5
if params.scalaVersion.startsWith("2.12") &&
params.scalaVersion.maybeScalaPatchVersion.exists(_ < 5)
then Nil
else
releaseFlagVersion
.map(v => List("-release", v).map(ScalacOpt(_)))
.getOrElse(Nil)

val scalapyOptions =
if (
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2380,6 +2380,20 @@ abstract class RunTestDefinitions(val scalaVersionOpt: Option[String])
}
}

if (actualScalaVersion.startsWith("2.12."))
test("verify that Scala version 2.12.x < 2.12.4 is respected and compiles correctly") {
TestInputs(os.rel / "s.sc" -> "println(util.Properties.versionNumberString)").fromRoot {
root =>
(1 until 4).foreach { scalaPatchVersion =>
val scala212VersionString = s"2.12.$scalaPatchVersion"
val res =
os.proc(TestUtil.cli, "run", ".", "-S", scala212VersionString, TestUtil.extraOptions)
.call(cwd = root)
expect(res.out.trim == scala212VersionString)
}
}
}

def scalapyNativeTest(): Unit = {
val inputs = TestInputs(
os.rel / "helloscalapy.sc" ->
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ import scala.build.errors.{
import scala.build.internal.Regexes.scala2NightlyRegex
import scala.build.internal.Util
import scala.concurrent.duration.DurationInt
import scala.util.Try
import scala.util.control.NonFatal

object ScalaVersionUtil {
Expand Down Expand Up @@ -221,13 +222,14 @@ object ScalaVersionUtil {
if (filtered.isEmpty) matchingStableVersions
else filtered
}.filter(v => isSupportedVersion(v.repr))
if (validMatchingVersions.isEmpty)
Left(new UnsupportedScalaVersionError(
scalaVersionStringArg,
latestSupportedStableVersions
))
else
Right(validMatchingVersions.max.repr)

validMatchingVersions.find(_.repr == scalaVersionStringArg) match {
case Some(v) => Right(v.repr)
case None if validMatchingVersions.nonEmpty => Right(validMatchingVersions.max.repr)
case _ => Left(
new UnsupportedScalaVersionError(scalaVersionStringArg, latestSupportedStableVersions)
)
}
}
}

Expand Down Expand Up @@ -290,4 +292,10 @@ object ScalaVersionUtil {
.distinct
}

extension (sv: String) {
def maybeScalaPatchVersion: Option[Int] = sv
.split('.').drop(2).headOption
.flatMap(_.split('-').headOption)
.flatMap(pv => Try(pv.toInt).toOption)
}
}

0 comments on commit d363403

Please sign in to comment.