diff --git a/project/AkkaBuild.scala b/project/AkkaBuild.scala index 5eed0ab52b..42cd8a446f 100644 --- a/project/AkkaBuild.scala +++ b/project/AkkaBuild.scala @@ -3,14 +3,16 @@ import Keys._ import MultiJvmPlugin.{ MultiJvm, extraOptions, multiJvmMarker } object AkkaBuild extends Build { - val Organization = "se.scalablesolutions.akka" - val Version = "2.0-SNAPSHOT" - val ScalaVersion = "2.9.0-1" + lazy val buildSettings = Seq( + organization := "se.scalablesolutions.akka", + version := "2.0-SNAPSHOT", + scalaVersion := "2.9.0-1" + ) lazy val akka = Project( id = "akka", base = file("."), - settings = buildSettings ++ Unidoc.settings ++ rstdocSettings ++ Seq( + settings = parentSettings ++ Unidoc.settings ++ rstdocSettings ++ Seq( Unidoc.unidocExclude := Seq(samples.id, tutorials.id), rstdocDirectory <<= baseDirectory / "akka-docs" ), @@ -22,7 +24,7 @@ object AkkaBuild extends Build { base = file("akka-actor"), settings = defaultSettings ++ Seq( autoCompilerPlugins := true, - addCompilerPlugin("org.scala-lang.plugins" % "continuations" % ScalaVersion), + libraryDependencies <+= scalaVersion { v => compilerPlugin("org.scala-lang.plugins" % "continuations" % v) }, scalacOptions += "-P:continuations:enable" ) ) @@ -42,7 +44,7 @@ object AkkaBuild extends Build { dependencies = Seq(testkit), settings = defaultSettings ++ Seq( autoCompilerPlugins := true, - addCompilerPlugin("org.scala-lang.plugins" % "continuations" % ScalaVersion), + libraryDependencies <+= scalaVersion { v => compilerPlugin("org.scala-lang.plugins" % "continuations" % v) }, scalacOptions += "-P:continuations:enable", libraryDependencies ++= Dependencies.actorTests ) @@ -93,7 +95,7 @@ object AkkaBuild extends Build { lazy val mailboxes = Project( id = "akka-durable-mailboxes", base = file("akka-durable-mailboxes"), - settings = buildSettings, + settings = parentSettings, aggregate = Seq(mailboxesCommon, beanstalkMailbox, fileMailbox, redisMailbox, zookeeperMailbox) ) @@ -184,7 +186,7 @@ object AkkaBuild extends Build { lazy val samples = Project( id = "akka-samples", base = file("akka-samples"), - settings = buildSettings, + settings = parentSettings, aggregate = Seq(fsmSample) ) @@ -226,7 +228,7 @@ object AkkaBuild extends Build { lazy val tutorials = Project( id = "akka-tutorials", base = file("akka-tutorials"), - settings = buildSettings, + settings = parentSettings, aggregate = Seq(firstTutorial, secondTutorial) ) @@ -246,14 +248,15 @@ object AkkaBuild extends Build { // Settings - lazy val buildSettings = Defaults.defaultSettings ++ Seq( - organization := Organization, - version := Version, - scalaVersion := ScalaVersion, - crossPaths := false + override lazy val settings = super.settings ++ buildSettings ++ Publish.versionSettings + + lazy val baseSettings = Defaults.defaultSettings ++ Publish.settings + + lazy val parentSettings = baseSettings ++ Seq( + publishArtifact in Compile := false ) - lazy val defaultSettings = buildSettings ++ Seq( + lazy val defaultSettings = baseSettings ++ Seq( resolvers += "Typesafe Repo" at "http://repo.typesafe.com/typesafe/releases/", // compile options diff --git a/project/Publish.scala b/project/Publish.scala new file mode 100644 index 0000000000..a0add06443 --- /dev/null +++ b/project/Publish.scala @@ -0,0 +1,69 @@ +import sbt._ +import Keys._ +import java.io.File + +object Publish { + final val Snapshot = "-SNAPSHOT" + + lazy val settings = Seq( + crossPaths := false, + pomExtra := akkaPomExtra, + publishTo := akkaPublishTo, + credentials ++= akkaCredentials + ) + + lazy val versionSettings = Seq( + commands += stampVersion + ) + + def akkaPomExtra = { + 2009 + http://akka.io + + Scalable Solutions AB + http://scalablesolutions.se + + + + Apache 2 + http://www.apache.org/licenses/LICENSE-2.0.txt + repo + + + } + + def akkaPublishTo: Option[Resolver] = { + val property = Option(System.getProperty("akka.publish.repository")) + val repo = property map { "Akka Publish Repository" at _ } + val m2repo = Path.userHome / ".m2" /"repository" + repo orElse Some(Resolver.file("Local Maven Repository", m2repo)) + } + + def akkaCredentials: Seq[Credentials] = { + val property = Option(System.getProperty("akka.publish.credentials")) + property map (f => Credentials(new File(f))) toSeq + } + + def stampVersion = Command.command("stamp-version") { state => + append((version in ThisBuild ~= stamp) :: Nil, state) + } + + // TODO: replace with extracted.append when updated to sbt 0.10.1 + def append(settings: Seq[Setting[_]], state: State): State = { + val extracted = Project.extract(state) + import extracted._ + val append = Load.transformSettings(Load.projectScope(currentRef), currentRef.build, rootProject, settings) + val newStructure = Load.reapply(session.original ++ append, structure) + Project.setProject(session, newStructure, state) + } + + def stamp(version: String): String = { + if (version endsWith Snapshot) (version stripSuffix Snapshot) + "-" + timestamp(System.currentTimeMillis) + else version + } + + def timestamp(time: Long): String = { + val format = new java.text.SimpleDateFormat("yyyyMMdd-HHmmss") + format.format(new java.util.Date(time)) + } +}