Issue1125
Created on 2008-09-10.16:04:29 by foripperz, last changed 2008-11-05.15:39:42 by otmarhumbel.
| Files | ||||
|---|---|---|---|---|
| File name | Uploaded | Description | Edit | Remove | 
| jython.bat | foripperz, 2008-09-10.16:04:28 | patched file | ||
| test_empty.bat | otmarhumbel, 2008-10-14.12:39:36 | method to safely test a string for emptiness | ||
| jython.bat.log | otmarhumbel, 2008-10-15.08:21:18 | output of the new .bat file | ||
| Messages | |||
|---|---|---|---|
| msg3497 (view) | Author: foripperz (foripperz) | Date: 2008-09-10.16:04:27 | |
| in jython 2.5a2, "jython.bat" have this line(like this..), set JAVA_HOME="C:\Program Files\Java\jdk1.6.0_10" but, it is not valid, because window shell cannot read "space" in <".."> so, edit it... set JAVA_HOME=C:\Program Files\Java\jdk1.6.0_10 (delete '"') | |||
| msg3511 (view) | Author: Frank Wierzbicki (fwierzbicki) | Date: 2008-09-13.17:32:01 | |
| This looks to me like it is the reverse of a fix by Oti -- I've assigned this to him since I think he understands better than I do. | |||
| msg3602 (view) | Author: Oti Humbel (otmarhumbel) | Date: 2008-09-15.21:43:28 | |
| foripperz: as of alpha3, we fixed the jython.bat file so that it can handle a JAVA_HOME like described in msg3497. Please give alpha3 a try, and report the error in case there still is one. Thanks! | |||
| msg3621 (view) | Author: Mr. Tines (mr_tines) | Date: 2008-09-24.17:17:51 | |
| I've tripped over something like this in 2.5a3 as well -- my workround is to add quotes into the jython.bat text like if not "[%JAVA_HOME%]" == "[]" ( in both lines 20 and 87; otherwise you get "Files\Java\jdk1.6.0] was unexpected at this time." | |||
| msg3622 (view) | Author: Oti Humbel (otmarhumbel) | Date: 2008-09-25.11:35:49 | |
| Mr. Tines, thanks for reporting! To be able to understand what's going on, could you please change line 1 and line 8 of the jython.bat from @echo off to rem @echo off , reproduce the error, and post the console output here? Thanks a lot! Oti. | |||
| msg3624 (view) | Author: Mr. Tines (mr_tines) | Date: 2008-09-26.17:57:11 | |
| Pretty simple, really -- the space in the "if" statement is taken as a
token delimiter because it is not enquoted.
>c:\jython2.5a3\bin\jython.bat
>rem @echo off
>rem
---------------------------------------------------------------------------
>rem jython.bat - start script for Jython (adapted from jruby.bat)
>rem
>rem Environment variables (optional)
>rem
>rem   JAVA_HOME      Java installation directory
>rem
>rem   JYTHON_HOME    Jython installation directory
>rem
>rem   JYTHON_OPTS    Default Jython command line arguments
>rem
>rem
---------------------------------------------------------------------------
>setlocal enabledelayedexpansion
>rem ----- Verify and set required environment variables
-----------------------
>set _JAVA_CMD=java
Files\Java\jdk1.6.0] was unexpected at this time.
>if not [C:\Program Files\Java\jdk1.6.0] == [] (
>
If you enquote line 20 only, then jython.bat --help goes on to do the
same at line 87
>if not [C:\Program Files\Java\jdk1.6.0] == [] (
>c:\jython2.5a3\bin\jython.bat --help
>rem @echo off
>rem
---------------------------------------------------------------------------
>rem jython.bat - start script for Jython (adapted from jruby.bat)
>rem
>rem Environment variables (optional)
>rem
>rem   JAVA_HOME      Java installation directory
>rem
>rem   JYTHON_HOME    Jython installation directory
>rem
>rem   JYTHON_OPTS    Default Jython command line arguments
>rem
>rem
---------------------------------------------------------------------------
>setlocal enabledelayedexpansion
>rem ----- Verify and set required environment variables
-----------------------
>set _JAVA_CMD=java
>if not "[C:\Program Files\Java\jdk1.6.0]" == "[]
" (set _JAVA_CMD="C:\Program Files\Java\jdk1.6.0\bin\java" )
>set _JYTHON_HOME=
>if not "[]" == "[]" goto gotHome
>pushd "c:\jython2.5a3\bin\\.."
C:\jython2.5a3>set _JYTHON_HOME="C:\jython2.5a3"
C:\jython2.5a3>popd
>if not exist "C:\jython2.5a3"\jython.jar goto tryComplete
>set _CP="C:\jython2.5a3"\jython-complete.jar
>if exist "C:\jython2.5a3"/jython-complete.jar goto run
>set _JAVA_STACK=-Xss512k
>rem Escape any quotes. Use _S for ', _D for ", and _U to escape _ itself.
>rem We have to escape _ itself, otherwise file names with _S and _D
>rem will be converted to to wrong ones, when we un-escape. See JRUBY-2821.
>set _ARGS=--help
>if not defined _ARGS goto argsDone
>set _ARGS=--help
>set _ARGS=--help
>set _ARGS=--help
>set _ARGS="--help"
>rem split args by spaces into first and rest
>for /F "tokens=1,*" %i in ("--help") do call :getArg "%i" "%j"
>call :getArg "--help" ""
>rem remove quotes around first arg
>for %i in ("--help") do set _CMP=%~i
>set _CMP=--help
>set _ARGS=""
>goto :EOF
>goto procArg
>if ["--help"] == [""] (
set _ARGS=
 goto argsDone
)
>REM NOTE: If you'd like to use a parameter withunderscore in its name,
>REM NOTE: use the quoted value: --do_stuff -> --do_Ustuff
>if ["--help"] == ["--"] goto argsDone
Files\Java\jdk1.6.0] was unexpected at this time.
>   if [C:\Program Files\Java\jdk1.6.0] == [] ( | |||
| msg3639 (view) | Author: Oti Humbel (otmarhumbel) | Date: 2008-10-03.07:56:59 | |
| Many thanks! I'll check this again as soon as I can get hands on a windows machine. | |||
| msg3672 (view) | Author: Oti Humbel (otmarhumbel) | Date: 2008-10-13.16:37:12 | |
| Finally I begin to understand the cause of the problem. The cmd shell transscript below (Windows Vista, 32bit) shows that jython.bat breaks if the environment variable JAVA_HOME is not quoted, and works if JAVA_HOME is quoted: C:\stuff\jython\jython-2.5a3\bin>set JAVA_HOME JAVA_HOME=C:\Program Files\Java\jre1.6.0_07 C:\stuff\jython\jython-2.5a3\bin>jython.bat "Files\Java\jre1.6.0_07]" kann syntaktisch an dieser Stelle nicht verarbeitet werden. C:\stuff\jython\jython-2.5a3\bin>set JAVA_HOME="C:\Program Files\Java\jre1.6.0_07" C:\stuff\jython\jython-2.5a3\bin>set JAVA_HOME JAVA_HOME="C:\Program Files\Java\jre1.6.0_07" C:\stuff\jython\jython-2.5a3\bin>jython.bat Jython 2.5a3 (trunk:5315:5317, Sep 10 2008, 20:54:23) [Java HotSpot(TM) Client VM (Sun Microsystems Inc.)] on java1.6.0_07 Type "help", "copyright", "credits" or "license" for more information. >>> Since we cannot make assumptions how a user will define JAVA_HOME, I have to find a way for empty-test JAVA_HOME both in the quoted and unquoted case. | |||
| msg3682 (view) | Author: Oti Humbel (otmarhumbel) | Date: 2008-10-14.12:31:05 | |
| To illustrate the problem: C:\stuff\temp>set TEST=my test C:\stuff\temp>echo %TEST% my test C:\stuff\temp>if not [%TEST%]==[] echo [%TEST%] is set "test]==[]" is syntactically not valid here C:\stuff\temp>if not "%TEST%"=="" echo [%TEST%] is set [my test] is set C:\stuff\temp>if not '%TEST%'=='' echo [%TEST%] is set "test'==''" is syntactically not valid here C:\stuff\temp>set TEST="my test" C:\stuff\temp>echo %TEST% "my test" C:\stuff\temp>if not [%TEST%]==[] echo [%TEST%] is set ["my test"] is set C:\stuff\temp>if not "%TEST%"=="" echo [%TEST%] is set "test""==""" is syntactically not valid here C:\stuff\temp>if not '%TEST%'=='' echo [%TEST%] is set ["my test"] is set The error message is my translation from the German: kann syntaktisch an dieser Stelle nicht verarbeitet werden Summary: There is no common syntax for testing the emptiness of a string (containing spaces, quoted or unquoted). | |||
| msg3683 (view) | Author: Oti Humbel (otmarhumbel) | Date: 2008-10-14.12:39:36 | |
| The attached test_empty.bat allows quoted and unquoted strings to be
tested for emptiness.
The output is as follows:
  C:\stuff\temp>test_empty.bat
  ["my home 1"] was set: 1
  command: ["my home 1\bin\java"]
  [my home 2] was set: 1
  command: ["my home 2\bin\java"]
  [""] was set: 0
  command: [java]
  [] was set: 0
  command: [java]
  [] was set: 0
  command: [java]
  ["myhome6"] was set: 1
  command: ["myhome6\bin\java"]
  [myhome7] was set: 1
  command: ["myhome7\bin\java"]
  Legend: 1 = the variable is set,
          0 = it is not set
The key line is the for loop:
  for /f "useback tokens=*" %%a in ('%_TRIMMED_VAR%') do set
_TRIMMED_VAR=%%~a
, which should be applicable to jython.bat as well. | |||
| msg3686 (view) | Author: Oti Humbel (otmarhumbel) | Date: 2008-10-15.08:21:18 | |
| http://jython.svn.sourceforge.net/jython/?rev=5397&view=rev should fix this The attached jython.bat.log shows the relevant lines of jython.bat for different settings of JAVA_HOME (with echo on, and some lines cut for better readability) | |||
| msg3687 (view) | Author: Oti Humbel (otmarhumbel) | Date: 2008-10-15.09:00:14 | |
| There is still a follow-up issue in the boot classpath calculation. 
If JYTHON_HOME is set unquoted to a directory containing a space, such as 
  JYTHON_HOME=C:\stuff\jython\bat test
, the java command looks like:
"C:\Program Files\Java\jre1.6.0_07\bin\java"  -Xss512k
-Xbootclasspath/a:C:\stuff\jython\bat
test\jython.jar;"C:\stuff\jython\bat" -Dpython.home=C:\stuff\jython\bat
test -Dpython.executable="C:\stuff\jython\bat test\bin\jython.bat"
-classpath ".;C:\Program Files\Java\jre1.6.0_07\lib\ext\QTJava.zip"
org.python.util.jython
which inevitably leads to:
Exception in thread "main" java.lang.NoClassDefFoundError:
test\jython/jar;C:\stuff\jython\bat
Caused by: java.lang.ClassNotFoundException:
test\jython.jar;C:\stuff\jython\bat
        at java.net.URLClassLoader$1.run(Unknown Source)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        at java.lang.ClassLoader.loadClassInternal(Unknown Source) | |||
| msg3754 (view) | Author: Oti Humbel (otmarhumbel) | Date: 2008-11-05.07:33:10 | |
| http://jython.svn.sourceforge.net/viewvc/jython?view=rev&revision=5544 is the groundwork for autotesting these problems | |||
| msg3755 (view) | Author: Oti Humbel (otmarhumbel) | Date: 2008-11-05.15:39:41 | |
| http://jython.svn.sourceforge.net/viewvc/jython?view=rev&revision=5545 and http://jython.svn.sourceforge.net/viewvc/jython?view=rev&revision=5546 finally fix this issue. The main part of the fix already is on beta 0, the last one (mentioned in http://bugs.jython.org/msg3687) will be on the next beta. | |||
| History | |||
|---|---|---|---|
| Date | User | Action | Args | 
| 2008-11-05 15:39:42 | otmarhumbel | set | status: open -> closed resolution: fixed messages: + msg3755 | 
| 2008-11-05 07:33:11 | otmarhumbel | set | messages: + msg3754 | 
| 2008-10-15 09:00:15 | otmarhumbel | set | messages: + msg3687 | 
| 2008-10-15 08:21:19 | otmarhumbel | set | files:
  + jython.bat.log messages: + msg3686 | 
| 2008-10-14 12:39:36 | otmarhumbel | set | files:
  + test_empty.bat messages: + msg3683 | 
| 2008-10-14 12:31:05 | otmarhumbel | set | messages: + msg3682 | 
| 2008-10-13 16:37:12 | otmarhumbel | set | messages: + msg3672 | 
| 2008-10-03 07:56:59 | otmarhumbel | set | messages: + msg3639 | 
| 2008-09-26 17:57:12 | mr_tines | set | messages: + msg3624 | 
| 2008-09-25 11:35:49 | otmarhumbel | set | messages: + msg3622 | 
| 2008-09-24 17:17:52 | mr_tines | set | nosy:
  + mr_tines messages: + msg3621 | 
| 2008-09-15 21:43:28 | otmarhumbel | set | messages: + msg3602 | 
| 2008-09-13 17:32:01 | fwierzbicki | set | assignee: otmarhumbel messages: + msg3511 nosy: + fwierzbicki, otmarhumbel | 
| 2008-09-10 16:04:57 | foripperz | set | title: [bug]not valid JAVA_HOME path -> not valid JAVA_HOME path | 
| 2008-09-10 16:04:29 | foripperz | create | |
              Supported by Python Software Foundation,
              
              Powered by Roundup
            
 
            