diff options
author | Christopher Vogt <oss.nsp@cvogt.org> | 2016-03-09 01:48:09 -0500 |
---|---|---|
committer | Christopher Vogt <oss.nsp@cvogt.org> | 2016-03-09 01:48:09 -0500 |
commit | b408b441569dc165f4d41b048ff64253695a491d (patch) | |
tree | 8ac98cf412825721528cb0c249b3fac74273e223 /stage2 | |
parent | a5a8515c22a7b434a0da34de48caafbef7e5ee8e (diff) | |
download | cbt-b408b441569dc165f4d41b048ff64253695a491d.tar.gz cbt-b408b441569dc165f4d41b048ff64253695a491d.tar.bz2 cbt-b408b441569dc165f4d41b048ff64253695a491d.zip |
Add feature for starting the Scala REPL in arbitrary versions, propagate logger as implicits
Diffstat (limited to 'stage2')
-rw-r--r-- | stage2/AdminStage2.scala | 9 | ||||
-rw-r--r-- | stage2/AdminTasks.scala | 23 | ||||
-rw-r--r-- | stage2/BuildBuild.scala | 2 | ||||
-rw-r--r-- | stage2/Lib.scala | 26 | ||||
-rw-r--r-- | stage2/PackageBuild.scala | 4 |
5 files changed, 40 insertions, 24 deletions
diff --git a/stage2/AdminStage2.scala b/stage2/AdminStage2.scala index 4120b1c..59f8f7d 100644 --- a/stage2/AdminStage2.scala +++ b/stage2/AdminStage2.scala @@ -1,11 +1,12 @@ package cbt object AdminStage2{ - def main(args: Array[String]) = { - val init = new Init(args.drop(3)) + def main(_args: Array[String]) = { + val args = _args.drop(1).dropWhile(Seq("admin","direct") contains _) + val init = new Init(args) val lib = new Lib(init.logger) - val adminTasks = new AdminTasks(lib, args.drop(3)) + val adminTasks = new AdminTasks(lib, args) new lib.ReflectObject(adminTasks){ def usage: String = "Available methods: " ++ lib.taskNames(subclassType).mkString(" ") - }.callNullary(args.lift(2)) + }.callNullary(args.lift(0)) } } diff --git a/stage2/AdminTasks.scala b/stage2/AdminTasks.scala index 2f7efe1..70b140e 100644 --- a/stage2/AdminTasks.scala +++ b/stage2/AdminTasks.scala @@ -1,12 +1,33 @@ package cbt +import scala.collection.immutable.Seq class AdminTasks(lib: Lib, args: Array[String]){ + implicit val logger: Logger = lib.logger def resolve = { ClassPath.flatten( - args(0).split(",").toVector.map{ + args(1).split(",").toVector.map{ d => val v = d.split(":") new MavenDependency(v(0),v(1),v(2))(lib.logger).classpath } ) } + def amm = ammonite + def ammonite = { + val version = args.lift(1).getOrElse(constants.scalaVersion) + val scalac = new ScalaCompilerDependency( version ) + val d = MavenDependency( + "com.lihaoyi","ammonite-repl_2.11.7",args.lift(1).getOrElse("0.5.6") + ) + // FIXME: this does not work quite yet, throws NoSuchFileException: /ammonite/repl/frontend/ReplBridge$.class + lib.runMain( + "ammonite.repl.Main", Seq(), d.classLoader + ) + } + def scala = { + val version = args.lift(1).getOrElse(constants.scalaVersion) + val scalac = new ScalaCompilerDependency( version ) + lib.runMain( + "scala.tools.nsc.MainGenericRunner", Seq("-cp", scalac.classpath.string), scalac.classLoader + ) + } } diff --git a/stage2/BuildBuild.scala b/stage2/BuildBuild.scala index 9283cdf..5e0f5d3 100644 --- a/stage2/BuildBuild.scala +++ b/stage2/BuildBuild.scala @@ -3,7 +3,7 @@ import java.io.File import scala.collection.immutable.Seq class BuildBuild(context: Context) extends Build(context){ - override def dependencies = Seq( CbtDependency(context.logger) ) ++ super.dependencies + override def dependencies = Seq( CbtDependency()(context.logger) ) ++ super.dependencies def managedBuildDirectory: File = lib.realpath( projectDirectory.parent ) val managedBuild = { val managedContext = context.copy( cwd = managedBuildDirectory ) diff --git a/stage2/Lib.scala b/stage2/Lib.scala index 6f83859..924a6c0 100644 --- a/stage2/Lib.scala +++ b/stage2/Lib.scala @@ -80,35 +80,29 @@ final class Lib(logger: Logger) extends Stage1Lib(logger) with Scaffold{ } def docJar( + scalaVersion: String, sourceFiles: Seq[File], - dependenyClasspath: ClassPath, + dependencyClasspath: ClassPath, apiTarget: File, jarTarget: File, artifactId: String, version: String, compileArgs: Seq[String] ): File = { - // FIXME: get this dynamically somehow, or is this even needed? - val javacp = ClassPath( - "/Library/Java/JavaVirtualMachines/jdk1.8.0_60.jdk/Contents/Home/jre/lib/ext/cldrdata.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_60.jdk/Contents/Home/jre/lib/ext/dnsns.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_60.jdk/Contents/Home/jre/lib/ext/jaccess.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_60.jdk/Contents/Home/jre/lib/ext/jfxrt.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_60.jdk/Contents/Home/jre/lib/ext/localedata.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_60.jdk/Contents/Home/jre/lib/ext/nashorn.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_60.jdk/Contents/Home/jre/lib/ext/sunec.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_60.jdk/Contents/Home/jre/lib/ext/sunjce_provider.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_60.jdk/Contents/Home/jre/lib/ext/sunpkcs11.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_60.jdk/Contents/Home/jre/lib/ext/zipfs.jar:/System/Library/Java/Extensions/MRJToolkit.jar".split(":").toVector.map(new File(_)) - ) - mkdir(Path(apiTarget)) if(sourceFiles.nonEmpty){ - System.err.println("creating docs") + val args = Seq( + // FIXME: can we use compiler dependency here? + "-cp", dependencyClasspath.string, // FIXME: does this break for builds that don't have scalac dependencies? + "-d", apiTarget.toString + ) ++ compileArgs ++ sourceFiles.map(_.toString) + logger.lib("creating docs for source files "+args.mkString(", ")) trapExitCode{ redirectOutToErr{ runMain( "scala.tools.nsc.ScalaDoc", - Seq( - // FIXME: can we use compiler dependency here? - "-cp", /*javacp++":"++*/ScalaDependencies(logger).classpath.string ++ ":" ++ dependenyClasspath.string, - "-d", apiTarget.toString - ) ++ compileArgs ++ sourceFiles.map(_.toString), - new URLClassLoader( - ScalaDependencies(logger).classpath ++ javacp, - ClassLoader.getSystemClassLoader - ) + args, + ScalaDependencies(scalaVersion)(logger).classLoader ) } } diff --git a/stage2/PackageBuild.scala b/stage2/PackageBuild.scala index 96c7b6f..b037e7f 100644 --- a/stage2/PackageBuild.scala +++ b/stage2/PackageBuild.scala @@ -14,12 +14,12 @@ abstract class PackageBuild(context: Context) extends Build(context) with Artifa private object cacheSrcJarBasicBuild extends Cache[File] def srcJar: File = cacheSrcJarBasicBuild{ - lib.srcJar(sources, artifactId, version, scalaTarget) + lib.srcJar( sourceFiles, artifactId, version, scalaTarget ) } private object cacheDocBasicBuild extends Cache[File] def docJar: File = cacheDocBasicBuild{ - lib.docJar( sources, dependencyClasspath, apiTarget, jarTarget, artifactId, version, scalacOptions ) + lib.docJar( scalaVersion, sourceFiles, dependencyClasspath, apiTarget, jarTarget, artifactId, version, scalacOptions ) } override def jars = jar +: dependencyJars |