| @REM Licensed to the Apache Software Foundation (ASF) under one or more |
| @REM contributor license agreements. See the NOTICE file distributed with |
| @REM this work for additional information regarding copyright ownership. |
| @REM The ASF licenses this file to You under the Apache License, Version 2.0 |
| @REM (the "License"); you may not use this file except in compliance with |
| @REM the License. You may obtain a copy of the License at |
| @REM |
| @REM http://www.apache.org/licenses/LICENSE-2.0 |
| @REM |
| @REM Unless required by applicable law or agreed to in writing, software |
| @REM distributed under the License is distributed on an "AS IS" BASIS, |
| @REM WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| @REM See the License for the specific language governing permissions and |
| @REM limitations under the License. |
| |
| @REM daffodil-debugger launcher script |
| @REM |
| @REM Environment: |
| @REM JAVA_HOME - location of a JDK home dir (optional if java on path) |
| @REM CFG_OPTS - JVM options (optional) |
| @REM Configuration: |
| @REM DAFFODIL_DEBUGGER_config.txt found in the DAFFODIL_DEBUGGER_HOME. |
| @setlocal enabledelayedexpansion |
| @setlocal enableextensions |
| |
| @echo off |
| |
| |
| if "%DAFFODIL_DEBUGGER_HOME%"=="" ( |
| set "APP_HOME=%~dp0\\.." |
| |
| rem Also set the old env name for backwards compatibility |
| set "DAFFODIL_DEBUGGER_HOME=%~dp0\\.." |
| ) else ( |
| set "APP_HOME=%DAFFODIL_DEBUGGER_HOME%" |
| ) |
| |
| set "APP_LIB_DIR=%APP_HOME%\lib\" |
| |
| rem Detect if we were double clicked, although theoretically A user could |
| rem manually run cmd /c |
| for %%x in (!cmdcmdline!) do if %%~x==/c set DOUBLECLICKED=1 |
| |
| rem FIRST we load the config file of extra options. |
| set "CFG_FILE=%APP_HOME%\DAFFODIL_DEBUGGER_config.txt" |
| set CFG_OPTS= |
| call :parse_config "%CFG_FILE%" CFG_OPTS |
| |
| rem We use the value of the JAVA_OPTS environment variable if defined, rather than the config. |
| set _JAVA_OPTS=%JAVA_OPTS% |
| if "!_JAVA_OPTS!"=="" set _JAVA_OPTS=!CFG_OPTS! |
| |
| rem We keep in _JAVA_PARAMS all -J-prefixed and -D-prefixed arguments |
| rem "-J" is stripped, "-D" is left as is, and everything is appended to JAVA_OPTS |
| set _JAVA_PARAMS= |
| set _APP_ARGS= |
| |
| @@APP_DEFINES@@ |
| |
| rem Bundled JRE has priority over standard environment variables |
| if defined BUNDLED_JVM ( |
| set "_JAVACMD=%BUNDLED_JVM%\bin\java.exe" |
| ) else ( |
| if "%JAVACMD%" neq "" ( |
| set "_JAVACMD=%JAVACMD%" |
| ) else ( |
| if "%JAVA_HOME%" neq "" ( |
| if exist "%JAVA_HOME%\bin\java.exe" set "_JAVACMD=%JAVA_HOME%\bin\java.exe" |
| ) |
| ) |
| ) |
| |
| if "%_JAVACMD%"=="" set _JAVACMD=java |
| |
| rem Detect if this java is ok to use. |
| for /F %%j in ('"%_JAVACMD%" -version 2^>^&1') do ( |
| if %%~j==java set JAVAINSTALLED=1 |
| if %%~j==openjdk set JAVAINSTALLED=1 |
| ) |
| |
| rem BAT has no logical or, so we do it OLD SCHOOL! Oppan Redmond Style |
| set JAVAOK=true |
| if not defined JAVAINSTALLED set JAVAOK=false |
| |
| if "%JAVAOK%"=="false" ( |
| echo. |
| echo A Java JDK is not installed or can't be found. |
| if not "%JAVA_HOME%"=="" ( |
| echo JAVA_HOME = "%JAVA_HOME%" |
| ) |
| echo. |
| echo Please go to |
| echo http://www.oracle.com/technetwork/java/javase/downloads/index.html |
| echo and download a valid Java JDK and install before running daffodil-debugger. |
| echo. |
| echo If you think this message is in error, please check |
| echo your environment variables to see if "java.exe" and "javac.exe" are |
| echo available via JAVA_HOME or PATH. |
| echo. |
| if defined DOUBLECLICKED pause |
| exit /B 1 |
| ) |
| |
| rem if configuration files exist, prepend their contents to the script arguments so it can be processed by this runner |
| call :parse_config "%SCRIPT_CONF_FILE%" SCRIPT_CONF_ARGS |
| |
| call :process_args %SCRIPT_CONF_ARGS% %%* |
| |
| set _JAVA_OPTS=!_JAVA_OPTS! !_JAVA_PARAMS! |
| |
| if defined CUSTOM_MAIN_CLASS ( |
| set MAIN_CLASS=!CUSTOM_MAIN_CLASS! |
| ) else ( |
| set MAIN_CLASS=!APP_MAIN_CLASS! |
| ) |
| |
| set NEW_CLASSPATH=%APP_CLASSPATH% |
| |
| rem ensure daffodil path provided |
| if not defined DAFFODIL_PATH ( |
| echo "No Daffodil path provided using the --daffodilPath flag. Exiting as debugger can't run without the Daffodil path" |
| exit 1 |
| ) |
| |
| set NEW_CLASSPATH=%NEW_CLASSPATH%;!DAFFODIL_PATH!\lib\* |
| |
| if defined DAFFODIL_DEBUG_CLASSPATH ( |
| set NEW_CLASSPATH="%NEW_CLASSPATH%;%DAFFODIL_DEBUG_CLASSPATH%" |
| ) |
| |
| rem Call the application and pass all arguments unchanged. |
| "%_JAVACMD%" !_JAVA_OPTS! !DAFFODIL_DEBUGGER_OPTS! -cp "%NEW_CLASSPATH%" %MAIN_CLASS% !_APP_ARGS! |
| |
| @endlocal |
| |
| exit /B %ERRORLEVEL% |
| |
| |
| rem Loads a configuration file full of default command line options for this script. |
| rem First argument is the path to the config file. |
| rem Second argument is the name of the environment variable to write to. |
| :parse_config |
| set _PARSE_FILE=%~1 |
| set _PARSE_OUT= |
| if exist "%_PARSE_FILE%" ( |
| FOR /F "tokens=* eol=# usebackq delims=" %%i IN ("%_PARSE_FILE%") DO ( |
| set _PARSE_OUT=!_PARSE_OUT! %%i |
| ) |
| ) |
| set %2=!_PARSE_OUT! |
| exit /B 0 |
| |
| |
| :add_java |
| set _JAVA_PARAMS=!_JAVA_PARAMS! %* |
| exit /B 0 |
| |
| |
| :add_app |
| set _APP_ARGS=!_APP_ARGS! %* |
| exit /B 0 |
| |
| |
| rem Processes incoming arguments and places them in appropriate global variables |
| :process_args |
| :param_loop |
| call set _PARAM1=%%1 |
| set "_TEST_PARAM=%~1" |
| |
| if ["!_PARAM1!"]==[""] goto param_afterloop |
| |
| |
| rem ignore arguments that do not start with '-' |
| if "%_TEST_PARAM:~0,1%"=="-" goto param_java_check |
| set _APP_ARGS=!_APP_ARGS! !_PARAM1! |
| shift |
| goto param_loop |
| |
| :param_java_check |
| if "!_TEST_PARAM:~0,2!"=="-J" ( |
| rem strip -J prefix |
| set _JAVA_PARAMS=!_JAVA_PARAMS! !_TEST_PARAM:~2! |
| shift |
| goto param_loop |
| ) |
| |
| if "!_TEST_PARAM:~0,2!"=="-D" ( |
| rem test if this was double-quoted property "-Dprop=42" |
| for /F "delims== tokens=1,*" %%G in ("!_TEST_PARAM!") DO ( |
| if not ["%%H"] == [""] ( |
| set _JAVA_PARAMS=!_JAVA_PARAMS! !_PARAM1! |
| ) else if [%2] neq [] ( |
| rem it was a normal property: -Dprop=42 or -Drop="42" |
| call set _PARAM1=%%1=%%2 |
| set _JAVA_PARAMS=!_JAVA_PARAMS! !_PARAM1! |
| shift |
| ) |
| ) |
| ) else ( |
| if "!_TEST_PARAM!"=="-main" ( |
| call set CUSTOM_MAIN_CLASS=%%2 |
| shift |
| ) else ( |
| if "!_TEST_PARAM!"=="--daffodilPath" ( |
| call set DAFFODIL_PATH=%%2 |
| shift |
| ) else ( |
| set _APP_ARGS=!_APP_ARGS! !_PARAM1! |
| ) |
| ) |
| ) |
| shift |
| goto param_loop |
| :param_afterloop |
| |
| exit /B 0 |