summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaul Phillips <paulp@improving.org>2010-03-23 04:17:59 +0000
committerPaul Phillips <paulp@improving.org>2010-03-23 04:17:59 +0000
commitae8c065594aa605734b66c11693e5e584feaeddd (patch)
tree3c93cdc9a3d25ce9260bc7e7322b4f41c0c6e8d2
parent88aab1cf8e06f98ccd18437974c09162ee54149f (diff)
downloadscala-ae8c065594aa605734b66c11693e5e584feaeddd.tar.gz
scala-ae8c065594aa605734b66c11693e5e584feaeddd.tar.bz2
scala-ae8c065594aa605734b66c11693e5e584feaeddd.zip
Went ahead and implemented classpaths as descri...
Went ahead and implemented classpaths as described in email to scala-internals on the theory that at this point I must know what I'm doing. ** PUBLIC SERVICE ANNOUNCEMENT ** If your code of whatever kind stopped working with this commit (most likely the error is something like "object scala not found") you can get it working again with either of: passing -usejavacp on the command line set system property "scala.usejavacp" to "true" Either of these will alert scala that you want the java application classpath to be utilized by scala as well. Review by community.
-rw-r--r--src/compiler/scala/tools/ant/sabbus/ScalacFork.scala5
-rw-r--r--src/compiler/scala/tools/ant/sabbus/Settings.scala3
-rw-r--r--src/compiler/scala/tools/nsc/settings/MutableSettings.scala2
-rw-r--r--src/compiler/scala/tools/nsc/settings/ScalaSettings.scala1
-rw-r--r--src/compiler/scala/tools/nsc/settings/StandardScalaSettings.scala3
-rw-r--r--src/compiler/scala/tools/util/ClassPathSettings.scala3
-rw-r--r--src/compiler/scala/tools/util/PathResolver.scala33
-rw-r--r--src/partest/scala/tools/partest/nest/CompileManager.scala1
-rw-r--r--src/partest/scala/tools/partest/nest/Worker.scala1
-rw-r--r--test/files/run/programmatic-main.scala4
10 files changed, 19 insertions, 37 deletions
diff --git a/src/compiler/scala/tools/ant/sabbus/ScalacFork.scala b/src/compiler/scala/tools/ant/sabbus/ScalacFork.scala
index 1e5d3c2b66..5b64369a2f 100644
--- a/src/compiler/scala/tools/ant/sabbus/ScalacFork.scala
+++ b/src/compiler/scala/tools/ant/sabbus/ScalacFork.scala
@@ -71,10 +71,7 @@ class ScalacFork extends MatchingTask with ScalacShared with TaskArgs {
settings.d = destinationDir
compTarget foreach (settings.target = _)
- compilationPath foreach { x =>
- settings.classpath = x
- settings.javaignorecp = true // ensures java classpath will not be used
- }
+ compilationPath foreach (settings.classpath = _)
sourcePath foreach (settings.sourcepath = _)
params foreach (settings.more = _)
diff --git a/src/compiler/scala/tools/ant/sabbus/Settings.scala b/src/compiler/scala/tools/ant/sabbus/Settings.scala
index 45c1b20052..2719196095 100644
--- a/src/compiler/scala/tools/ant/sabbus/Settings.scala
+++ b/src/compiler/scala/tools/ant/sabbus/Settings.scala
@@ -64,12 +64,9 @@ class Settings {
def more = moreBf.get
def more_=(s: String): this.type = { moreBf = Some(s); this }
- var javaignorecp: Boolean = false
-
def toArgs: List[String] =
(if (!gBf.isEmpty) "-g:"+g :: Nil else Nil) :::
(if (uncheckedBf) "-unchecked" :: Nil else Nil) :::
- (if (javaignorecp) "-javaignorecp" :: Nil else Nil) :::
(if (!classpathBf.isEmpty) "-classpath" :: classpath.toString :: Nil else Nil) :::
(if (!sourcepathBf.isEmpty) "-sourcepath" :: sourcepath.toString :: Nil else Nil) :::
(if (!sourcedirBf.isEmpty) "-Xsourcedir" :: sourcedir.toString :: Nil else Nil) :::
diff --git a/src/compiler/scala/tools/nsc/settings/MutableSettings.scala b/src/compiler/scala/tools/nsc/settings/MutableSettings.scala
index 3ce5e43af9..44ab9c6062 100644
--- a/src/compiler/scala/tools/nsc/settings/MutableSettings.scala
+++ b/src/compiler/scala/tools/nsc/settings/MutableSettings.scala
@@ -184,10 +184,8 @@ class MutableSettings(val errorFn: String => Unit) extends AbsSettings with Scal
val prepend = new StringSetting(name + "/p", "", "", "") with InternalSetting
val append = new StringSetting(name + "/a", "", "", "") with InternalSetting
- /** Not flipping this part on just yet.
add[StringSetting](prepend)
add[StringSetting](append)
- */
add(new PathSetting(name, arg, descr, default, prepend, append))
}
diff --git a/src/compiler/scala/tools/nsc/settings/ScalaSettings.scala b/src/compiler/scala/tools/nsc/settings/ScalaSettings.scala
index 0de60672ac..84ede32504 100644
--- a/src/compiler/scala/tools/nsc/settings/ScalaSettings.scala
+++ b/src/compiler/scala/tools/nsc/settings/ScalaSettings.scala
@@ -30,6 +30,7 @@ trait ScalaSettings extends AbsScalaSettings with StandardScalaSettings {
* Temporary Settings
*/
val suppressVTWarn = BooleanSetting ("-Ysuppress-vt-typer-warnings", "Suppress warnings from the typer when testing the virtual class encoding, NOT FOR FINAL!")
+ val javaignorecp = BooleanSetting ("-javaignorecp", "Does nothing - is being removed.") // !!! marked for death, but need new starr.
/**
* Standard settings
diff --git a/src/compiler/scala/tools/nsc/settings/StandardScalaSettings.scala b/src/compiler/scala/tools/nsc/settings/StandardScalaSettings.scala
index 74e69b82e6..12ae5c9d0e 100644
--- a/src/compiler/scala/tools/nsc/settings/StandardScalaSettings.scala
+++ b/src/compiler/scala/tools/nsc/settings/StandardScalaSettings.scala
@@ -17,7 +17,6 @@ trait StandardScalaSettings {
self: AbsScalaSettings =>
/** Path related settings.
- * !!! javaignorecp is temporary while I try to get an iron grip on the classpath.
*/
val bootclasspath = PathSetting ("-bootclasspath", "path", "Override location of bootstrap class files", Defaults.scalaBootClassPath)
val classpath: PathSetting // is mutated directly in various places (thus inspiring this very effort)
@@ -25,7 +24,6 @@ trait StandardScalaSettings {
val extdirs = PathSetting ("-extdirs", "dirs", "Override location of installed extensions", Defaults.scalaExtDirs)
val javabootclasspath = PathSetting ("-javabootclasspath", "path", "Override java boot classpath.", Defaults.javaBootClassPath)
val javaextdirs = PathSetting ("-javaextdirs", "path", "Override java extdirs classpath.", Defaults.javaExtDirs)
- val javaignorecp = BooleanSetting ("-javaignorecp", "scala will not use java's -classpath no matter what.")
val sourcepath = StringSetting ("-sourcepath", "path", "Specify where to find input source files", "")
/** Other settings.
@@ -44,6 +42,7 @@ trait StandardScalaSettings {
val target = ChoiceSetting ("-target", "Specify for which target object files should be built", List("jvm-1.5", "msil"), "jvm-1.5")
val unchecked = BooleanSetting ("-unchecked", "Enable detailed unchecked warnings")
val uniqid = BooleanSetting ("-uniqid", "Print identifiers with unique names for debugging")
+ val usejavacp = BooleanSetting ("-usejavacp", "Utilize the java.class.path in classpath resolution.")
val verbose = BooleanSetting ("-verbose", "Output messages about what the compiler is doing")
val version = BooleanSetting ("-version", "Print product version and exit")
diff --git a/src/compiler/scala/tools/util/ClassPathSettings.scala b/src/compiler/scala/tools/util/ClassPathSettings.scala
index bb838f1e66..ec2e1c3c5a 100644
--- a/src/compiler/scala/tools/util/ClassPathSettings.scala
+++ b/src/compiler/scala/tools/util/ClassPathSettings.scala
@@ -8,10 +8,7 @@ package util
trait ClassPathSettings {
def javabootclasspath: String // -javabootclasspath
- def javabootPrepend: String // -javabootclasspath/p
- def javabootAppend: String // -javabootclasspath/a
def javaextdirs: String // -javaextdirs
-
def bootclasspath: String // -bootclasspath
def extdirs: String // -extdirs
def classpath: String // -classpath
diff --git a/src/compiler/scala/tools/util/PathResolver.scala b/src/compiler/scala/tools/util/PathResolver.scala
index 58ac3bfa56..3f5b7c4d62 100644
--- a/src/compiler/scala/tools/util/PathResolver.scala
+++ b/src/compiler/scala/tools/util/PathResolver.scala
@@ -48,29 +48,20 @@ object PathResolver {
File(url.getFile).parent.path
} getOrElse ""
- def classPathEnv = envOrElse("CLASSPATH", "")
- def sourcePathEnv = envOrElse("SOURCEPATH", "") // not used
- def scalaHomeEnv = envOrElse("SCALA_HOME", "") // not used
+ // No environment variables are used. It's for the best.
+ //
+ // def classPathEnv = envOrElse("CLASSPATH", "")
+ // def sourcePathEnv = envOrElse("SOURCEPATH", "")
+ // def scalaHomeEnv = envOrElse("SCALA_HOME", "")
+
def javaBootClassPath = propOrElse("sun.boot.class.path", searchForBootClasspath)
def javaExtDirs = propOrEmpty("java.ext.dirs")
- def javaUserClassPath = propOrElse("java.class.path", classPathEnv)
- def scalaExtDirs = propOrEmpty("scala.ext.dirs")
-
def scalaHome = propOrEmpty("scala.home")
+ def scalaExtDirs = propOrEmpty("scala.ext.dirs")
- /** I have distilled everyone's classpath hopes and dreams into the
- * question of how to resolve this boolean. Right at this moment if I
- * do anything but default to true right here, partest chokes. I'm
- * steadily reworking all the places partest gets its hands on the
- * classpath so eventually I'll be able to remedy that, at which point
- * my current plan is to have this default to false unless some
- * property or command line option is supplied. This is negotiable,
- * but at this point I can say with confidence that less magic and
- * less autodetection is more better.
- */
- def useJavaClassPath = true
- // hypothetically:
- // def useJavaClassPath = propIsSet("scala.classpath.guess")
+ /** The java classpath and whether to use it. */
+ def javaUserClassPath = propOrElse("java.class.path", "")
+ def useJavaClassPath = propOrFalse("scala.usejavacp")
override def toString = """
|object Environment {
@@ -95,6 +86,7 @@ object PathResolver {
def javaBootClassPath = Environment.javaBootClassPath
def javaUserClassPath = Environment.javaUserClassPath
def javaExtDirs = Environment.javaExtDirs
+ def useJavaClassPath = Environment.useJavaClassPath
def scalaHome = Environment.scalaHome
def scalaHomeDir = Directory(scalaHome)
@@ -186,13 +178,12 @@ class PathResolver(settings: Settings, context: JavaContext) {
case "sourcepath" => settings.sourcepath.value
}
- private def useJavaClassPath = !settings.javaignorecp.value && Environment.useJavaClassPath
-
/** Calculated values based on any given command line options, falling back on
* those in Defaults.
*/
object Calculated {
def scalaHome = Defaults.scalaHome
+ def useJavaClassPath = settings.usejavacp.value || Defaults.useJavaClassPath
def javaBootClassPath = cmdLineOrElse("javabootclasspath", Defaults.javaBootClassPath)
def javaExtDirs = cmdLineOrElse("javaextdirs", Defaults.javaExtDirs)
def javaUserClassPath = if (useJavaClassPath) Defaults.javaUserClassPath else ""
diff --git a/src/partest/scala/tools/partest/nest/CompileManager.scala b/src/partest/scala/tools/partest/nest/CompileManager.scala
index f6746a8e3c..b030d14622 100644
--- a/src/partest/scala/tools/partest/nest/CompileManager.scala
+++ b/src/partest/scala/tools/partest/nest/CompileManager.scala
@@ -40,6 +40,7 @@ class DirectCompiler(val fileManager: FileManager) extends SimpleCompiler {
def newSettings(out: Option[String]) = {
val settings = new TestSettings(fileManager)
+ settings.usejavacp.value = true
settings.deprecation.value = true
settings.nowarnings.value = false
settings.encoding.value = "ISO-8859-1" // XXX why?
diff --git a/src/partest/scala/tools/partest/nest/Worker.scala b/src/partest/scala/tools/partest/nest/Worker.scala
index 992ceba99f..213123f711 100644
--- a/src/partest/scala/tools/partest/nest/Worker.scala
+++ b/src/partest/scala/tools/partest/nest/Worker.scala
@@ -257,6 +257,7 @@ class Worker(val fileManager: FileManager) extends Actor {
"-classpath " + join(outDir.toString, CLASSPATH)
) ::: propertyOptions ::: List(
"scala.tools.nsc.MainGenericRunner",
+ "-usejavacp",
"Test",
"jvm"
)
diff --git a/test/files/run/programmatic-main.scala b/test/files/run/programmatic-main.scala
index c97e4a8f3f..7c5b016f52 100644
--- a/test/files/run/programmatic-main.scala
+++ b/test/files/run/programmatic-main.scala
@@ -4,8 +4,8 @@ import io.Path
object Test
{
val cwd = Option(System.getProperty("partest.cwd")) getOrElse "."
- val basedir = (Path(cwd).parent / "lib").path
- val baseargs = Array("-bootclasspath", basedir + "/scala-library.jar", "-cp", basedir + "/scala-compiler.jar")
+ val basedir = Path(cwd).parent / "lib" path
+ val baseargs = Array("-usejavacp", "-bootclasspath", basedir + "/scala-library.jar", "-cp", basedir + "/scala-compiler.jar")
def main(args: Array[String]): Unit = {
Main process (baseargs ++ Array("-Xshow-phases"))