From 8836b83ba3eafe57e3111d0113677fd40e9364db Mon Sep 17 00:00:00 2001 From: Mark Harrah Date: Sat, 23 Apr 2011 15:58:59 -0400 Subject: [PATCH] support earlier launchers --- main/CommandSupport.scala | 5 +++++ main/Defaults.scala | 7 ++++++- main/IvyConsole.scala | 2 +- main/Script.scala | 2 +- 4 files changed, 13 insertions(+), 3 deletions(-) diff --git a/main/CommandSupport.scala b/main/CommandSupport.scala index 61a7cd147..a50808d7f 100644 --- a/main/CommandSupport.scala +++ b/main/CommandSupport.scala @@ -13,6 +13,11 @@ object CommandSupport { def logger(s: State) = s get Keys.logged getOrElse ConsoleLogger() + // slightly better fallback in case of older launcher + def bootDirectory(state: State): File = + try { state.configuration.provider.scalaProvider.launcher.bootDirectory } + catch { case e: NoSuchMethodError => new File(".").getAbsoluteFile } + private def canRead = (_: File).canRead def notReadable(files: Seq[File]): Seq[File] = files filterNot canRead def readable(files: Seq[File]): Seq[File] = files filter canRead diff --git a/main/Defaults.scala b/main/Defaults.scala index 9f92a6d14..9664a4c48 100644 --- a/main/Defaults.scala +++ b/main/Defaults.scala @@ -498,7 +498,7 @@ object Classpaths moduleID <<= normalizedName.identity, defaultConfiguration in GlobalScope :== Some(Configurations.Compile), defaultConfigurationMapping in GlobalScope <<= defaultConfiguration{ case Some(d) => "*->" + d.name; case None => "*->*" }, - ivyPaths <<= (baseDirectory, appConfiguration) { (base, app) => new IvyPaths(base, Option(app.provider.scalaProvider.launcher.ivyHome)) }, + ivyPaths <<= (baseDirectory, appConfiguration) { (base, app) => new IvyPaths(base, bootIvyHome(app)) }, otherResolvers <<= publishTo(_.toList), projectResolver <<= projectResolverTask, projectDependencies <<= projectDependenciesTask, @@ -769,6 +769,11 @@ object Classpaths case _ => arts } } + + // support earlier launchers + def bootIvyHome(app: xsbti.AppConfiguration): Option[File] = + try { Option(app.provider.scalaProvider.launcher.ivyHome) } + catch { case _: NoSuchMethodError => None } } trait BuildExtra diff --git a/main/IvyConsole.scala b/main/IvyConsole.scala index bd6922895..6e7e16a29 100644 --- a/main/IvyConsole.scala +++ b/main/IvyConsole.scala @@ -14,7 +14,7 @@ object IvyConsole lazy val command = Command.command(Name) { state => val Dependencies(managed, repos, unmanaged) = parseDependencies(state.remainingCommands, CommandSupport.logger(state)) - val base = new File(state.configuration.provider.scalaProvider.launcher.bootDirectory, Name) + val base = new File(CommandSupport.bootDirectory(state), Name) IO.createDirectory(base) val (eval, structure) = Load.defaultLoad(state, base, CommandSupport.logger(state)) diff --git a/main/Script.scala b/main/Script.scala index fbc4ed228..4aabdec9b 100644 --- a/main/Script.scala +++ b/main/Script.scala @@ -16,7 +16,7 @@ object Script val scriptArg = state.remainingCommands.headOption getOrElse error("No script file specified") val script = new File(scriptArg).getAbsoluteFile val hash = halve(Hash.toHex(Hash(script.getAbsolutePath))) - val base = new File(state.configuration.provider.scalaProvider.launcher.bootDirectory, hash) + val base = new File(CommandSupport.bootDirectory(state), hash) IO.createDirectory(base) val (eval, structure) = Load.defaultLoad(state, base, CommandSupport.logger(state))