diff options
author | Jan Christopher Vogt <oss.nsp@cvogt.org> | 2017-04-02 03:21:42 -0400 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-04-02 03:21:42 -0400 |
commit | 2476e2ec1100813ae4e05cf2183feff8bf5ec8ea (patch) | |
tree | a334625acfe91c0233abf57a5fb7b52f040e0846 | |
parent | e7112d59b811ca4a0bda448a18e0c45cb4841abb (diff) | |
parent | c220ef8d12e77ce6af6fafde3b388fc3e334b380 (diff) | |
download | cbt-2476e2ec1100813ae4e05cf2183feff8bf5ec8ea.tar.gz cbt-2476e2ec1100813ae4e05cf2183feff8bf5ec8ea.tar.bz2 cbt-2476e2ec1100813ae4e05cf2183feff8bf5ec8ea.zip |
Merge pull request #471 from cvogt/2.12-ready
2.12 ready
31 files changed, 235 insertions, 134 deletions
diff --git a/build/build.scala b/build/build.scala index e077343..c596245 100644 --- a/build/build.scala +++ b/build/build.scala @@ -13,7 +13,7 @@ class Build(val context: Context) extends Shared with Scalariform with PublishLo super.dependencies ++ Resolver(mavenCentral).bind( MavenDependency("org.eclipse.jgit", "org.eclipse.jgit", "4.2.0.201601211800-r"), ScalaDependency("org.scala-lang.modules","scala-xml",constants.scalaXmlVersion) - ) :+ libraries.reflect :+ libraries.eval + ) :+ libraries.cbt.reflect :+ libraries.cbt.eval } override def sources = Seq( @@ -24,8 +24,10 @@ class Build(val context: Context) extends Shared with Scalariform with PublishLo Seq( context.cbtHome / "stage2" / "DirectoryDependency.scala", context.cbtHome / "stage2" / "LazyDependency.scala", + context.cbtHome / "stage2" / "plugins" / "ScalaTest.scala", context.cbtHome / "stage2" / "libraries.scala", - context.cbtHome / "stage2" / "plugins.scala" + context.cbtHome / "stage2" / "plugins.scala", + context.cbtHome / "stage2" / "ports.scala" ) ) @@ -14,6 +14,7 @@ dependencies: compile: override: + - rm ~/.gitconfig # avoid url replacement breaking jgit - ./cbt direct compile - ./cbt direct test.compile - ./cbt compile @@ -22,7 +23,6 @@ compile: test: override: - - rm ~/.gitconfig # avoid url replacement breaking jgit - ./cbt direct test.run slow: timeout: 1800 - ./cbt direct test.run slow: diff --git a/examples/build-info-example/build/build.scala b/examples/build-info-example/build/build.scala index cc4c2db..2628efc 100644 --- a/examples/build-info-example/build/build.scala +++ b/examples/build-info-example/build/build.scala @@ -1,22 +1,17 @@ import cbt._ import java.nio.file.Files._ -class Build(val context: Context) extends PackageJars{ +class Build(val context: Context) extends PackageJars with GenerateBuildInfo{ override def name = "build-info-example" def groupId = "cbt.examples" override def defaultScalaVersion = "2.11.8" def version = "0.1" - override def compile = { buildInfo; super.compile } - def buildInfo = lib.writeIfChanged( - projectDirectory / "src_generated/BuildInfo.scala", - s"""// generated file -import java.io._ -object BuildInfo{ -def artifactId = "$artifactId" -def groupId = "$groupId" -def version = "$version" -def scalaVersion = "$scalaVersion" -} + override def buildInfo = super.buildInfo.copy( + s""" + def artifactId = "$artifactId" + def groupId = "$groupId" + def version = "$version" + def scalaVersion = "$scalaVersion" """ ) } diff --git a/examples/build-info-example/src_generated/BuildInfo.scala b/examples/build-info-example/src_generated/BuildInfo.scala index ac0e680..4ca1162 100644 --- a/examples/build-info-example/src_generated/BuildInfo.scala +++ b/examples/build-info-example/src_generated/BuildInfo.scala @@ -1,8 +1,9 @@ // generated file -import java.io._ object BuildInfo{ -def artifactId = "build-info-example" -def groupId = "cbt.examples" -def version = "0.1" -def scalaVersion = "2.11.8" + + def artifactId = "build-info-example" + def groupId = "cbt.examples" + def version = "0.1" + def scalaVersion = "2.11.8" + } diff --git a/examples/scalatest-example/build/build/build.scala b/examples/scalatest-example/build/build/build.scala index d641b51..c7b1b2b 100644 --- a/examples/scalatest-example/build/build/build.scala +++ b/examples/scalatest-example/build/build/build.scala @@ -2,7 +2,6 @@ import cbt._ class Build(val context: Context) extends BuildBuild{ override def dependencies = super.dependencies ++ Seq( - plugins.scalaTest, plugins.sbtLayout ) } diff --git a/libraries/common-1/build/build.scala b/libraries/common-1/build/build.scala index 247fd01..3d7868d 100644 --- a/libraries/common-1/build/build.scala +++ b/libraries/common-1/build/build.scala @@ -4,5 +4,5 @@ import cbt_internal._ class Build(val context: Context) extends Library{ override def inceptionYear = 2017 override def description = "classes shared by multiple cbt libraries and needed in stage 1" - override def dependencies = super.dependencies :+ libraries.common_0 :+ libraries.interfaces + override def dependencies = super.dependencies :+ libraries.cbt.common_0 :+ libraries.cbt.interfaces } diff --git a/libraries/eval/build/build/build.scala b/libraries/eval/build/build/build.scala deleted file mode 100644 index af4eb64..0000000 --- a/libraries/eval/build/build/build.scala +++ /dev/null @@ -1,5 +0,0 @@ -import cbt._ - -class Build(val context: Context) extends BuildBuild{ - override def dependencies = super.dependencies :+ plugins.scalaTest -} diff --git a/libraries/file/build/build.scala b/libraries/file/build/build.scala index d9017a1..eb7cabf 100644 --- a/libraries/file/build/build.scala +++ b/libraries/file/build/build.scala @@ -4,5 +4,5 @@ import cbt_internal._ class Build(val context: Context) extends Library{ override def inceptionYear = 2017 override def description = "helpers to work with java io and nio" - override def dependencies = super.dependencies :+ libraries.common_1 + override def dependencies = super.dependencies :+ libraries.cbt.common_1 } diff --git a/libraries/file/file.scala b/libraries/file/file.scala index f20c9a8..900e9ec 100644 --- a/libraries/file/file.scala +++ b/libraries/file/file.scala @@ -83,12 +83,12 @@ trait Module { val duplicateFiles = ( relatives diff relatives.distinct ).distinct assert( duplicateFiles.isEmpty, { - val rs = relatives.toSet - "Conflicting:\n\n" + - map.filter( rs contains _._2 ).groupBy( _._2 ).mapValues( _.map( _._1 ).sorted ).toSeq.sortBy( _._1 ).map { - case ( name, files ) => s"$name:\n" ++ files.mkString( "\n" ) - }.mkString( "\n\n" ) - } + val rs = relatives.toSet + "Conflicting:\n\n" + + map.filter( rs contains _._2 ).groupBy( _._2 ).mapValues( _.map( _._1 ).sorted ).toSeq.sortBy( _._1 ).map { + case ( name, files ) => s"$name:\n" ++ files.mkString( "\n" ) + }.mkString( "\n\n" ) + } ) } map diff --git a/libraries/reflect/build/build.scala b/libraries/reflect/build/build.scala index 3b6658a..77e0460 100644 --- a/libraries/reflect/build/build.scala +++ b/libraries/reflect/build/build.scala @@ -4,5 +4,5 @@ import cbt_internal._ class Build(val context: Context) extends Library{ override def inceptionYear = 2017 override def description = "discover classes on your classpath and invoke methods reflectively, preventing System.exit" - override def dependencies = super.dependencies :+ libraries.file :+ libraries.common_1 + override def dependencies = super.dependencies :+ libraries.cbt.file :+ libraries.cbt.common_1 } diff --git a/nailgun_launcher/EarlyDependencies.java b/nailgun_launcher/EarlyDependencies.java index 6683393..5725e3a 100644 --- a/nailgun_launcher/EarlyDependencies.java +++ b/nailgun_launcher/EarlyDependencies.java @@ -8,7 +8,11 @@ import java.util.*; import static cbt.Stage0Lib.*; import static cbt.NailgunLauncher.*; -class EarlyDependencies{ +public class EarlyDependencies{ + + public static String scalaVersion = "2.11.8"; + public static String scalaXmlVersion = "1.0.6"; + public static String zincVersion = "0.3.13"; /** ClassLoader for stage1 */ ClassLoader classLoader; @@ -16,32 +20,26 @@ class EarlyDependencies{ /** ClassLoader for zinc */ ClassLoader zinc; - String scalaReflect_2_11_8_File; - String scalaCompiler_2_11_8_File; - String scalaXml_1_0_5_File; - String scalaLibrary_2_11_8_File; - String zinc_0_3_13_File; - String incrementalCompiler_0_13_13_File; - String compilerInterface_0_13_13_File; - String scalaCompiler_2_10_6_File; - String sbtInterface_0_13_13_File; - String scalaReflect_2_10_6_File; - String scalaLibrary_2_10_6_File; + String scalaCompiler_File; + String scalaLibrary_File; + String scalaReflect_File; + String sbtInterface_File; + String compilerInterface_File; public EarlyDependencies( String mavenCache, String mavenUrl, ClassLoaderCache classLoaderCache, ClassLoader rootClassLoader ) throws Throwable { - scalaReflect_2_11_8_File = mavenCache + "/org/scala-lang/scala-reflect/2.11.8/scala-reflect-2.11.8.jar"; - scalaCompiler_2_11_8_File = mavenCache + "/org/scala-lang/scala-compiler/2.11.8/scala-compiler-2.11.8.jar"; - scalaXml_1_0_5_File = mavenCache + "/org/scala-lang/modules/scala-xml_2.11/1.0.5/scala-xml_2.11-1.0.5.jar"; - scalaLibrary_2_11_8_File = mavenCache + "/org/scala-lang/scala-library/2.11.8/scala-library-2.11.8.jar"; - zinc_0_3_13_File = mavenCache + "/com/typesafe/zinc/zinc/0.3.13/zinc-0.3.13.jar"; - incrementalCompiler_0_13_13_File = mavenCache + "/com/typesafe/sbt/incremental-compiler/0.13.13/incremental-compiler-0.13.13.jar"; - compilerInterface_0_13_13_File = mavenCache + "/com/typesafe/sbt/compiler-interface/0.13.13/compiler-interface-0.13.13-sources.jar"; - scalaCompiler_2_10_6_File = mavenCache + "/org/scala-lang/scala-compiler/2.10.6/scala-compiler-2.10.6.jar"; - sbtInterface_0_13_13_File = mavenCache + "/com/typesafe/sbt/sbt-interface/0.13.13/sbt-interface-0.13.13.jar"; - scalaReflect_2_10_6_File = mavenCache + "/org/scala-lang/scala-reflect/2.10.6/scala-reflect-2.10.6.jar"; - scalaLibrary_2_10_6_File = mavenCache + "/org/scala-lang/scala-library/2.10.6/scala-library-2.10.6.jar"; + String scalaReflect_2_11_8_File = mavenCache + "/org/scala-lang/scala-reflect/2.11.8/scala-reflect-2.11.8.jar"; + String scalaCompiler_2_11_8_File = mavenCache + "/org/scala-lang/scala-compiler/2.11.8/scala-compiler-2.11.8.jar"; + String scalaXml_1_0_6_File = mavenCache + "/org/scala-lang/modules/scala-xml_2.11/1.0.6/scala-xml_2.11-1.0.6.jar"; + String scalaLibrary_2_11_8_File = mavenCache + "/org/scala-lang/scala-library/2.11.8/scala-library-2.11.8.jar"; + String zinc_0_3_13_File = mavenCache + "/com/typesafe/zinc/zinc/0.3.13/zinc-0.3.13.jar"; + String incrementalCompiler_0_13_13_File = mavenCache + "/com/typesafe/sbt/incremental-compiler/0.13.13/incremental-compiler-0.13.13.jar"; + String compilerInterface_0_13_13_File = mavenCache + "/com/typesafe/sbt/compiler-interface/0.13.13/compiler-interface-0.13.13-sources.jar"; + String scalaCompiler_2_10_6_File = mavenCache + "/org/scala-lang/scala-compiler/2.10.6/scala-compiler-2.10.6.jar"; + String sbtInterface_0_13_13_File = mavenCache + "/com/typesafe/sbt/sbt-interface/0.13.13/sbt-interface-0.13.13.jar"; + String scalaReflect_2_10_6_File = mavenCache + "/org/scala-lang/scala-reflect/2.10.6/scala-reflect-2.10.6.jar"; + String scalaLibrary_2_10_6_File = mavenCache + "/org/scala-lang/scala-library/2.10.6/scala-library-2.10.6.jar"; download(new URL(mavenUrl + "/org/scala-lang/scala-reflect/2.11.8/scala-reflect-2.11.8.jar"), Paths.get(scalaReflect_2_11_8_File), "b74530deeba742ab4f3134de0c2da0edc49ca361"); download(new URL(mavenUrl + "/org/scala-lang/scala-compiler/2.11.8/scala-compiler-2.11.8.jar"), Paths.get(scalaCompiler_2_11_8_File), "fe1285c9f7b58954c5ef6d80b59063569c065e9a"); @@ -134,20 +132,26 @@ class EarlyDependencies{ scalaLibrary_2_11_8_ClasspathArray ); - // org.scala-lang.modules:scala-xml_2.11:1.0.5 - String[] scalaXml_1_0_5_ClasspathArray = new String[]{scalaXml_1_0_5_File, scalaLibrary_2_11_8_File}; - ClassLoader scalaXml_1_0_5_ = loadDependency( - mavenUrl + "/org/scala-lang/modules/scala-xml_2.11/1.0.5/scala-xml_2.11-1.0.5.jar", - scalaXml_1_0_5_File, - "77ac9be4033768cf03cc04fbd1fc5e5711de2459", + // org.scala-lang.modules:scala-xml_2.11:1.0.6 + String[] scalaXml_1_0_6_ClasspathArray = new String[]{scalaXml_1_0_6_File, scalaLibrary_2_11_8_File}; + ClassLoader scalaXml_1_0_6_ = loadDependency( + mavenUrl + "/org/scala-lang/modules/scala-xml_2.11/1.0.6/scala-xml_2.11-1.0.6.jar", + scalaXml_1_0_6_File, + "4ebd108453e6455351c0ec50d32509ae1154fdb1", classLoaderCache, scalaLibrary_2_11_8_, - scalaXml_1_0_5_ClasspathArray + scalaXml_1_0_6_ClasspathArray ); - classLoader = scalaXml_1_0_5_; - classpathArray = scalaXml_1_0_5_ClasspathArray; + classLoader = scalaXml_1_0_6_; + classpathArray = scalaXml_1_0_6_ClasspathArray; zinc = zinc_0_3_13_; + + scalaCompiler_File = scalaCompiler_2_11_8_File; + scalaLibrary_File = scalaLibrary_2_11_8_File; + scalaReflect_File = scalaReflect_2_11_8_File; + sbtInterface_File = sbtInterface_0_13_13_File; + compilerInterface_File = compilerInterface_0_13_13_File; } } diff --git a/nailgun_launcher/Stage0Lib.java b/nailgun_launcher/Stage0Lib.java index 34af7b0..456e9d1 100644 --- a/nailgun_launcher/Stage0Lib.java +++ b/nailgun_launcher/Stage0Lib.java @@ -102,11 +102,11 @@ public class Stage0Lib{ List<String> zincArgs = new ArrayList<String>( Arrays.asList( new String[]{ - "-scala-compiler", earlyDeps.scalaCompiler_2_11_8_File, - "-scala-library", earlyDeps.scalaLibrary_2_11_8_File, - "-scala-extra", earlyDeps.scalaReflect_2_11_8_File, - "-sbt-interface", earlyDeps.sbtInterface_0_13_13_File, - "-compiler-interface", earlyDeps.compilerInterface_0_13_13_File, + "-scala-compiler", earlyDeps.scalaCompiler_File, + "-scala-library", earlyDeps.scalaLibrary_File, + "-scala-extra", earlyDeps.scalaReflect_File, + "-sbt-interface", earlyDeps.sbtInterface_File, + "-compiler-interface", earlyDeps.compilerInterface_File, "-cp", classpath, "-d", target, "-S-deprecation", diff --git a/plugins/scalariform/build/build.scala b/plugins/scalariform/build/build.scala index 5910b41..80f3966 100644 --- a/plugins/scalariform/build/build.scala +++ b/plugins/scalariform/build/build.scala @@ -1,9 +1,5 @@ import cbt._ class Build(val context: Context) extends Plugin { - override def dependencies = - super.dependencies ++ - Resolver( mavenCentral ).bind( - ScalaDependency("org.scalariform", "scalariform", "0.1.8") - ) + override def dependencies = super.dependencies :+ ports.scalariform } diff --git a/plugins/scalatest/build/build.scala b/plugins/scalatest/build/build.scala deleted file mode 100644 index 4e94cd7..0000000 --- a/plugins/scalatest/build/build.scala +++ /dev/null @@ -1,8 +0,0 @@ -import cbt._ - -class Build(val context: Context) extends BaseBuild{ - override def dependencies = ( - super.dependencies - :+ context.cbtDependency - ) -} diff --git a/ports/migration-manager/build/build.scala b/ports/migration-manager/build/build.scala index 43b24f5..edae75f 100644 --- a/ports/migration-manager/build/build.scala +++ b/ports/migration-manager/build/build.scala @@ -3,7 +3,7 @@ import cbt._ class Build(val context: Context) extends BaseBuild{ override def dependencies = Resolver( mavenCentral ).bind( - MavenDependency( "org.scala-lang", "scala-compiler", "2.11.8" ) + MavenDependency( "org.scala-lang", "scala-compiler", scalaVersion ) ) def mima = GitDependency.checkout( "git@github.com:typesafehub/migration-manager.git", "92cbce52b4bf04ca1c338f34818ebfb9f0ebc285" diff --git a/ports/scalariform/build/build.scala b/ports/scalariform/build/build.scala new file mode 100644 index 0000000..c2ade6b --- /dev/null +++ b/ports/scalariform/build/build.scala @@ -0,0 +1,26 @@ +package migration_manager_build +import cbt._ +class Build(val context: Context) extends AdvancedScala{ outer => + override def dependencies = Seq( libraries.scala.xml, libraries.scala.parserCombinators ) + + val scalariform = GitDependency.checkout( + "https://github.com/scala-ide/scalariform.git", "f53978c60579fa834ac9e56986a6133c0a621bfd" + ) + + override def sources = Seq( + scalariform / "scalariform" / "src" / "main" / "scala" / "scalariform" + ) + + override def scalacOptions = super.scalacOptions ++ Seq( + "-language:implicitConversions", "-language:reflectiveCalls" + ) + + override def test = new BasicBuild( context ) with ScalaTest{ + override def target = outer.target / "test" + override def dependencies = super.dependencies :+ outer + override def scalacOptions = outer.scalacOptions + override def sources = Seq( + scalariform / "scalariform" / "src" / "test" / "scala" / "scalariform" + ) + } +} diff --git a/stage1/Stage1Lib.scala b/stage1/Stage1Lib.scala index 6e2963e..40b3fed 100644 --- a/stage1/Stage1Lib.scala +++ b/stage1/Stage1Lib.scala @@ -314,9 +314,10 @@ ${sourceFiles.sorted.mkString(" \\\n")} .map( dejavafy ) .orElse{ (cacheFile.exists && cacheFile.lastModified > cbtLastModified).option{ - import collection.JavaConversions._ + import collection.JavaConverters._ val v = Files .readAllLines( cacheFile.toPath, StandardCharsets.UTF_8 ) + .asScala .toStream .map( deserialize ) persistentCache.put(key, Array(System.currentTimeMillis:java.lang.Long, javafy(v))) diff --git a/stage1/constants.scala b/stage1/constants.scala index ebc892c..d87fb64 100644 --- a/stage1/constants.scala +++ b/stage1/constants.scala @@ -1,7 +1,7 @@ package cbt object constants{ - val scalaXmlVersion = "1.0.5" - val scalaVersion = "2.11.8" - val zincVersion = "0.3.13" + val scalaXmlVersion = EarlyDependencies.scalaXmlVersion + val scalaVersion = EarlyDependencies.scalaVersion + val zincVersion = EarlyDependencies.zincVersion val scalaMajorVersion = scalaVersion.split("\\.").take(2).mkString(".") } diff --git a/stage1/resolver.scala b/stage1/resolver.scala index 6134a16..48099e5 100644 --- a/stage1/resolver.scala +++ b/stage1/resolver.scala @@ -108,7 +108,7 @@ trait DependencyImplementation extends Dependency{ def flatClassLoader: Boolean = false - def classLoader: ClassLoader = taskCache[DependencyImplementation]( "classLoader" ).memoize{ + override def classLoader: ClassLoader = taskCache[DependencyImplementation]( "classLoader" ).memoize{ if( flatClassLoader ){ new java.net.URLClassLoader(classpath.strings.map(f => new URL("file://" ++ f)).toArray) } else { @@ -170,13 +170,13 @@ case class BinaryDependency( paths: Seq[File], dependencies: Seq[Dependency] )(i def exportedClasspath = ClassPath(paths) override def lastModified = paths.map(_.lastModifiedRecursive).max // FIXME: cache this def targetClasspath = exportedClasspath - lazy val moduleKey = this.getClass.getName + "(" + paths.mkString(", ") + ")" // PERFORMANCE HOTSPOT + override lazy val moduleKey = this.getClass.getName + "(" + paths.mkString(", ") + ")" // PERFORMANCE HOTSPOT } /** Allows to easily assemble a bunch of dependencies */ case class Dependencies( dependencies: Seq[Dependency] )(implicit val logger: Logger, val transientCache: java.util.Map[AnyRef,AnyRef], val classLoaderCache: ClassLoaderCache) extends DependencyImplementation{ override def lastModified = dependencies.map(_.lastModified).maxOption.getOrElse(0) - lazy val moduleKey = this.getClass.getName + "(" + dependencies.map(_.moduleKey).mkString(", ") + ")" // PERFORMANCE HOTSPOT + override lazy val moduleKey = this.getClass.getName + "(" + dependencies.map(_.moduleKey).mkString(", ") + ")" // PERFORMANCE HOTSPOT def targetClasspath = ClassPath() def exportedClasspath = ClassPath() override def show: String = this.getClass.getSimpleName + "( " + dependencies.map(_.show).mkString(", ") + " )" @@ -184,7 +184,7 @@ case class Dependencies( dependencies: Seq[Dependency] )(implicit val logger: Lo case class PostBuildDependency(target: File, _dependencies: Seq[DependencyImplementation])(implicit val logger: Logger, val transientCache: java.util.Map[AnyRef,AnyRef], val classLoaderCache: ClassLoaderCache) extends DependencyImplementation{ override final lazy val lastModified = (target++".last-success").lastModified - lazy val moduleKey = target.string + override lazy val moduleKey = target.string override def show = s"PostBuildDependency($target)" override def targetClasspath = exportedClasspath override def exportedClasspath = ClassPath( Seq(target) ) @@ -246,7 +246,7 @@ case class BoundMavenDependency( )( implicit val logger: Logger, val transientCache: java.util.Map[AnyRef,AnyRef], val classLoaderCache: ClassLoaderCache ) extends ArtifactInfo with DependencyImplementation{ - lazy val moduleKey = this.getClass.getName + "(" + mavenDependency.serialize + ")" // PERFORMANCE HOTSPOT + override lazy val moduleKey = this.getClass.getName + "(" + mavenDependency.serialize + ")" // PERFORMANCE HOTSPOT override def hashCode = mavenDependency.hashCode override def equals(other: Any) = other match{ case o: BoundMavenDependency => o.mavenDependency == mavenDependency && o.repositories == repositories @@ -284,7 +284,7 @@ case class BoundMavenDependency( def exportedJars = Seq( jar ) override def exportedClasspath = ClassPath( exportedJars ) override def targetClasspath = exportedClasspath - import scala.collection.JavaConversions._ + import scala.collection.JavaConverters._ private def resolve(suffix: String, hash: Option[String], useClassifier: Boolean): File = { logger.resolver(lib.blue("Resolving ")+this) @@ -304,7 +304,7 @@ case class BoundMavenDependency( val result = Files.readAllLines( path, StandardCharsets.UTF_8 - ).mkString("\n").split(" ").head.trim + ).asScala.mkString("\n").split(" ").head.trim classLoaderCache.hashMap.put("hash:"+path, result) result } diff --git a/stage2/BasicBuild.scala b/stage2/BasicBuild.scala index 2cf97e5..05e3c41 100644 --- a/stage2/BasicBuild.scala +++ b/stage2/BasicBuild.scala @@ -17,10 +17,11 @@ trait BaseBuild extends BuildInterface with DependencyImplementation with SbtDep // will create new instances given the context, which means operations in the // overrides will happen multiple times and if they are not idempotent stuff likely breaks def context: Context - lazy val moduleKey: String = "BaseBuild("+target.string+")" + override lazy val moduleKey: String = "BaseBuild("+target.string+")" implicit def transientCache: java.util.Map[AnyRef,AnyRef] = context.transientCache - implicit def libraries(implicit context: Context): libraries = new libraries(context, scalaVersion) + object libraries extends libraries( context, scalaVersion, scalaMajorVersion ) + object ports extends ports( context, scalaVersion ) // library available to builds implicit protected final val logger: Logger = context.logger @@ -153,7 +154,7 @@ trait BaseBuild extends BuildInterface with DependencyImplementation with SbtDep "-unchecked" ) - final def lastModified: Long = compile.getOrElse(0L) + override final def lastModified: Long = compile.getOrElse(0L) def triggerLoopFiles: Set[File] = sources.toSet diff --git a/stage2/BuildBuild.scala b/stage2/BuildBuild.scala index cc69905..8430f49 100644 --- a/stage2/BuildBuild.scala +++ b/stage2/BuildBuild.scala @@ -7,7 +7,7 @@ class ConcreteBuildBuild(val context: Context) extends BuildBuild trait BuildBuild extends BaseBuild{ override def dependencies = super.dependencies :+ context.cbtDependency - object plugins extends plugins + object plugins extends plugins( context, scalaVersion ) assert( projectDirectory.getName === lib.buildDirectoryName, diff --git a/stage2/LazyDependency.scala b/stage2/LazyDependency.scala index afc6263..2822638 100644 --- a/stage2/LazyDependency.scala +++ b/stage2/LazyDependency.scala @@ -1,11 +1,11 @@ package cbt class LazyDependency( _dependency: => Dependency )( implicit logger: Logger, transientCache: java.util.Map[AnyRef, AnyRef], classLoaderCache: ClassLoaderCache ) extends Dependency { lazy val dependency = _dependency - def classLoader = dependency.classLoader + override def classLoader = dependency.classLoader def dependenciesArray = Array( dependency ) def exportedClasspathArray = Array() - def lastModified = dependency.lastModified - lazy val moduleKey = show + override def lastModified = dependency.lastModified + override lazy val moduleKey = show def show = s"LazyDependency(${dependency.show})" override def toString = show override def equals( other: Any ) = other match { diff --git a/stage2/Lib.scala b/stage2/Lib.scala index 6488c1a..52973f1 100644 --- a/stage2/Lib.scala +++ b/stage2/Lib.scala @@ -209,12 +209,11 @@ final class Lib(val logger: Logger) extends Stage1Lib(logger){ } else { val performDelete = ( force || { - val console = consoleOrFail("Use `cbt direct clean` or `cbt clean help`") System.err.println("Files to be deleted:\n") files.foreach( System.err.println ) System.err.println("") System.err.print("To delete the above files type 'delete': ") - console.readLine() == "delete" + new BufferedReader( new InputStreamReader(System.in), 1 ).readLine == "delete" } ) diff --git a/stage2/Plugin.scala b/stage2/Plugin.scala index 43e26fa..2cc242d 100644 --- a/stage2/Plugin.scala +++ b/stage2/Plugin.scala @@ -1,5 +1,5 @@ package cbt trait Plugin extends BaseBuild{ override def dependencies = super.dependencies :+ context.cbtDependency - object plugins extends plugins + object plugins extends plugins( context, scalaVersion ) } diff --git a/stage2/ToolsTasks.scala b/stage2/ToolsTasks.scala index 15052ae..a55bc7f 100644 --- a/stage2/ToolsTasks.scala +++ b/stage2/ToolsTasks.scala @@ -51,7 +51,7 @@ class ToolsTasks( val version = args.lift(1).getOrElse(constants.scalaVersion) val ammonite = Resolver(mavenCentral).bindOne( MavenDependency( - "com.lihaoyi","ammonite-repl_2.11.8",args.lift(1).getOrElse("0.5.8") + "com.lihaoyi","ammonite-repl_"++constants.scalaVersion,args.lift(1).getOrElse("0.5.8") ) ) // FIXME: this does not work quite yet, throws NoSuchFileException: /ammonite/repl/frontend/ReplBridge$.class @@ -76,7 +76,7 @@ class ToolsTasks( Resolver(mavenCentral).bindOne(MavenDependency("org.scala-lang","scala-reflect",scalaVersion)), Resolver(mavenCentral).bindOne(MavenDependency("org.scala-lang","scala-compiler",scalaVersion)) ) - + val scalaXml = Dependencies( Resolver(mavenCentral).bind( MavenDependency("org.scala-lang.modules","scala-xml_"+scalaMajorVersion,scalaXmlVersion), @@ -85,6 +85,17 @@ class ToolsTasks( ) val zinc = Resolver(mavenCentral).bindOne(MavenDependency("com.typesafe.zinc","zinc",zincVersion)) + val sbtVersion = + zinc.dependencies + .collect{ case d @ + BoundMavenDependency( + _, _, MavenDependency( "com.typesafe.sbt", "compiler-interface", _, Classifier.sources, _), _, _ + ) => d + } + .headOption + .getOrElse( throw new Exception(s"cannot find compiler-interface in zinc $zincVersion dependencies: "++zinc.dependencies.toString) ) + .mavenDependency + .version def valName(dep: BoundMavenDependency) = { val words = dep.artifactId.split("_").head.split("-") @@ -93,7 +104,7 @@ class ToolsTasks( def jarVal(dep: BoundMavenDependency) = "_" + valName(dep) +"Jar" def transitive(dep: Dependency) = (dep +: lib.transitiveDependencies(dep).reverse).collect{case d: BoundMavenDependency => d} - def codeEach(dep: Dependency) = { + def codeEach(dep: Dependency) = { transitive(dep).tails.map(_.reverse).toVector.reverse.drop(1).map{ deps => val d = deps.last @@ -115,6 +126,10 @@ class ToolsTasks( } val assignments = codeEach(zinc) ++ codeEach(scalaXml) val files = scalaDeps ++ transitive(scalaXml) ++ transitive(zinc) + val _scalaVersion = scalaVersion.replace(".","_") + val _scalaXmlVersion = scalaXmlVersion.replace(".","_") + val _zincVersion = zincVersion.replace(".","_") + val _sbtVersion = sbtVersion.replace(".","_") //{ case (name, dep) => s"$name =\n ${tree(dep, 4)};" }.mkString("\n\n ") val code = s"""// This file was auto-generated using `cbt tools cbtEarlyDependencies` package cbt; @@ -126,7 +141,11 @@ import java.util.*; import static cbt.Stage0Lib.*; import static cbt.NailgunLauncher.*; -class EarlyDependencies{ +public class EarlyDependencies{ + + public static String scalaVersion = "$scalaVersion"; + public static String scalaXmlVersion = "$scalaXmlVersion"; + public static String zincVersion = "$zincVersion"; /** ClassLoader for stage1 */ ClassLoader classLoader; @@ -134,25 +153,35 @@ class EarlyDependencies{ /** ClassLoader for zinc */ ClassLoader zinc; -${files.map(d => s""" String ${valName(d)}File;""").mkString("\n")} + String scalaCompiler_File; + String scalaLibrary_File; + String scalaReflect_File; + String sbtInterface_File; + String compilerInterface_File; public EarlyDependencies( String mavenCache, String mavenUrl, ClassLoaderCache classLoaderCache, ClassLoader rootClassLoader ) throws Throwable { -${files.map(d => s""" ${valName(d)}File = mavenCache + "${d.basePath(true)}.jar";""").mkString("\n")} +${files.map(d => s""" String ${valName(d)}File = mavenCache + "${d.basePath(true)}.jar";""").mkString("\n")} ${scalaDeps.map(d => s""" download(new URL(mavenUrl + "${d.basePath(true)}.jar"), Paths.get(${valName(d)}File), "${d.jarSha1}");""").mkString("\n")} ${assignments.mkString("\n")} - classLoader = scalaXml_${scalaXmlVersion.replace(".","_")}_; - classpathArray = scalaXml_${scalaXmlVersion.replace(".","_")}_ClasspathArray; + classLoader = scalaXml_${_scalaXmlVersion}_; + classpathArray = scalaXml_${_scalaXmlVersion}_ClasspathArray; + + zinc = zinc_${_zincVersion}_; - zinc = zinc_${zincVersion.replace(".","_")}_; + scalaCompiler_File = scalaCompiler_${_scalaVersion}_File; + scalaLibrary_File = scalaLibrary_${_scalaVersion}_File; + scalaReflect_File = scalaReflect_${_scalaVersion}_File; + sbtInterface_File = sbtInterface_${_sbtVersion}_File; + compilerInterface_File = compilerInterface_${_sbtVersion}_File; } } """ val file = nailgun ++ ("/" ++ "EarlyDependencies.java") - lib.write( file, code ) + lib.writeIfChanged( file, code ) println( Console.GREEN ++ "Wrote " ++ file.string ++ Console.RESET ) } } diff --git a/stage2/libraries.scala b/stage2/libraries.scala index f0e4ecc..3c4800d 100644 --- a/stage2/libraries.scala +++ b/stage2/libraries.scala @@ -1,5 +1,5 @@ package cbt -class libraries( context: Context, scalaVersion: String ) { +class libraries( context: Context, scalaVersion: String, scalaMajorVersion: String ) { private def dep( name: String ) = DirectoryDependency( context.copy( scalaVersion = Some( scalaVersion ), @@ -7,13 +7,30 @@ class libraries( context: Context, scalaVersion: String ) { ), None ) - def captureArgs = dep( "capture_args" ) - def eval = dep( "eval" ) - def file = dep( "file" ) - def proguard = dep( "proguard" ) - def reflect = dep( "reflect" ) - def common_0 = dep( "common-0" ) - def common_1 = dep( "common-1" ) - def interfaces = dep( "interfaces" ) - def scalatestRunner = dep( "scalatest-runner" ) + object cbt { + def captureArgs = dep( "capture_args" ) + def common_0 = dep( "common-0" ) + def common_1 = dep( "common-1" ) + def eval = dep( "eval" ) + def file = dep( "file" ) + def interfaces = dep( "interfaces" ) + def proguard = dep( "proguard" ) + def reflect = dep( "reflect" ) + def scalatestRunner = dep( "scalatest-runner" ) + } + object scala { + private def _maven = ( g: String, a: String, v: String ) => { + MavenResolver( + context.cbtLastModified, context.paths.mavenCache, mavenCentral + )( + context.logger, context.transientCache, context.classLoaderCache + ) bindOne MavenDependency( g, a, v ) + } + + def library = _maven( "org.scala-lang", "scala-library", scalaVersion ) + def reflect = _maven( "org.scala-lang", "scala-reflect", scalaVersion ) + def compiler = _maven( "org.scala-lang", "scala-compiler", scalaVersion ) + def xml = _maven( "org.scala-lang.modules", "scala-xml_" ++ scalaMajorVersion, "1.0.6" ) + def parserCombinators = _maven( "org.scala-lang.modules", "scala-parser-combinators_" ++ scalaMajorVersion, "1.0.5" ) + } } diff --git a/stage2/plugins.scala b/stage2/plugins.scala index 6c5ee29..d82740f 100644 --- a/stage2/plugins.scala +++ b/stage2/plugins.scala @@ -1,7 +1,12 @@ package cbt -class plugins( implicit context: Context ) { - // TODO: move this out of the OO - private def plugin( dir: String ) = DirectoryDependency( context.cbtHome / "plugins" / dir ) +class plugins( context: Context, scalaVersion: String ) { + private def plugin( name: String ) = DirectoryDependency( + context.copy( + scalaVersion = Some( scalaVersion ), + workingDirectory = context.cbtHome / "plugins" / name + ), + None + ) final lazy val googleJavaFormat = plugin( "google-java-format" ) final lazy val proguard = plugin( "proguard" ) final lazy val sbtLayout = plugin( "sbt_layout" ) @@ -11,7 +16,6 @@ class plugins( implicit context: Context ) { final lazy val scalaJs = plugin( "scalajs" ) final lazy val scalapb = plugin( "scalapb" ) final lazy val scalariform = plugin( "scalariform" ) - final lazy val scalaTest = plugin( "scalatest" ) final lazy val sonatypeRelease = plugin( "sonatype-release" ) final lazy val uberJar = plugin( "uber-jar" ) final lazy val wartremover = plugin( "wartremover" ) diff --git a/stage2/plugins/GenerateBuildInfo.scala b/stage2/plugins/GenerateBuildInfo.scala new file mode 100644 index 0000000..f9c2aff --- /dev/null +++ b/stage2/plugins/GenerateBuildInfo.scala @@ -0,0 +1,29 @@ +package cbt +import java.io.File +trait GenerateBuildInfo extends BaseBuild{ + override def compile = { buildInfo.apply; super.compile } + def buildInfo = GenerateBuildInfo.apply( lib ).config( + s""" + def scalaVersion = "$scalaVersion" +""", + None, + "BuildInfo", + projectDirectory / "src_generated" + ) +} +object GenerateBuildInfo{ + case class apply( lib: Lib ){ + case class config( body: String, `package`: Option[String], className: String, file: File ){ + def apply = { + lib.writeIfChanged( + file / className ++ ".scala", + s"""// generated file${`package`.map("\npackage "++_++"").getOrElse("")} +object $className{ + $body +} +""" + ) + } + } + } +} diff --git a/plugins/scalatest/ScalaTest.scala b/stage2/plugins/ScalaTest.scala index 87ab16d..29a0777 100644 --- a/plugins/scalatest/ScalaTest.scala +++ b/stage2/plugins/ScalaTest.scala @@ -1,7 +1,7 @@ package cbt import java.io.File -trait ScalaTest extends BaseBuild{ - override def dependencies = super.dependencies :+ libraries.scalatestRunner +trait ScalaTest extends BaseBuild { + override def dependencies = super.dependencies :+ libraries.cbt.scalatestRunner override def run: ExitCode = { classLoader.loadClass( "cbt.scalatest.Runner" ).method( "run", classOf[Array[File]], classOf[ClassLoader] diff --git a/stage2/ports.scala b/stage2/ports.scala new file mode 100644 index 0000000..460a255 --- /dev/null +++ b/stage2/ports.scala @@ -0,0 +1,12 @@ +package cbt +class ports( context: Context, scalaVersion: String ) { + private def dep( name: String ) = DirectoryDependency( + context.copy( + scalaVersion = Some( scalaVersion ), + workingDirectory = context.cbtHome / "ports" / name + ), + None + ) + def mima = dep( "migration-manager" ) + def scalariform = dep( "scalariform" ) +} diff --git a/test/test.scala b/test/test.scala index f942375..0208637 100644 --- a/test/test.scala +++ b/test/test.scala @@ -254,7 +254,6 @@ object Main{ compile("../plugins/scalafmt") compile("../plugins/scalajs") compile("../plugins/scalariform") - compile("../plugins/scalatest") compile("../plugins/wartremover") compile("../plugins/uber-jar") compile("../plugins/scalafix-compiler-plugin") |