src.shell.jython.bat Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of jython-standalone Show documentation
Show all versions of jython-standalone Show documentation
Jython is an implementation of the high-level, dynamic, object-oriented
language Python written in 100% Pure Java, and seamlessly integrated with
the Java platform. It thus allows you to run Python on any Java platform.
@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 ---------------------------------------------------------------------------
rem If running in Take Command (4NT), force to run in cmd.exe
if not "%@eval[2+2]" == "4" goto normalstart
cmd /C %0 %*
goto finish
:normalstart
set _PERCENT=%%
set _EXCLAMATION=!
setlocal enabledelayedexpansion
rem ----- Verify and set required environment variables -----------------------
rem make sure to clear the internal variables, to prevent leaking into subprocess calls
set _JAVA_CMD=java
if defined JAVA_HOME set _JAVA_CMD="%JAVA_HOME:"=%\bin\java"
set _JYTHON_OPTS=
if defined JYTHON_OPTS set _JYTHON_OPTS="%JYTHON_OPTS:"=%"
set _JYTHON_HOME=
if defined JYTHON_HOME set _JYTHON_HOME="%JYTHON_HOME:"=%"
if defined _JYTHON_HOME goto gotHome
rem try to dynamically determine jython home
rem (this script typically resides in jython home, or in the /bin subdirectory)
pushd "%~dp0%"
set _JYTHON_HOME="%CD%"
popd
if exist %_JYTHON_HOME%\jython-dev.jar goto gotHome
if exist %_JYTHON_HOME%\jython.jar goto gotHome
pushd "%~dp0%\.."
set _JYTHON_HOME="%CD%"
popd
if exist %_JYTHON_HOME%\jython-dev.jar goto gotHome
if exist %_JYTHON_HOME%\jython.jar goto gotHome
rem jython home fallback (if all else fails)
rem if present, %JYTHON_HOME_FALLBACK% is already quoted
set _JYTHON_HOME=%JYTHON_HOME_FALLBACK%
:gotHome
if not exist %_JYTHON_HOME%\jython-dev.jar goto tryComplete
rem prefer built version
set _CP=%_JYTHON_HOME%\jython-dev.jar
for %%j in (%_JYTHON_HOME%\javalib\*.jar) do (
set _CP=!_CP!;"%%j"
)
goto run
:tryComplete
set _CP=%_JYTHON_HOME%\jython.jar
if exist %_JYTHON_HOME%/jython.jar goto run
echo Cannot find jython-dev.jar or jython.jar in %_JYTHON_HOME%
echo Try running this batch file from the 'bin' directory of an installed Jython,
echo or setting JYTHON_HOME.
goto cleanup
rem ----- Execute the requested command ----------------------------------------
:run
set _JAVA_MEM=-Xmx512m
rem 1152k is the minimum for test_marshal to pass. Windows' default is
rem apparently 1M, anyway
set _JAVA_STACK=-Xss1152k
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=%*
if not defined _ARGS goto argsDone
set _ARGS=%_ARGS:_=_U%
set _ARGS=%_ARGS:'=_S%
set _ARGS=%_ARGS:"=_D%
rem also escape % signs
set _replaceVal=%_ARGS%
call :escape
set _ARGS=%_replaceVal%
set _ARGS="%_ARGS%"
set _JYTHON_ARGS=
:scanArgs
rem split args by spaces into first and rest
for /f "tokens=1,*" %%i in (%_ARGS%) do call :getArg "%%i" "%%j"
goto procArg
:getArg
rem remove quotes around first arg
set _CMP=%~1
set _ARGS=%2
goto :EOF
:procArg
if ["%_CMP%"] == [""] (
set _ARGS=
goto argsDone
)
REM NOTE: If you'd like to use a parameter with underscore in its name,
REM NOTE: use the quoted value: --do_stuff -> --do_Ustuff
if ["%_CMP%"] == ["--"] goto argsDone
if ["%_CMP%"] == ["--jdb"] (
if defined JAVA_HOME (
set _JAVA_CMD="%JAVA_HOME:"=%\bin\jdb"
) else (
set _JAVA_CMD=jdb
)
goto :nextArg
)
if ["%_CMP%"] == ["--boot"] (
set _BOOT_CP=-Xbootclasspath/a:%_CP%
goto :nextArg
)
if ["%_CMP%"] == ["--print"] (
set _PRINT=print
goto :nextArg
)
rem now unescape everything
set _replaceVal=%_CMP%
call :escape
set _CMP=%_replaceVal%
set _CMP=%_CMP:_D="%
set _CMP=%_CMP:_S='%
set _CMP=%_CMP:_U=_%
set _CMP1=%_CMP:~0,1%
set _CMP2=%_CMP:~0,2%
rem detect first character is a quote; skip directly to jythonArg
rem this avoids a batch syntax error
if "%_CMP1:"=\\%" == "\\" goto jythonArg
rem removing quote avoids a batch syntax error
if "%_CMP2:"=\\%" == "-J" goto jvmArg
:jythonArg
set _JYTHON_ARGS=%_JYTHON_ARGS% %_CMP%
goto nextArg
:jvmArg
set _VAL=%_CMP:~2%
if "%_VAL:~0,4%" == "-Xmx" (
set _JAVA_MEM=%_VAL%
) else if "%_VAL:~0,4%" == "-Xss" (
set _JAVA_STACK=%_VAL%
) else (
set _JAVA_OPTS=%_JAVA_OPTS% %_VAL%
)
:nextArg
set _CMP=
goto scanArgs
:argsDone
rem do not use 'if () else ()': this does not work with CLASSPATH containing '(x86)'
if defined _BOOT_CP goto fullCmd
if defined CLASSPATH goto classpathDefined
set CLASSPATH=%_CP:"=%
goto fullCmd
:classpathDefined
set CLASSPATH=%_CP:"=%;%CLASSPATH:"=%
:fullCmd
set _FULL_CMD=%_JAVA_CMD% %_JAVA_OPTS% %_JAVA_MEM% %_JAVA_STACK% -Dpython.home=%_JYTHON_HOME% -Dpython.executable="%~f0" %_BOOT_CP% -classpath "%CLASSPATH%" org.python.util.jython %_JYTHON_OPTS% %_JYTHON_ARGS% %_ARGS%
if defined _PRINT (
echo %_FULL_CMD%
) else (
%_FULL_CMD%
)
set E=%ERRORLEVEL%
:cleanup
set _ARGS=
set _CMP=
set _CMP1=
set _CMP2=
set _CP=
set _BOOT_CP=
set _FULL_CMD=
set _JAVA_CMD=
set _JAVA_OPTS=
set _JAVA_MEM=
set _JAVA_STACK=
set _JYTHON_HOME=
set _JYTHON_OPTS=
set _JYTHON_ARGS=
set _PRINT=
goto finish
REM escapes or unescapes % with @@P@@, and ! with @@E@@
REM input: a text variable named _replaceVal
REM result: _replaceVal has the new value
:escape
if not defined _replaceVal goto :EOF
set /a _index=-1
set _replaced=
:escapeNext
set /a _index=%_index% + 1
call set _escapeChar=%%_replaceVal:~%_index%,1%%
if ^"==^%_escapeChar% goto noEscape
if ''=='%_escapeChar%' goto escapeEnd
if "%_escapeChar%"==" " goto noEscape
if "%_escapeChar%"=="@" goto unescapeCheck
if "%_escapeChar%"=="%_EXCLAMATION%" goto escapeExclamation
if "%_escapeChar%"=="%_PERCENT%" goto escapePercent
:noEscape
set _replaced=%_replaced%%_escapeChar%
goto escapeNext
:escapeExclamation
set _replaced=%_replaced%@@E@@
goto escapeNext
:escapePercent
set _replaced=%_replaced%@@P@@
goto escapeNext
:unescapeCheck
set _isExclamation=
set _isPercent=
set _isUnrecognized=true
set /a _aheadIndex=%_index% + 1
call set _aheadChar=%%_replaceVal:~%_aheadIndex%,1%%
if ^"==^%_aheadChar% goto noEscape
if "%_aheadChar%"=="@" set /a _aheadIndex=%_aheadIndex% + 1
call set _aheadChar=%%_replaceVal:~%_aheadIndex%,1%%
if ^"==^%_aheadChar% goto noEscape
if "%_aheadChar%"=="E" set _isExclamation=true & set _isUnrecognized=
if "%_aheadChar%"=="P" set _isPercent=true & set _isUnrecognized=
if defined _isUnrecognized goto noEscape
set _isUnrecognized=true
set /a _aheadIndex=%_aheadIndex% + 1
call set _aheadChar=%%_replaceVal:~%_aheadIndex%,1%%
if ^"==^%_aheadChar% goto noEscape
if "%_aheadChar%"=="@" set /a _aheadIndex=%_aheadIndex% + 1
call set _aheadChar=%%_replaceVal:~%_aheadIndex%,1%%
if ^"==^%_aheadChar% goto noEscape
if "%_aheadChar%"=="@" set _isUnrecognized=
if defined _isUnrecognized goto noEscape
if defined _isExclamation goto unescapeExclamation
if defined _isPercent goto unescapePercent
goto noEscape
:unescapeExclamation
set _replaced=%_replaced%%_EXCLAMATION%
set /a _index=%_index% + 4
goto escapeNext
:unescapePercent
set _replaced=%_replaced%%_PERCENT%
set /a _index=%_index% + 4
goto escapeNext
:escapeEnd
set _replaceVal=%_replaced%
goto :EOF
:finish
set _UNQUOTED_COMSPEC=%COMSPEC:"=%
"%_UNQUOTED_COMSPEC%" /c exit /b %E%