mirror of https://github.com/sbt/sbt.git
Merge pull request #1799 from indrajitr/cross-source
Enable cross-version support for Scala sources.
This commit is contained in:
commit
1a3062ed10
|
|
@ -181,7 +181,7 @@ object Defaults extends BuildCommon {
|
||||||
sourceManaged <<= configSrcSub(sourceManaged),
|
sourceManaged <<= configSrcSub(sourceManaged),
|
||||||
scalaSource := sourceDirectory.value / "scala",
|
scalaSource := sourceDirectory.value / "scala",
|
||||||
javaSource := sourceDirectory.value / "java",
|
javaSource := sourceDirectory.value / "java",
|
||||||
unmanagedSourceDirectories := Seq(scalaSource.value, javaSource.value),
|
unmanagedSourceDirectories := makeCrossSources(scalaSource.value, javaSource.value, scalaBinaryVersion.value, crossPaths.value),
|
||||||
unmanagedSources <<= collectFiles(unmanagedSourceDirectories, includeFilter in unmanagedSources, excludeFilter in unmanagedSources),
|
unmanagedSources <<= collectFiles(unmanagedSourceDirectories, includeFilter in unmanagedSources, excludeFilter in unmanagedSources),
|
||||||
watchSources in ConfigGlobal <++= unmanagedSources,
|
watchSources in ConfigGlobal <++= unmanagedSources,
|
||||||
managedSourceDirectories := Seq(sourceManaged.value),
|
managedSourceDirectories := Seq(sourceManaged.value),
|
||||||
|
|
@ -241,6 +241,14 @@ object Defaults extends BuildCommon {
|
||||||
derive(compilersSetting),
|
derive(compilersSetting),
|
||||||
derive(scalaBinaryVersion := binaryScalaVersion(scalaVersion.value))
|
derive(scalaBinaryVersion := binaryScalaVersion(scalaVersion.value))
|
||||||
))
|
))
|
||||||
|
|
||||||
|
def makeCrossSources(scalaSrcDir: File, javaSrcDir: File, sv: String, cross: Boolean): Seq[File] = {
|
||||||
|
if (cross)
|
||||||
|
Seq(scalaSrcDir.getParentFile / s"${scalaSrcDir.name}-$sv", scalaSrcDir, javaSrcDir)
|
||||||
|
else
|
||||||
|
Seq(scalaSrcDir, javaSrcDir)
|
||||||
|
}
|
||||||
|
|
||||||
def makeCrossTarget(t: File, sv: String, sbtv: String, plugin: Boolean, cross: Boolean): File =
|
def makeCrossTarget(t: File, sv: String, sbtv: String, plugin: Boolean, cross: Boolean): File =
|
||||||
{
|
{
|
||||||
val scalaBase = if (cross) t / ("scala-" + sv) else t
|
val scalaBase = if (cross) t / ("scala-" + sv) else t
|
||||||
|
|
@ -948,7 +956,7 @@ object Defaults extends BuildCommon {
|
||||||
@deprecated("Settings now split into AutoPlugins.", "0.13.2")
|
@deprecated("Settings now split into AutoPlugins.", "0.13.2")
|
||||||
lazy val projectBaseSettings: Seq[Setting[_]] = projectCore ++ runnerSettings ++ paths ++ baseClasspaths ++ baseTasks ++ compileBase ++ disableAggregation
|
lazy val projectBaseSettings: Seq[Setting[_]] = projectCore ++ runnerSettings ++ paths ++ baseClasspaths ++ baseTasks ++ compileBase ++ disableAggregation
|
||||||
|
|
||||||
// These are project level settings that MUST be on every project.
|
// These are project level settings that MUST be on every project.
|
||||||
lazy val coreDefaultSettings: Seq[Setting[_]] =
|
lazy val coreDefaultSettings: Seq[Setting[_]] =
|
||||||
projectCore ++ disableAggregation ++ Seq(
|
projectCore ++ disableAggregation ++ Seq(
|
||||||
// Missing but core settings
|
// Missing but core settings
|
||||||
|
|
@ -1111,8 +1119,8 @@ object Classpaths {
|
||||||
projectResolver <<= projectResolverTask,
|
projectResolver <<= projectResolverTask,
|
||||||
projectDependencies <<= projectDependenciesTask,
|
projectDependencies <<= projectDependenciesTask,
|
||||||
// TODO - Is this the appropriate split? Ivy defines this simply as
|
// TODO - Is this the appropriate split? Ivy defines this simply as
|
||||||
// just project + library, while the JVM plugin will define it as
|
// just project + library, while the JVM plugin will define it as
|
||||||
// having the additional sbtPlugin + autoScala magikz.
|
// having the additional sbtPlugin + autoScala magikz.
|
||||||
allDependencies := {
|
allDependencies := {
|
||||||
projectDependencies.value ++ libraryDependencies.value
|
projectDependencies.value ++ libraryDependencies.value
|
||||||
},
|
},
|
||||||
|
|
|
||||||
|
|
@ -106,7 +106,7 @@ object Keys {
|
||||||
val cacheDirectory = SettingKey[File]("cache-directory", "Directory used for caching task data.", BMinusSetting)
|
val cacheDirectory = SettingKey[File]("cache-directory", "Directory used for caching task data.", BMinusSetting)
|
||||||
val cleanFiles = SettingKey[Seq[File]]("clean-files", "The files to recursively delete during a clean.", BSetting)
|
val cleanFiles = SettingKey[Seq[File]]("clean-files", "The files to recursively delete during a clean.", BSetting)
|
||||||
val cleanKeepFiles = SettingKey[Seq[File]]("clean-keep-files", "Files to keep during a clean.", CSetting)
|
val cleanKeepFiles = SettingKey[Seq[File]]("clean-keep-files", "Files to keep during a clean.", CSetting)
|
||||||
val crossPaths = SettingKey[Boolean]("cross-paths", "If true, enables cross paths, which distinguish output directories for cross-building.", ASetting)
|
val crossPaths = SettingKey[Boolean]("cross-paths", "If true, enables cross paths, which distinguish input and output directories for cross-building.", ASetting)
|
||||||
val taskTemporaryDirectory = SettingKey[File]("task-temporary-directory", "Directory used for temporary files for tasks that is deleted after each task execution.", DSetting)
|
val taskTemporaryDirectory = SettingKey[File]("task-temporary-directory", "Directory used for temporary files for tasks that is deleted after each task execution.", DSetting)
|
||||||
|
|
||||||
// Generators
|
// Generators
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,3 @@
|
||||||
|
object B {
|
||||||
|
def show(what: String): String = s"String interpolation is ${what.toUpperCase}!"
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,3 @@
|
||||||
|
object B {
|
||||||
|
def show(what: String): String = "String interpolation is " + what.toUpperCase
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,3 @@
|
||||||
|
class A {
|
||||||
|
def show(what: String): String = B.show(what)
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,16 @@
|
||||||
|
# A.scala needs B.scala, it won't be in source list
|
||||||
|
> ++2.11.4
|
||||||
|
-> compile
|
||||||
|
|
||||||
|
# A.scala needs B.scala, it would be in source list
|
||||||
|
> ++2.10.4
|
||||||
|
> compile
|
||||||
|
|
||||||
|
# A.scala needs B.scala, it would be in source list
|
||||||
|
> ++2.9.3
|
||||||
|
> compile
|
||||||
|
|
||||||
|
# Injecting the wrong B.scala in source list
|
||||||
|
$ copy-file src/main/scala-2.10/B.scala src/main/scala-2.9.3/B.scala
|
||||||
|
> ++2.9.3
|
||||||
|
-> compile
|
||||||
Loading…
Reference in New Issue