diff options
author | Jan Christopher Vogt <oss.nsp@cvogt.org> | 2016-03-12 00:09:26 -0500 |
---|---|---|
committer | Jan Christopher Vogt <oss.nsp@cvogt.org> | 2016-03-12 00:09:26 -0500 |
commit | b143c01a2e180b647eb27338cb7302aa38ef10c6 (patch) | |
tree | 9608d8ff36a80ac68f968aea8fcc31e4dae4150f /stage2 | |
parent | fae67dc6124a12710599ede6e091e2de236079aa (diff) | |
parent | 55fff670befc97a871cf0f85c65764e108f3d3c1 (diff) | |
download | cbt-b143c01a2e180b647eb27338cb7302aa38ef10c6.tar.gz cbt-b143c01a2e180b647eb27338cb7302aa38ef10c6.tar.bz2 cbt-b143c01a2e180b647eb27338cb7302aa38ef10c6.zip |
Merge pull request #78 from cvogt/chris
Chris
Diffstat (limited to 'stage2')
-rw-r--r-- | stage2/AdminStage2.scala | 9 | ||||
-rw-r--r-- | stage2/AdminTasks.scala | 23 | ||||
-rw-r--r-- | stage2/BasicBuild.scala | 4 | ||||
-rw-r--r-- | stage2/BuildBuild.scala | 2 | ||||
-rw-r--r-- | stage2/Lib.scala | 32 | ||||
-rw-r--r-- | stage2/PackageBuild.scala | 6 | ||||
-rw-r--r-- | stage2/Stage2.scala | 3 |
7 files changed, 48 insertions, 31 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/BasicBuild.scala b/stage2/BasicBuild.scala index c17bce0..bee58dd 100644 --- a/stage2/BasicBuild.scala +++ b/stage2/BasicBuild.scala @@ -15,10 +15,10 @@ import scala.util._ import ammonite.ops.{cwd => _,_} -class BasicBuild(context: Context) extends Build(context) +class BasicBuild( context: Context ) extends Build( context ) class Build(val context: Context) extends Dependency with TriggerLoop{ // library available to builds - final val logger = context.logger + implicit final val logger: Logger = context.logger override final protected val lib: Lib = new Lib(logger) // ========== general stuff ========== 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..e87a19d 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 ) } } @@ -149,7 +143,7 @@ final class Lib(logger: Logger) extends Stage1Lib(logger) with Scaffold{ } class ReflectBuild(val build: Build) extends ReflectObject(build){ - def usage = { + def usage: String = { val baseTasks = lib.taskNames(ru.typeOf[Build]) val thisTasks = lib.taskNames(subclassType) diff baseTasks ( @@ -197,7 +191,9 @@ final class Lib(logger: Logger) extends Stage1Lib(logger) with Scaffold{ System.err.println("") } System.err.println(usage) - System.exit(1) + taskName.foreach{ _ => + ExitCode.Failure + } } } } diff --git a/stage2/PackageBuild.scala b/stage2/PackageBuild.scala index 96c7b6f..4c4e478 100644 --- a/stage2/PackageBuild.scala +++ b/stage2/PackageBuild.scala @@ -2,7 +2,7 @@ package cbt import java.io.File import java.net.URL import scala.collection.immutable.Seq -abstract class PackageBuild(context: Context) extends Build(context) with ArtifactInfo{ +abstract class PackageBuild(context: Context) extends BasicBuild(context) with ArtifactInfo{ def `package`: Seq[File] = lib.concurrently( enableConcurrency )( Seq(() => jar, () => docJar, () => srcJar) )( _() ) @@ -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 diff --git a/stage2/Stage2.scala b/stage2/Stage2.scala index 392e322..4145e55 100644 --- a/stage2/Stage2.scala +++ b/stage2/Stage2.scala @@ -31,7 +31,7 @@ object Stage2{ val first = lib.loadRoot( context ) val build = first.finalBuild - val res = lib.trapExitCode{ + val res = if (loop) { // TODO: this should allow looping over task specific files, like test files as well val triggerFiles = first.triggerLoopFiles.map(lib.realpath) @@ -54,7 +54,6 @@ object Stage2{ } else { new lib.ReflectBuild(build).callNullary(task) } - } init.logger.stage2(s"[$now] Stage2 end") } |