diff options
23 files changed, 99 insertions, 223 deletions
@@ -9,10 +9,8 @@ dependencies: - ./cbt compile - ./cbt direct - ./cbt -Dlog=all - - cd plugins/scalatest/ && ../../cbt compile && cd ../../ test: override: - ./cbt direct test - ./cbt test - - cd examples/build-scalatest && ../../cbt test && cd ../.. diff --git a/examples/build-scalajs/build/build/build.scala b/examples/build-scalajs/build/build/build.scala index ca01ba1..d6c2a1b 100644 --- a/examples/build-scalajs/build/build/build.scala +++ b/examples/build-scalajs/build/build/build.scala @@ -7,5 +7,5 @@ class Build( context: Context ) extends BuildBuild( context ){ override def dependencies = super.dependencies :+ - BuildDependency(new File(context.cbtHome + "/plugins/scalajs")) + DirectoryDependency(new File(context.cbtHome + "/plugins/scalajs")) } diff --git a/examples/build-scalatest/build/build.scala b/examples/scalatest-example/build/build.scala index 48248fd..48248fd 100644 --- a/examples/build-scalatest/build/build.scala +++ b/examples/scalatest-example/build/build.scala diff --git a/examples/build-scalatest/build/build/build.scala b/examples/scalatest-example/build/build/build.scala index d641b51..d641b51 100644 --- a/examples/build-scalatest/build/build/build.scala +++ b/examples/scalatest-example/build/build/build.scala diff --git a/examples/build-scalatest/src/main/scala/Hello.scala b/examples/scalatest-example/src/main/scala/Hello.scala index 099a84d..099a84d 100644 --- a/examples/build-scalatest/src/main/scala/Hello.scala +++ b/examples/scalatest-example/src/main/scala/Hello.scala diff --git a/examples/build-scalatest/src/test/scala/Test.scala b/examples/scalatest-example/src/test/scala/Test.scala index 48b0a36..48b0a36 100644 --- a/examples/build-scalatest/src/test/scala/Test.scala +++ b/examples/scalatest-example/src/test/scala/Test.scala diff --git a/nailgun_launcher/Stage0Lib.java b/nailgun_launcher/Stage0Lib.java index ae09d78..9c13680 100644 --- a/nailgun_launcher/Stage0Lib.java +++ b/nailgun_launcher/Stage0Lib.java @@ -48,7 +48,7 @@ public class Stage0Lib{ public static File write(File file, String content, OpenOption... options) throws Exception{ file.getParentFile().mkdirs(); - Files.write(file.toPath(), content.getBytes()); + Files.write(file.toPath(), content.getBytes(), options); return file; } @@ -74,7 +74,10 @@ public class Stage0Lib{ "-sbt-interface", earlyDeps.sbtInterface_0_13_9_File, "-compiler-interface", earlyDeps.compilerInterface_0_13_9_File, "-cp", classpath, - "-d", target + "-d", target, + "-S-deprecation", + "-S-feature", + "-S-unchecked" } ) ); diff --git a/stage1/Stage1.scala b/stage1/Stage1.scala index 1059647..c94d1a4 100644 --- a/stage1/Stage1.scala +++ b/stage1/Stage1.scala @@ -87,7 +87,10 @@ object Stage1{ val paths = CbtPaths(cbtHome, cache) import paths._ - val stage2sourceFiles = stage2.listFiles.toVector.filter(_.isFile).filter(_.toString.endsWith(".scala")) + val stage2sourceFiles = ( + stage2.listFiles ++ (stage2 ++ "/plugins").listFiles + ).toVector.filter(_.isFile).filter(_.toString.endsWith(".scala")) + val cbtHasChanged = _cbtChanged || lib.needsUpdate(stage2sourceFiles, stage2StatusFile) val cls = this.getClass.getClassLoader.loadClass("cbt.NailgunLauncher") @@ -101,7 +104,7 @@ object Stage1{ stage2sourceFiles, stage2Target, stage2StatusFile, cbtDependency.dependencyClasspath, mavenCache, - Seq("-deprecation"), classLoaderCache, + Seq("-deprecation","-feature","-unchecked"), classLoaderCache, zincVersion = "0.3.9", scalaVersion = constants.scalaVersion ) diff --git a/stage2/BasicBuild.scala b/stage2/BasicBuild.scala index 4be0e58..42384db 100644 --- a/stage2/BasicBuild.scala +++ b/stage2/BasicBuild.scala @@ -9,17 +9,6 @@ import java.util.jar._ import scala.util._ -trait Recommended extends BaseBuild{ - override def scalacOptions = super.scalacOptions ++ Seq( - "-feature", - "-deprecation", - "-unchecked", - "-language:postfixOps", - "-language:implicitConversions", - "-language:higherKinds", - "-language:existentials" - ) -} class BasicBuild(val context: Context) extends BaseBuild trait BaseBuild extends DependencyImplementation with BuildInterface with TriggerLoop with SbtDependencyDsl{ def context: Context @@ -98,7 +87,7 @@ trait BaseBuild extends DependencyImplementation with BuildInterface with Trigge scalaVersion: String = scalaMajorVersion ) = lib.ScalaDependency( groupId, artifactId, version, classifier, scalaVersion ) - final def BuildDependency(path: File) = cbt.BuildDependency( + final def DirectoryDependency(path: File) = cbt.DirectoryDependency( context.copy( projectDirectory = path, args = Seq() ) ) @@ -120,7 +109,11 @@ trait BaseBuild extends DependencyImplementation with BuildInterface with Trigge // ========== compile, run, test ========== /** scalac options used for zinc and scaladoc */ - def scalacOptions: Seq[String] = Seq() + def scalacOptions: Seq[String] = Seq( + "-feature", + "-deprecation", + "-unchecked" + ) private object needsUpdateCache extends Cache[Boolean] def needsUpdate: Boolean = needsUpdateCache( @@ -143,9 +136,12 @@ trait BaseBuild extends DependencyImplementation with BuildInterface with Trigge def runClass: String = "Main" def run: ExitCode = lib.runMainIfFound( runClass, context.args, classLoader(context.classLoaderCache) ) - def test: Option[ExitCode] = { - lib.test(context) - } + def test: Option[ExitCode] = + Some(new lib.ReflectBuild( + DirectoryDependency(projectDirectory++"/test").build + ).callNullary(Some("run"))) + def t = test + def rt = recursiveUnsafe(Some("test")) def recursiveSafe(_run: BuildInterface => Any): ExitCode = { val builds = (this +: transitiveDependencies).collect{ @@ -192,9 +188,7 @@ trait BaseBuild extends DependencyImplementation with BuildInterface with Trigge } def c = compile - def t = test def r = run - def rt = recursiveUnsafe(Some("test")) /* context.logger.composition(">"*80) diff --git a/stage2/BuildBuild.scala b/stage2/BuildBuild.scala index 7eab5e6..db5374c 100644 --- a/stage2/BuildBuild.scala +++ b/stage2/BuildBuild.scala @@ -8,8 +8,8 @@ trait BuildBuild extends BaseBuild{ ) object plugins{ - final val scalaTest = BuildDependency( managedContext.cbtHome ++ "/plugins/scalatest" ) - final val sbtLayout = BuildDependency( managedContext.cbtHome ++ "/plugins/sbt_layout" ) + final val scalaTest = DirectoryDependency( managedContext.cbtHome ++ "/plugins/scalatest" ) + final val sbtLayout = DirectoryDependency( managedContext.cbtHome ++ "/plugins/sbt_layout" ) } override def dependencies = diff --git a/stage2/BuildDependency.scala b/stage2/BuildDependency.scala index aba35c6..c0b53ad 100644 --- a/stage2/BuildDependency.scala +++ b/stage2/BuildDependency.scala @@ -15,7 +15,7 @@ trait TriggerLoop extends DependencyImplementation{ def triggerLoopFiles: Seq[File] } /** You likely want to use the factory method in the BasicBuild class instead of this. */ -case class BuildDependency(context: Context) extends TriggerLoop{ +case class DirectoryDependency(context: Context) extends TriggerLoop{ override def show = this.getClass.getSimpleName ++ "(" ++ context.projectDirectory.string ++ ")" final override lazy val logger = context.logger final override lazy val lib: Lib = new Lib(logger) @@ -28,7 +28,7 @@ case class BuildDependency(context: Context) extends TriggerLoop{ def targetClasspath = ClassPath() } /* -case class DependencyOr(first: BuildDependency, second: JavaDependency) extends ProjectProxy with BuildDependencyBase{ +case class DependencyOr(first: DirectoryDependency, second: JavaDependency) extends ProjectProxy with DirectoryDependencyBase{ val isFirst = new File(first.context.projectDirectory).exists def triggerLoopFiles = if(isFirst) first.triggerLoopFiles else Seq() protected val delegate = if(isFirst) first else second diff --git a/stage2/GitDependency.scala b/stage2/GitDependency.scala index bb3cc63..6510ede 100644 --- a/stage2/GitDependency.scala +++ b/stage2/GitDependency.scala @@ -39,7 +39,7 @@ case class GitDependency( } private object dependencyCache extends Cache[DependencyImplementation] def dependency = dependencyCache{ - BuildDependency( + DirectoryDependency( context.copy( projectDirectory = checkout ++ subDirectory.map("/" ++ _).getOrElse("") ) diff --git a/stage2/Lib.scala b/stage2/Lib.scala index 2430c1d..c08657f 100644 --- a/stage2/Lib.scala +++ b/stage2/Lib.scala @@ -107,26 +107,6 @@ final class Lib(logger: Logger) extends Stage1Lib(logger) with Scaffold{ } } - def test( context: Context ): Option[ExitCode] = { - if((context.projectDirectory ++ "/test").exists){ - val loggers = logger.enabledLoggers.mkString(",") - // FIXME: this is a hack to pass logger args on to the tests. - // should probably have a more structured way - val loggerArg = if(loggers != "") Some("-Dlog="++loggers) else None - - logger.lib(s"invoke testDefault( $context )") - val exitCode: ExitCode = - new ReflectBuild( - loadDynamic( - context.copy( projectDirectory = context.projectDirectory ++ "/test", args = loggerArg.toVector ++ context.args ), - new BasicBuild(_) with mixins.Test - ) - ).callNullary( Some("run") ) - logger.lib(s"return testDefault( $context )") - Some(exitCode) - } else None - } - // task reflection helpers def tasks(cls:Class[_]): Map[String, Method] = Stream @@ -153,8 +133,7 @@ final class Lib(logger: Logger) extends Stage1Lib(logger) with Scaffold{ val baseTasks = Seq( classOf[BasicBuild], classOf[PackageJars], - classOf[Publish], - classOf[Recommended] + classOf[Publish] ).flatMap(lib.taskNames).distinct.sorted val thisTasks = lib.taskNames(buildClass) diff baseTasks ( diff --git a/stage2/Scaffold.scala b/stage2/Scaffold.scala index 0214a0d..32e474f 100644 --- a/stage2/Scaffold.scala +++ b/stage2/Scaffold.scala @@ -24,55 +24,25 @@ trait Scaffold{ ) } - def createBasicBuild( + def createBuild( projectDirectory: File ): Unit = { createFile(projectDirectory, "build/build.scala", s"""import cbt._ class Build(val context: Context) extends BaseBuild{ /* - override def dependencies = ( - super.dependencies // don't forget super.dependencies here - ++ + override def dependencies = + super.dependencies ++ // don't forget super.dependencies here + Seq( + // source dependency + DirectoryDependency( projectDirectory ++ "/subProject" ) + ) ++ Resolver( mavenCentral ).bind( - // automatically add Scala major version to artifact id - // CBT-style Scala dependency + // CBT-style Scala dependencies ScalaDependency( "com.lihaoyi", "ammonite-ops", "0.5.5" ) - // or SBT-style Scala dependency - "com.lihaoyi" %% "ammonite-ops" % "0.5.5" - - // don't mess with the artifact id - // CBT-Style Java dependency MavenDependency( "com.lihaoyi", "ammonite-ops_2.11", "0.5.5" ) - // or SBT-style Java dependency - "com.lihaoyi" % "ammonite-ops_2.11" % "0.5.5" - ) - ) - */ -} -""" - ) - } - def createBuildBuild( - projectDirectory: File - ): Unit = { - createFile(projectDirectory, "build/build/build.scala", s"""import cbt._ -class Build(val context: Context) extends BuildBuild{ -/* - override def dependencies = ( - super.dependencies // don't forget super.dependencies here - ++ - Resolver( mavenCentral ).bind( - // automatically add Scala major version to artifact id - // CBT-style Scala dependency - ScalaDependency( "com.lihaoyi", "ammonite-ops", "0.5.5" ) - // or SBT-style Scala dependency + // SBT-style dependencies "com.lihaoyi" %% "ammonite-ops" % "0.5.5" - - // don't mess with the artifact id - // CBT-Style Java dependency - MavenDependency( "com.lihaoyi", "ammonite-ops_2.11", "0.5.5" ) - // or SBT-style Java dependency "com.lihaoyi" % "ammonite-ops_2.11" % "0.5.5" ) ) @@ -81,73 +51,4 @@ class Build(val context: Context) extends BuildBuild{ """ ) } - -/*, - - "build/build/build.scala" -> s"""import cbt._ -class Build(val context: Context) extends BuildBuild{ - override def dependencies = super.dependencies ++ Seq( - BuildDependency( projectDirectory.parent ++ "/build-shared") - // , "com.lihaoyi" %% "ammonite-ops" % "0.5.5" - ) -} -""", - - "test/Main.scala" -> s"""object Main{ - def main( args: Array[String] ) = { - assert( false, "Go. Write some tests :)!" ) - } -} -""", - - "test/build/build.scala" -> s"""import cbt._ -class Build(val context: Context) extends BaseBuild with BuildShared/* with mixins.ScalaTest*/{ - // def scalaTestVersion = "2.2.6" - - override def dependencies = super.dependencies ++ Seq( - // , "org.scalacheck" %% "scalacheck" % "1.13.0" - ) } -""", - - "test/build/build/build.scala" -> s"""import cbt._ -class Build(val context: Context) extends BuildBuild{ - override def scalaVersion: String = "2.11.8" - - override def dependencies = super.dependencies ++ Seq( - BuildDependency( projectDirectory.parent.parent ++ "/build-shared") - // , "com.lihaoyi" %% "ammonite-ops" % "0.5.5" - ) -} -""", - - "build-shared/build/build.scala" -> s"""import cbt._ -class Build(val context: Context) extends BaseBuild{ - override def scalaVersion: String = "$scalaVersion" - - override def dependencies = super.dependencies ++ Seq( // don't forget super.dependencies here - CbtDependency - // , "org.cvogt" %% "scala-extensions" % "0.4.1" - ) -} -""", - - "build-shared/BuildShared.scala" -> s"""import cbt._ -trait BuildShared extends BaseBuild{ - override def scalaVersion: String = "$scalaVersion" - override def enableConcurrency = false // enable for speed, disable for debugging - - override def groupId = "$groupId" - override def version = "$version" - - // required for .pom file - override def url : URL = lib.requiredForPom("url") - override def developers: Seq[Developer] = lib.requiredForPom("developers") - override def licenses : Seq[License] = lib.requiredForPom("licenses") - override def scmUrl : String = lib.requiredForPom("scmUrl") - override def scmConnection: String = lib.requiredForPom("scmConnection") - override def pomExtra: Seq[scala.xml.Node] = Seq() -} -"""*/ - -}
\ No newline at end of file diff --git a/stage2/ToolsTasks.scala b/stage2/ToolsTasks.scala index bac3406..2c4978e 100644 --- a/stage2/ToolsTasks.scala +++ b/stage2/ToolsTasks.scala @@ -16,8 +16,7 @@ class ToolsTasks( private def Resolver( urls: URL* ) = MavenResolver(cbtHasChanged,mavenCache,urls: _*) implicit val logger: Logger = lib.logger def createMain: Unit = lib.createMain( cwd ) - def createBasicBuild: Unit = lib.createBasicBuild( cwd ) - def createBuildBuild: Unit = lib.createBuildBuild( cwd ) + def createBuild: Unit = lib.createBuild( cwd ) def resolve = { ClassPath.flatten( args(1).split(",").toVector.map{ diff --git a/stage2/mixins.scala b/stage2/mixins.scala deleted file mode 100644 index 221fcc5..0000000 --- a/stage2/mixins.scala +++ /dev/null @@ -1,57 +0,0 @@ -package cbt -package mixins -import java.net.URL -import java.io._ -trait Test extends BaseBuild{ - lazy val testedBuild = BuildDependency( projectDirectory.parent ) - override def dependencies = Seq( testedBuild ) ++ super.dependencies - override def defaultScalaVersion = testedBuild.build.scalaVersion -} -trait SbtTest extends Test{ - override def sources = Vector( projectDirectory.parent ++ "/src/test/scala" ) -} - -trait ScalaParadise extends BaseBuild{ - def scalaParadiseVersion = "2.1.0" - - private def scalaParadiseDependency = - Resolver( mavenCentral ).bindOne( - "org.scalamacros" % ("paradise_" ++ scalaVersion) % scalaParadiseVersion - ) - - override def dependencies = ( - super.dependencies // don't forget super.dependencies here - ++ ( - if(scalaVersion.startsWith("2.10.")) - Seq(scalaParadiseDependency) - else - Seq() - ) - ) - - override def scalacOptions = ( - super.scalacOptions - ++ ( - if(scalaVersion.startsWith("2.10.")) - Seq("-Xplugin:"++scalaParadiseDependency.exportedClasspath.string) - else - Seq() - ) - ) -} - -trait Suggested extends BaseBuild{ - override def scalacOptions = super.scalacOptions ++ Seq( - "-language:experimental.macros" - ) -} - -trait Github extends Publish{ - def user: String - def githubProject = name - def githubUser = user - final def githubUserProject = githubUser ++ "/" ++ githubProject - override def url = new URL(s"http://github.com/$githubUserProject") - override def scmUrl = s"git@github.com:$githubUserProject.git" - override def scmConnection = s"scm:git:$scmUrl" -} diff --git a/stage2/plugins/AdvancedFlags.scala b/stage2/plugins/AdvancedFlags.scala new file mode 100644 index 0000000..4ff701d --- /dev/null +++ b/stage2/plugins/AdvancedFlags.scala @@ -0,0 +1,10 @@ +package cbt +trait AdvancedScala extends BaseBuild{ + override def scalacOptions = super.scalacOptions ++ Seq( + "-language:postfixOps", + "-language:implicitConversions", + "-language:higherKinds", + "-language:existentials", + "-language:experimental.macros" + ) +} diff --git a/stage2/plugins/GithubPom.scala b/stage2/plugins/GithubPom.scala new file mode 100644 index 0000000..8b11385 --- /dev/null +++ b/stage2/plugins/GithubPom.scala @@ -0,0 +1,11 @@ +package cbt +import java.net.URL +trait GithubPom extends Publish{ + def user: String + def githubProject = name + def githubUser = user + final def githubUserProject = githubUser ++ "/" ++ githubProject + override def url = new URL(s"http://github.com/$githubUserProject") + override def scmUrl = s"git@github.com:$githubUserProject.git" + override def scmConnection = s"scm:git:$scmUrl" +} diff --git a/stage2/plugins/ScalaParadise.scala b/stage2/plugins/ScalaParadise.scala new file mode 100644 index 0000000..28ee934 --- /dev/null +++ b/stage2/plugins/ScalaParadise.scala @@ -0,0 +1,29 @@ +package cbt +trait ScalaParadise extends BaseBuild{ + def scalaParadiseVersion = "2.1.0" + + private def scalaParadiseDependency = + Resolver( mavenCentral ).bindOne( + "org.scalamacros" % ("paradise_" ++ scalaVersion) % scalaParadiseVersion + ) + + override def dependencies = ( + super.dependencies // don't forget super.dependencies here + ++ ( + if(scalaVersion.startsWith("2.10.")) + Seq(scalaParadiseDependency) + else + Seq() + ) + ) + + override def scalacOptions = ( + super.scalacOptions + ++ ( + if(scalaVersion.startsWith("2.10.")) + Seq("-Xplugin:"++scalaParadiseDependency.jar.string) + else + Seq() + ) + ) +} diff --git a/stage2/pom.scala b/stage2/pom.scala index 610f9f6..b521d51 100644 --- a/stage2/pom.scala +++ b/stage2/pom.scala @@ -1,5 +1,6 @@ package cbt +import java.net.URL case class Organization( name: String, - url: Option[String] + url: Option[URL] ) diff --git a/test/build/build.scala b/test/build/build.scala index aef96a6..5a138fb 100644 --- a/test/build/build.scala +++ b/test/build/build.scala @@ -1,4 +1,4 @@ import cbt._ class Build(val context: cbt.Context) extends BaseBuild{ - override def dependencies = Seq( context.cbtDependency ) ++ super.dependencies + override def dependencies = super.dependencies :+ context.cbtDependency } diff --git a/test/multi-build/build/build.scala b/test/multi-build/build/build.scala index 5ab1565..5576a3d 100644 --- a/test/multi-build/build/build.scala +++ b/test/multi-build/build/build.scala @@ -1,7 +1,7 @@ import cbt._ class Build(val context: Context) extends BaseBuild{ override def dependencies = Seq( - BuildDependency(projectDirectory++"/sub1"), - BuildDependency(projectDirectory++"/sub2") + DirectoryDependency(projectDirectory++"/sub1"), + DirectoryDependency(projectDirectory++"/sub2") ) ++ super.dependencies } diff --git a/test/test.scala b/test/test.scala index 5a4392f..8c609dd 100644 --- a/test/test.scala +++ b/test/test.scala @@ -156,6 +156,11 @@ object Main{ usage("simple-fixed") compile("simple-fixed") + compile("../plugins/sbt_layout") + compile("../plugins/scalajs") + compile("../plugins/scalatest") + compile("../examples/scalatest-example") + System.err.println(" DONE!") System.err.println( successes.toString ++ " succeeded, "++ failures.toString ++ " failed" ) if(failures > 0) System.exit(1) else System.exit(0) |