2012-09-27 28 views
5

Estoy utilizando un proyecto con cross-build para Scala 2.8, 2.9 y (con suerte) 2.10, usando SBT. Me gustaría agregar la opción -feature al compilar solo con 2.10.ScalacOptions condicional con SBT

En otras palabras, cuando compilo con una versión más pequeña que 2.10.0, me gustaría configurar las opciones del compilador como:

scalacOptions ++= Seq("-deprecation", "-unchecked") 

y al compilar con una versión mayor o igual a 2.10.0 :

scalacOptions ++= Seq("-deprecation", "-unchecked", "-feature") 

¿hay una manera de lograr esto?

+0

echar un vistazo a scalaz [construir] (https://github.com /scalaz/scalaz/blob/master/project/ScalazBuild.scala#L125) – 4e6

Respuesta

6

Cuando se realiza la construcción cruzada, scalaVersion refleja la versión en la que está construido actualmente su proyecto. Así que dependiendo de scalaVersion debe hacer el truco:

val scalaVersionRegex = "(\\d+)\\.(\\d+).*".r 
... 
scalacOptions <++= scalaVersion { sv => 
    sv match { 
    case scalaVersionRegex(major, minor) if major.toInt > 2 || (major == "2" && minor.toInt >= 10) => 
     Seq("-deprecation", "-unchecked", "-feature") 
    case _ => Seq("-deprecation", "-unchecked") 
} 
6

encontré esta era la manera rápida y concisa de hacerlo:

scalaVersion := "2.10.0" 

crossScalaVersions := "2.9.2" :: "2.10.0" :: Nil 

scalacOptions <<= scalaVersion map { v: String => 
    val default = "-deprecation" :: "-unchecked" :: Nil 
    if (v.startsWith("2.9.")) default else default :+ "-feature"    
}