Index: jasper/src/share/org/apache/jasper/CommandLineContext.java
===================================================================
RCS file: /home/cvspublic/jakarta-tomcat-4.0/jasper/src/share/org/apache/jasper/CommandLineContext.java,v
retrieving revision 1.6
diff -u -5 -r1.6 CommandLineContext.java
--- jasper/src/share/org/apache/jasper/CommandLineContext.java	2001/02/08 13:36:56	1.6
+++ jasper/src/share/org/apache/jasper/CommandLineContext.java	2001/03/18 03:06:49
@@ -128,10 +128,14 @@
 
         if (uriBase.charAt(uriBase.length() - 1) != '/') {
             uriBase += '/';
         }
 
+        servletPackageName = "jsp." + uriBase.substring(1).replace('/', '.');
+        int l = servletPackageName.length();
+        servletPackageName = servletPackageName.substring(0, l - 1);
+        
         if (tUriRoot == null) {
             uriRoot = new File("");
         } else {
             uriRoot = new File(tUriRoot);
             if (!uriRoot.exists() || !uriRoot.isDirectory()) {
Index: jasper/src/share/org/apache/jasper/JspC.java
===================================================================
RCS file: /home/cvspublic/jakarta-tomcat-4.0/jasper/src/share/org/apache/jasper/JspC.java,v
retrieving revision 1.8
diff -u -5 -r1.8 JspC.java
--- jasper/src/share/org/apache/jasper/JspC.java	2001/02/04 01:03:42	1.8
+++ jasper/src/share/org/apache/jasper/JspC.java	2001/03/18 03:06:50
@@ -407,10 +407,11 @@
                 mappingout.write("</servlet-name>\n\t</servlet-mapping>\n");
             }
             return true;
         } catch (JasperException je) {
             //je.printStackTrace(log);
             Constants.message("jspc.error.jasperException", 
                     new Object[] {file, je}, Logger.ERROR);
             if (dieLevel != NO_DIE_LEVEL) {
                 dieOnExit = true;
             }
@@ -485,10 +486,14 @@
             // set up the uri root if none is explicitly set
             String tUriBase = uriBase;
             if (tUriBase == null) {
                 tUriBase = "/";
             }
+            //make sure that the uriBase is an absolute path. 
+            if (! tUriBase.startsWith("/")) {
+                tUriBase = "/" + tUriBase;
+            }            
             try {
                 if (f.exists()) {
                     f = new File(f.getCanonicalPath());
                     while (f != null) {
                         File g = new File(f, "WEB-INF");
@@ -496,14 +501,15 @@
                             uriRoot = f.getCanonicalPath();
                             uriBase = tUriBase;
                             Constants.message("jspc.implicit.uriRoot",
                                               new Object[] { uriRoot },
                                               Logger.INFORMATION);
+                            urirootSet = true;                   
                             break;
                         }
                         if (f.exists() && f.isDirectory()) {
-                            tUriBase = "/" + f.getName() + "/" + tUriBase;
+                            tUriBase = "/" + f.getName() + tUriBase;
                         }
                         
                         String fParent = f.getParent();
                         if (fParent == null) {
                             f = new File(args[argPos]);
@@ -514,10 +520,13 @@
                             uriRoot = new File(fParent).getCanonicalPath();
                             uriBase = "/";
                             break;
                         } else {
                             f = new File(fParent);
                         }
 
                         // If there is no acceptible candidate, uriRoot will
                         // remain null to indicate to the CompilerContext to
                         // use the current working/user dir.
@@ -645,11 +654,11 @@
                     }
 
                     if (nextjsp.startsWith("." + File.separatorChar)) {
                         nextjsp = nextjsp.substring(2);
                     }
-
+                    nextjsp = nextjsp.replace(File.separatorChar, '/');
                     parseFile(log, nextjsp, servletout, mappingout);
                 }
                 uriRoot = oldRoot;
                 ubase = ubaseOld;
                 froot = frootOld;
Index: jasper/src/share/org/apache/jasper/compiler/ParserController.java
===================================================================
RCS file: /home/cvspublic/jakarta-tomcat-4.0/jasper/src/share/org/apache/jasper/compiler/ParserController.java,v
retrieving revision 1.11
diff -u -5 -r1.11 ParserController.java
--- jasper/src/share/org/apache/jasper/compiler/ParserController.java	2001/03/15 22:42:12	1.11
+++ jasper/src/share/org/apache/jasper/compiler/ParserController.java	2001/03/18 03:06:50
@@ -185,11 +185,11 @@
         //p("parse(" + inFileName + ")");
         String absFileName = resolveFileName(inFileName);
         File file = new File(absFileName);
 	String filePath = (ctxt == null) 
 	    ? file.getAbsolutePath()
-	    : ctxt.getRealPath(file.toString());
+	    : ctxt.getRealPath(file.toString().replace(File.separatorChar, '/'));
 	//p("filePath: " + filePath);
 
 	String encoding = topFileEncoding;
         InputStreamReader reader = null;
         try {
@@ -415,17 +415,16 @@
      * The 'root' file is always an 'absolute' path,
      * so no need to put an initial value in the
      * baseDirStack.
      */
     private String resolveFileName(String inFileName) {
-	File file = new File(inFileName);
-        boolean isAbsolute = file.getPath().startsWith(File.separator);
+        boolean isAbsolute = inFileName.startsWith("/");
 	String fileName = 
 	    isAbsolute ?
 	    inFileName : (String)baseDirStack.peek() + inFileName;
 	String baseDir = 
-	    inFileName.substring(0, file.getPath().lastIndexOf(File.separator) + 1);
+	    inFileName.substring(0, inFileName.lastIndexOf('/') + 1);
 	baseDirStack.push(baseDir);
 	return fileName;
     }
 
     private InputStreamReader getReader(File file, String encoding,
