aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJan Christopher Vogt <oss.nsp@cvogt.org>2017-02-12 17:12:28 -0500
committerGitHub <noreply@github.com>2017-02-12 17:12:28 -0500
commitea813c2d4d7b44de845d086ef77b4b5d057b786e (patch)
tree370f6122027933b7bb12bcc07ba715ed5576a72b
parent19d2251cb9d70b124250f8902c8708596c1fae46 (diff)
parentaca3c4dab2528b30ffad73b67ef95e41ab485304 (diff)
downloadcbt-ea813c2d4d7b44de845d086ef77b4b5d057b786e.tar.gz
cbt-ea813c2d4d7b44de845d086ef77b4b5d057b786e.tar.bz2
cbt-ea813c2d4d7b44de845d086ef77b4b5d057b786e.zip
Merge pull request #337 from cvogt/minor-dotty-plugin-improvements
Minor dotty plugin improvements
-rw-r--r--stage1/Stage1Lib.scala35
-rw-r--r--stage2/plugins/Dotty.scala57
-rw-r--r--stage2/plugins/Frege.scala11
3 files changed, 52 insertions, 51 deletions
diff --git a/stage1/Stage1Lib.scala b/stage1/Stage1Lib.scala
index f73995e..4f3f592 100644
--- a/stage1/Stage1Lib.scala
+++ b/stage1/Stage1Lib.scala
@@ -201,8 +201,6 @@ class Stage1Lib( logger: Logger ) extends BaseLib{
val d = Dependencies(dependencies)
val classpath = d.classpath
val cp = classpath.string
- if(classpath.files.isEmpty)
- throw new Exception("Trying to compile with empty classpath. Source files: " ++ sourceFiles.toString)
if( sourceFiles.isEmpty ){
None
@@ -258,29 +256,28 @@ class Stage1Lib( logger: Logger ) extends BaseLib{
try{
lib.runMain(
_class,
- dualArgs ++ singleArgs ++ Seq(
- "-cp", cp // let's put cp last. It so long
+ dualArgs ++ singleArgs ++ (
+ if(cp.isEmpty) Nil else Seq("-cp", cp)
) ++ sourceFiles.map(_.toString),
zinc.classLoader(classLoaderCache)
)
} catch {
- case e: Exception =>
+ case scala.util.control.NonFatal(e) =>
System.err.println(red("The Scala compiler crashed. Try running it by hand:"))
System.out.println(s"""
- java -cp \\
- ${zinc.classpath.strings.mkString(":\\\n")} \\
- \\
- ${_class} \\
- \\
- ${dualArgs.grouped(2).map(_.mkString(" ")).mkString(" \\\n")} \\
- \\
- ${singleArgs.mkString(" \\\n")} \\
- \\
- -cp \\
- ${classpath.strings.mkString(":\\\n")} \\
- \\
- ${sourceFiles.sorted.mkString(" \\\n")}
- """
+java -cp \\
+${zinc.classpath.strings.mkString(":\\\n")} \\
+\\
+${_class} \\
+\\
+${dualArgs.grouped(2).map(_.mkString(" ")).mkString(" \\\n")} \\
+\\
+${singleArgs.mkString(" \\\n")} \\
+\\
+${if(cp.isEmpty) "" else (" -classpath \\\n" ++ classpath.strings.mkString(":\\\n"))} \\
+\\
+${sourceFiles.sorted.mkString(" \\\n")}
+"""
)
redirectOutToErr( e.printStackTrace )
diff --git a/stage2/plugins/Dotty.scala b/stage2/plugins/Dotty.scala
index d20f3ea..8a49257 100644
--- a/stage2/plugins/Dotty.scala
+++ b/stage2/plugins/Dotty.scala
@@ -5,13 +5,15 @@ import java.nio.file.Files
import java.nio.file.attribute.FileTime
trait Dotty extends BaseBuild{
- def dottyVersion: String = "0.1-20160926-ec28ea1-NIGHTLY"
+ def dottyVersion: String = Dotty.version
def dottyOptions: Seq[String] = Seq()
override def scalaTarget: File = target ++ s"/dotty-$dottyVersion"
- def dottyDependency: DependencyImplementation = Resolver(mavenCentral).bindOne(
- MavenDependency("ch.epfl.lamp","dotty_2.11",dottyVersion)
- )
+ def dottyDependency: DependencyImplementation =
+ Resolver(mavenCentral).bindOne(
+ MavenDependency(Dotty.groupId,Dotty.artifactId,Dotty.version)
+ )
+
private lazy val dottyLib = new DottyLib(
logger, context.cbtLastModified, context.paths.mavenCache,
@@ -31,9 +33,14 @@ trait Dotty extends BaseBuild{
override def repl = dottyLib.repl(context.args, classpath)
- override def dependencies: Seq[Dependency] = Resolver(mavenCentral).bind(
- ScalaDependency( "org.scala-lang.modules", "scala-java8-compat", "0.8.0-RC7" )
- )
+ // this seems needed for cbt run of dotty produced artifacts
+ override def dependencies: Seq[Dependency] = Seq( dottyDependency )
+}
+
+object Dotty{
+ val version: String = "0.1.1-20170203-da7d723-NIGHTLY"
+ val groupId = "ch.epfl.lamp"
+ val artifactId = "dotty_2.11"
}
class DottyLib(
@@ -41,24 +48,22 @@ class DottyLib(
cbtLastModified: Long,
mavenCache: File,
classLoaderCache: ClassLoaderCache,
- dottyDependency: DependencyImplementation
+ dependency: DependencyImplementation
)(implicit transientCache: java.util.Map[AnyRef,AnyRef]){
val lib = new Lib(logger)
import lib._
- private def Resolver(urls: URL*) = MavenResolver(cbtLastModified, mavenCache, urls: _*)
-
def repl(args: Seq[String], classpath: ClassPath) = {
consoleOrFail("Use `cbt direct repl` instead")
lib.runMain(
"dotty.tools.dotc.repl.Main",
Seq(
"-bootclasspath",
- dottyDependency.classpath.string,
+ dependency.classpath.string,
"-classpath",
classpath.string
) ++ args,
- dottyDependency.classLoader(classLoaderCache)
+ dependency.classLoader(classLoaderCache)
)
}
@@ -74,16 +79,16 @@ class DottyLib(
docTarget.mkdirs
val args = Seq(
// FIXME: can we use compiler dependency here?
- "-bootclasspath", dottyDependency.classpath.string, // FIXME: does this break for builds that don't have scalac dependencies?
+ "-bootclasspath", dependency.classpath.string, // FIXME: does this break for builds that don't have scalac dependencies?
"-classpath", dependencyClasspath.string, // FIXME: does this break for builds that don't have scalac dependencies?
"-d", docTarget.toString
) ++ compileArgs ++ sourceFiles.map(_.toString)
logger.lib("creating docs for source files "+args.mkString(", "))
val exitCode = redirectOutToErr{
runMain(
- "dotty.tools.dottydoc.api.java.Dottydoc",
+ "dotty.tools.dottydoc.DocDriver",
args,
- dottyDependency.classLoader(classLoaderCache),
+ dependency.classLoader(classLoaderCache),
fakeInstance = true // this is a hack as Dottydoc's main method is not static
)
}
@@ -102,8 +107,6 @@ class DottyLib(
val d = Dependencies(dependencies)
val classpath = d.classpath
val cp = classpath.string
- if(classpath.files.isEmpty)
- throw new Exception("Trying to compile with empty classpath. Source files: " ++ sourceFiles.toString)
if( sourceFiles.isEmpty ){
None
@@ -118,7 +121,7 @@ class DottyLib(
"-d", compileTarget.toString
)
val singleArgs = dottyOptions.map( "-S" ++ _ )
-
+ val cl = dependency.classLoader(classLoaderCache)
val code =
try{
System.err.println("Compiling with Dotty to " ++ compileTarget.toString)
@@ -127,18 +130,20 @@ class DottyLib(
lib.runMain(
_class,
dualArgs ++ singleArgs ++ Seq(
- "-bootclasspath", dottyDependency.classpath.string, // let's put cp last. It so long
- "-classpath", classpath.string // let's put cp last. It so long
+ "-bootclasspath", dependency.classpath.string
+ ) ++ (
+ if(cp.isEmpty) Nil else Seq("-classpath", cp) // let's put cp last. It so long
) ++ sourceFiles.map(_.toString),
- dottyDependency.classLoader(classLoaderCache)
+ cl
)
}
} catch {
case e: Exception =>
System.err.println(red("Dotty crashed. See https://github.com/lampepfl/dotty/issues. To reproduce run:"))
+ System.err.println(cl)
System.out.println(s"""
java -cp \\
-${dottyDependency.classpath.strings.mkString(":\\\n")} \\
+${dependency.classpath.strings.mkString(":\\\n")} \\
\\
${_class} \\
\\
@@ -147,14 +152,14 @@ ${dualArgs.grouped(2).map(_.mkString(" ")).mkString(" \\\n")} \\
${singleArgs.mkString(" \\\n")} \\
\\
-bootclasspath \\
-${dottyDependency.classpath.strings.mkString(":\\\n")} \\
--classpath \\
-${classpath.strings.mkString(":\\\n")} \\
+${dependency.classpath.strings.mkString(":\\\n")} \\
+${if(cp.isEmpty) "" else (" -classpath \\\n" ++ classpath.strings.mkString(":\\\n"))} \\
\\
${sourceFiles.sorted.mkString(" \\\n")}
+
"""
)
- ExitCode.Failure
+ throw e
}
if(code == ExitCode.Success){
diff --git a/stage2/plugins/Frege.scala b/stage2/plugins/Frege.scala
index c0868af..b5a4dd0 100644
--- a/stage2/plugins/Frege.scala
+++ b/stage2/plugins/Frege.scala
@@ -67,8 +67,6 @@ class FregeLib(
val d = Dependencies(dependencies)
val classpath = d.classpath
val cp = classpath.string
- if(classpath.files.isEmpty)
- throw new Exception("Trying to compile with empty classpath. Source files: " ++ sourceFiles.toString)
if( sourceFiles.isEmpty ){
None
@@ -78,11 +76,13 @@ class FregeLib(
if( d.lastModified > lastCompiled || sourceFiles.exists(_.lastModified > lastCompiled) ){
val _class = "frege.compiler.Main"
+ val fp = (fregeDependency.classpath.strings ++ fregeDependencies.map(_.classpath.string))
val dualArgs =
Seq(
"-target", fregeTarget,
- "-d", compileTarget.toString,
- "-fp", (fregeDependency.classpath.strings ++ fregeDependencies.map(_.classpath.string)).mkString(":")
+ "-d", compileTarget.toString
+ ) ++ (
+ if(fp.isEmpty) Nil else Seq("-fp", fp.mkString(":"))
)
val singleArgs = fregeOptions
val code =
@@ -111,8 +111,7 @@ ${singleArgs.mkString(" \\\n")} \\
\\
-bootclasspath \\
${fregeDependency.classpath.strings.mkString(":\\\n")} \\
--classpath \\
-${classpath.strings.mkString(":\\\n")} \\
+${if(classpath.strings.isEmpty) "" else (" -fp \\\n" ++ classpath.strings.mkString(":\\\n"))} \\
\\
${sourceFiles.sorted.mkString(" \\\n")}
"""