Skip to content

Commit

Permalink
Cross build to Scala 2.12
Browse files Browse the repository at this point in the history
  • Loading branch information
eed3si9n committed Jan 7, 2017
1 parent 55fe01d commit e2836a9
Show file tree
Hide file tree
Showing 8 changed files with 55 additions and 50 deletions.
1 change: 1 addition & 0 deletions .java-version
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
1.8
10 changes: 7 additions & 3 deletions .travis.yml
Original file line number Diff line number Diff line change
@@ -1,7 +1,11 @@
language: scala

scala: 2.11.8
scala:
- 2.11.8
- 2.12.1

jdk: oraclejdk8
script:
- sbt -Dfile.encoding=UTF8 -J-XX:ReservedCodeCacheSize=256M "publishBridgesAndTest $TRAVIS_SCALA_VERSION"

script: sbt -J-XX:ReservedCodeCacheSize=128m "publishBridgesAndTest $TRAVIS_SCALA_VERSION"
jdk:
- oraclejdk8
3 changes: 3 additions & 0 deletions MIGRATION.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
- Support for Scala 2.7, 2.8 and 2.9 has been dropped. [#86][86]

[86]: https://github.com/sbt/zinc/pull/86
58 changes: 26 additions & 32 deletions build.sbt
Original file line number Diff line number Diff line change
Expand Up @@ -8,40 +8,35 @@ import com.typesafe.tools.mima.core._, ProblemFilters._
def baseVersion = "1.0.0-X6"
def internalPath = file("internal")

lazy val compilerBridgeScalaVersions = Seq(scala210, scala211)
lazy val compilerBridgeScalaVersions = Seq(scala210, scala211, scala212)

def commonSettings: Seq[Setting[_]] = Seq(
scalaVersion := scala211,
scalaVersion := scala212,
// publishArtifact in packageDoc := false,
resolvers += Resolver.typesafeIvyRepo("releases"),
resolvers += Resolver.sonatypeRepo("snapshots"),
resolvers += "bintray-sbt-maven-releases" at "https://dl.bintray.com/sbt/maven-releases/",
resolvers += Resolver.url("bintray-sbt-ivy-snapshots", new URL("https://dl.bintray.com/sbt/ivy-snapshots/"))(Resolver.ivyStylePatterns),
// concurrentRestrictions in Global += Util.testExclusiveRestriction,
testOptions += Tests.Argument(TestFrameworks.ScalaCheck, "-w", "1"),
javacOptions in compile ++= Seq("-target", "7", "-source", "7", "-Xlint", "-Xlint:-serial"),
javacOptions in compile ++= Seq("-Xlint", "-Xlint:-serial"),
incOptions := incOptions.value.withNameHashing(true),
crossScalaVersions := Seq(scala211),
scalacOptions ++= Seq(
"-encoding", "utf8",
"-deprecation",
"-feature",
"-unchecked",
"-Xlint",
"-language:higherKinds",
"-language:implicitConversions",
"-Xfuture",
"-Yinline-warnings",
"-Xfatal-warnings",
"-Yno-adapted-args",
"-Ywarn-dead-code",
"-Ywarn-numeric-widen",
"-Ywarn-value-discard"),
previousArtifact := None, // Some(organization.value %% moduleName.value % "1.0.0"),
crossScalaVersions := Seq(scala211, scala212),
mimaPreviousArtifacts := Set(), // Some(organization.value %% moduleName.value % "1.0.0"),
publishArtifact in Test := false,
commands += publishBridgesAndTest
)

def relaxNon212: Seq[Setting[_]] = Seq(
scalacOptions := {
val old = scalacOptions.value
scalaBinaryVersion.value match {
case "2.12" => old
case _ => old filterNot Set("-Xfatal-warnings", "-deprecation", "-Ywarn-unused", "-Ywarn-unused-import")
}
}
)

def minimalSettings: Seq[Setting[_]] = commonSettings

// def minimalSettings: Seq[Setting[_]] =
Expand Down Expand Up @@ -208,7 +203,7 @@ lazy val zincCompileCore = (project in internalPath / "zinc-compile-core").
configure(addBaseSettingsAndTestDeps).
settings(
name := "zinc Compile Core",
libraryDependencies ++= Seq(scalaCompiler.value % Test, launcherInterface),
libraryDependencies ++= Seq(scalaCompiler.value % Test, launcherInterface, parserCombinator),
unmanagedJars in Test <<= (packageSrc in compilerBridge in Compile).map(x => Seq(x).classpath)
).
configure(addSbtUtilLogging, addSbtIO, addSbtUtilControl)
Expand All @@ -222,7 +217,8 @@ lazy val compilerInterface = (project in internalPath / "compiler-interface").
minimalSettings,
// javaOnlySettings,
name := "Compiler Interface",
crossScalaVersions := Seq(scala211),
crossScalaVersions := Seq(scala212),
relaxNon212,
libraryDependencies ++= Seq(scalaLibrary.value % Test),
exportJars := true,
watchSources <++= apiDefinitions,
Expand All @@ -241,6 +237,7 @@ lazy val compilerBridge: Project = (project in internalPath / "compiler-bridge")
settings(
baseSettings,
crossScalaVersions := compilerBridgeScalaVersions,
relaxNon212,
libraryDependencies += scalaCompiler.value % "provided",
autoScalaLibrary := false,
// precompiledSettings,
Expand All @@ -255,14 +252,8 @@ lazy val compilerBridge: Project = (project in internalPath / "compiler-bridge")
javaOptions in Test += "-Xmx1G",
scalaSource in Compile := {
scalaVersion.value match {
case v if v startsWith "2.11" => baseDirectory.value / "src" / "main" / "scala"
case _ => baseDirectory.value / "src-2.10" / "main" / "scala"
}
},
scalacOptions := {
scalaVersion.value match {
case v if v startsWith "2.11" => scalacOptions.value
case _ => scalacOptions.value filterNot (Set("-Xfatal-warnings", "-deprecation") contains _)
case v if v startsWith "2.10" => baseDirectory.value / "src-2.10" / "main" / "scala"
case _ => baseDirectory.value / "src" / "main" / "scala"
}
},
altPublishSettings
Expand All @@ -276,7 +267,8 @@ lazy val zincApiInfo = (project in internalPath / "zinc-apiinfo").
configure(addBaseSettingsAndTestDeps).
settings(
name := "zinc ApiInfo",
crossScalaVersions := compilerBridgeScalaVersions
crossScalaVersions := compilerBridgeScalaVersions,
relaxNon212
)

// Utilities related to reflection, managing Scala versions, and custom class loaders
Expand All @@ -286,6 +278,7 @@ lazy val zincClasspath = (project in internalPath / "zinc-classpath").
settings(
name := "zinc Classpath",
crossScalaVersions := compilerBridgeScalaVersions,
relaxNon212,
libraryDependencies ++= Seq(scalaCompiler.value,
launcherInterface)
).
Expand All @@ -297,7 +290,8 @@ lazy val zincClassfile = (project in internalPath / "zinc-classfile").
configure(addBaseSettingsAndTestDeps).
settings(
name := "zinc Classfile",
crossScalaVersions := compilerBridgeScalaVersions
crossScalaVersions := compilerBridgeScalaVersions,
relaxNon212
).
configure(addSbtIO, addSbtUtilLogging)

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,8 @@ class ExtractUsedNamesPerformanceSpecification extends UnitSpec {
}

val TestResource = "/ExtractUsedNamesPerformance.scala.source"
val scala210diff = Set("Any", "Nothing", "_root_", "StringAdd")
// Some difference between 2.10, 2.11, and 2.12
val scalaDiff = Set("Any", "Nothing", "_root_", "StringAdd", "Option")

it should "be executed in reasonable time" in {
var zipfs: Option[FileSystem] = None
Expand All @@ -47,13 +48,13 @@ class ExtractUsedNamesPerformanceSpecification extends UnitSpec {
val expectedNamesForDepFn1 = Set("DepFn1", "Out", "T", "AnyRef", "scala")
val expectedNamesForHNil = Set("x", "package", "HNil", "ScalaRunTime", "T", "Iterator", "Boolean", "$" + "isInstanceOf", "::", "Nothing", "x$1", "acme", "typedProductIterator", "Int", "<init>", "apply", "Object", "IndexOutOfBoundsException", "scala", "HList", "toString", "H", "Serializable", "h", "Product", "Any", "runtime", "matchEnd3", "String")
val expectedNamesForHList = Set("Tupler", "acme", "scala", "Serializable", "Product")
assert(usedNames("acme.Tupler") -- scala210diff === expectedNamesForTupler -- scala210diff)
assert(usedNames("acme.TuplerInstances") -- scala210diff === expectedNamesForTuplerInstances -- scala210diff)
assert(usedNames("acme.TuplerInstances.<refinement>") -- scala210diff === expectedNamesForRefinement -- scala210diff)
assert(usedNames("acme.$colon$colon") -- scala210diff === `expectedNamesFor::` -- scala210diff)
assert(usedNames("acme.DepFn1") -- scala210diff === expectedNamesForDepFn1 -- scala210diff)
assert(usedNames("acme.HNil") -- scala210diff === expectedNamesForHNil -- scala210diff)
assert(usedNames("acme.HList") -- scala210diff === expectedNamesForHList -- scala210diff)
assert(usedNames("acme.Tupler") -- scalaDiff === expectedNamesForTupler -- scalaDiff)
assert(usedNames("acme.TuplerInstances") -- scalaDiff === expectedNamesForTuplerInstances -- scalaDiff)
assert(usedNames("acme.TuplerInstances.<refinement>") -- scalaDiff === expectedNamesForRefinement -- scalaDiff)
assert(usedNames("acme.$colon$colon") -- scalaDiff === `expectedNamesFor::` -- scalaDiff)
assert(usedNames("acme.DepFn1") -- scalaDiff === expectedNamesForDepFn1 -- scalaDiff)
assert(usedNames("acme.HNil") -- scalaDiff === expectedNamesForHNil -- scalaDiff)
assert(usedNames("acme.HList") -- scalaDiff === expectedNamesForHList -- scalaDiff)
}

it should "correctly find Out0 (not stored in inspected trees) both in TuplerInstances and TuplerInstances.<refinement>" in {
Expand All @@ -70,8 +71,8 @@ class ExtractUsedNamesPerformanceSpecification extends UnitSpec {
val usedNames = compilerForTesting.extractUsedNamesFromSrc(src)
val expectedNamesForTuplerInstances = Set("Tupler", "AnyRef", "L", "Out0", "scala", "HList")
val expectedNamesForTuplerInstancesRefinement = Set("Out0")
assert(usedNames("TuplerInstances") -- scala210diff === expectedNamesForTuplerInstances -- scala210diff)
assert(usedNames("TuplerInstances.<refinement>") -- scala210diff === expectedNamesForTuplerInstancesRefinement -- scala210diff)
assert(usedNames("TuplerInstances") -- scalaDiff === expectedNamesForTuplerInstances -- scalaDiff)
assert(usedNames("TuplerInstances.<refinement>") -- scalaDiff === expectedNamesForTuplerInstancesRefinement -- scalaDiff)
}

it should "correctly collect used names from macro extension" in {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -77,8 +77,8 @@ abstract class BridgeProviderSpecification extends BaseIvySpecification {

def compilerBridgeId(scalaVersion: String) =
scalaVersion match {
case sc if sc startsWith "2.11" => "compiler-bridge_2.11"
case _ => "compiler-bridge_2.10"
case sc if (sc startsWith "2.10.") => "compiler-bridge_2.10"
case _ => "compiler-bridge_2.12"
}

def scalaLoader(jars: Seq[File]) = new URLClassLoader(sbt.io.Path.toURLs(jars), ClasspathUtilities.rootLoader)
Expand Down
6 changes: 4 additions & 2 deletions project/Dependencies.scala
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ object Dependencies {
val scala293 = "2.9.3"
val scala210 = "2.10.6"
val scala211 = "2.11.8"
val scala212 = "2.12.1"

val bootstrapSbtVersion = "0.13.8"
private val ioVersion = "1.0.0-M9"
Expand Down Expand Up @@ -57,11 +58,12 @@ object Dependencies {

def addSbtLm(p: Project): Project = addSbtModule(p, sbtLmPath, "lm", libraryManagement)

val scalaLibrary = Def.setting { "org.scala-lang" % "scala-compiler" % scalaVersion.value }
val scalaLibrary = Def.setting { "org.scala-lang" % "scala-library" % scalaVersion.value }
val scalaCompiler = Def.setting { "org.scala-lang" % "scala-compiler" % scalaVersion.value }
val scalaReflect = Def.setting { "org.scala-lang" % "scala-reflect" % scalaVersion.value }

val sbinary = "org.scala-sbt" %% "sbinary" % "0.4.3"
val parserCombinator = "org.scala-lang.modules" %% "scala-parser-combinators" % "1.0.5"
val sbinary = "org.scala-sbt" %% "sbinary" % "0.4.4"
val scalaCheck = "org.scalacheck" %% "scalacheck" % "1.13.4"
val scalatest = "org.scalatest" %% "scalatest" % "3.0.1"
val junit = "junit" % "junit" % "4.11"
Expand Down
2 changes: 1 addition & 1 deletion project/house.sbt
Original file line number Diff line number Diff line change
@@ -1 +1 @@
addSbtPlugin("org.scala-sbt" % "sbt-houserules" % "0.3.1")
addSbtPlugin("org.scala-sbt" % "sbt-houserules" % "0.3.2")

0 comments on commit e2836a9

Please sign in to comment.