root/main/trunk/greenstone2/gs2-server.bat @ 22078

Revision 21966, 7.8 KB (checked in by ak19, 10 years ago)

Made changes to GLI and gs2-server.bat to allow GLI to deal with spaces in filepath (previously still a problem on Windows when GLI needed to launch gs2-server.bat). The issue was with the windows/batch start command: 1. the way it was launched in GLI and 2. the way windows deals with spaces in the PARAMETERS to the script launched with batch's start cmd. The corresponding changes that needed to be made to deal with these two aspects of the issue are in: gli's greenstone/LocalLibraryServer.java and gs2-server.bat.

Line 
1@echo off
2SETLOCAL
3
4if "%serverlang%" == "" set serverlang=en
5set java_min_version=1.5.0_00
6set PROGNAME=gs2-server
7if "%PROGABBR%" == "" set PROGABBR=GSI
8pushd "%CD%"
9CD /D "%~dp0"
10
11echo Greenstone 2 Server
12echo Copyright (C) 2009, New Zealand Digital Library Project, University Of Waikato
13echo This software comes with ABSOLUTELY NO WARRANTY; for details see LICENSE.txt
14echo This is free software, and you are welcome to redistribute it
15
16::  -------- Run the Greenstone 2 Server --------
17
18::  ---- Determine GSDLHOME ----
19set gsdl2path=
20
21:: Some users may set the above line manually
22if "%gsdl2path%" == "" (
23   set GSDLHOME=%CD%
24   set gsdl2path=%CD%
25)
26echo GS2 Home: %GSDLHOME%
27
28:: Setup Greenstone2, unless it has already been done
29:: If either GSDLHOME or GSDLOS is not set, need to run setup.bat first
30:: OR operations in an IF stmt: http://fixunix.com/ms-dos/21057-how-implement-if-condition-batch-file.html
31for %%i in ("%GSDLOS%" "%GSDLHOME%") do if %%i == "" set OR=True
32if "%OR%" == "True" (
33   pushd "%gsdl2path%"
34   call setup.bat
35rem   echo **** GSDLOS: %GSDLOS% and GSDLHOME: %GSDLHOME%
36   popd
37)
38
39
40:: First test that there is actually something that can be run...
41:: Exit if the apache-httpd folder doesn't exist for some reason
42:: (The errors reported when the apache webserver does not exist
43:: in the correct location are not at all helpful).
44
45:: "You cannot use the if command to test directly for a directory, but
46:: the null (NUL) device does exist in every directory. As a result, you
47:: can test for the null device to determine whether a directory exists."
48rem echo "%GSDLHOME%\apache-httpd\nul"
49if not exist "%GSDLHOME%\apache-httpd\*" (
50    echo.
51    echo UNABLE TO CONTINUE: There is no apache-httpd directory.
52    echo It does not look like the local apache webserver has been installed.
53    echo Exiting...
54    echo.
55    goto exit
56)
57:: exit 1
58
59
60:: If there's no llssite.cfg file, copy from the template
61if exist "%GSDLHOME%\llssite.cfg" goto cfgfile
62if exist "%GSDLHOME%\llssite.cfg.in" (
63   copy "%GSDLHOME%\llssite.cfg.in" "%GSDLHOME%\llssite.cfg"
64) else (
65   echo Warning: could not find llssite.cfg.in to create llssite.cfg from.
66)
67
68:cfgfile
69::  ---- Determine GSDLHOME ----
70:: JRE_HOME or JAVA_HOME must be set correctly to run this program
71bin\windows\search4j -m %java_min_version% > nul
72echo.
73:: In Java code, '...getResourceAsStream("build.properties")'
74:: needs up to be in the right directory when run
75if %ERRORLEVEL% equ 0 pushd %GSDL2PATH%
76
77:: http://ss64.com/nt/call.html (and leave in trailing slash)
78call :isinpath "%GSDLHOME%\lib\java"
79
80:: After the call, we come back here
81goto chkjava
82
83:isinpath
84:: http://ss64.com/nt/syntax-replace.html and http://ss64.com/nt/syntax-args.html
85:: (Does not work: section "Finding items within the PATH environment variable")
86:: Instead, we expand the filepath of parameter 1 to its full path and
87:: try to subtract it from the classpath.
88::call set test_cpath=%%CLASSPATH:%~f1=%%
89call set test_cpath=%%CLASSPATH:%1=%%
90
91:: If there IS a difference in the classpath before and after,
92:: then the filepath was already on the classpath
93if not "%CLASSPATH%" == "%test_cpath%" (
94   echo   - CLASSPATH already correct
95   echo %CLASSPATH%
96   goto :eof
97)
98
99:: If there was NO difference in the classpath before and after,
100:: then the filepath needs to be added to the classpath
101set CLASSPATH=%GSDLHOME%\lib\java;%CLASSPATH%
102
103:: http://ss64.com/nt/for_r.html and (for call) http://ss64.com/nt/for.html
104:: http://ss64.com/nt/syntax-args.html
105FOR /R "%GSDLHOME%\lib\java" %%G IN (*.jar) DO call :putinpath "%%G"
106echo   - Adjusted CLASSPATH
107echo.
108::echo CLASSPATH:& echo %CLASSPATH%
109goto :eof
110
111
112:putinpath
113set jarfile=%1
114::strip quotes around jarfile path, since we can't update classpath with quotes
115set jarfile=%jarfile:"=%
116echo jarfile: %jarfile%
117set CLASSPATH=%CLASSPATH%;%jarfile%
118goto :eof
119
120:: ---- Check Java ----
121:chkjava
122:: call the script with source, so that we have the variables JAVA_EXECUTABLE and GS_JAVA_HOME it sets
123set exit_status=0
124:: Need to find Java. If found, JAVA_EXECUTABLE will be set
125:: call findjava.bat %serverlang% %PROGNAME%
126if "%GSDL3SRCHOME%" == "" (set _VERSION=2) else (set _VERSION=3)
127call "%GSDLHOME%\findjava.bat"
128if "%JAVA_EXECUTABLE%" == "" echo **** No Java executable found& goto exit
129set PATH=%GS_JAVA_HOME%\bin;%PATH%
130
131
132:: ---- Run the Greenstone Server Interface ----
133:: Some informative messages to direct the users to the logs
134if "%serverlang%" == "en" (
135   echo ***************************************************************
136   echo Starting the Greenstone Server Interface ^(GSI^)...
137   echo.
138   echo Server log messages go to:
139   echo    "%GSDLHOME%\etc\logs-gsi\server.log"
140   echo.
141   echo Using Apache web server located at:
142   echo    "%GSDLHOME%\apache-httpd\%GSDLOS%\bin\httpd"
143   echo The Apache error log is at:
144   echo    "%GSDLHOME%\apache-httpd\%GSDLOS%\logs\error_log"
145   echo The Apache configuration file template is at:
146   echo    "%GSDLHOME%\apache-httpd\%GSDLOS%\conf\httpd.conf.in"
147   echo This is used to generate:
148   echo    "%GSDLHOME%\apache-httpd\%GSDLOS%\conf\httpd.conf"
149   echo    each time Enter Library is pressed or otherwise activated.
150   echo ***************************************************************
151   echo.
152)
153echo.
154
155:: GLI launches gs2-server.bat with:
156:: cmd /c start "window" "c:\path to\gs2-server.bat" --config=c:\path to\glisite.cfg [--quit=portnum]
157:: The configfile param could contain spaces, in which case its space-separated parts spread over
158:: multiple parameters . Need to handle things the following way, since using quotes to embed the
159:: parameters breaks the start command, see http://ss64.com/nt/start.html
160:: This script is launched by the start cmd as:
161:: "c:\path to\gs2-server.bat" --config=c:\path to\config.cfg [--quit=portnum].
162:: But if the parameter  following --config=<some string> doesn't start with a double hyphen, we
163:: assume it to be part of the config parameter, as the configfile path may have contained spaces.
164
165:: Store all parameters together in config file var: we may or may not have a portnumber
166:: Get everything after the "--quit=", if anything, and store it in port var.  If no port, nothing to do.
167set conf=%*
168set port=%conf:*--quitport=%
169if "%conf%" == "%port%" (
170set port=
171goto :runit
172) else (
173set port=%port:~1%
174)
175
176:: Because we got here, need to adjust conf by removing " --quitport=" from it and prefixing this to port
177call set conf=%%conf:%port%=%%
178set conf=%conf:~0,-12%
179set port=--quitport=%port%
180
181:: Remove trailing spaces from conf and port
182:: (We'll put the all-important quotes around conf and port when the actual java cmd is launched)
183set tmp=%conf%
184call :trim %tmp%
185set conf=%tmp%
186set tmp=%port%
187call :trim %port%
188set port=%tmp%
189set tmp=
190
191goto :runit
192
193::  http://www.computing.net/answers/programming/dos-batch-remove-trailing-space/9270.html
194:trim
195set tmp=%*
196goto :eof
197
198:runit
199::echo port: %port%& echo conf: %conf%& echo.& echo.
200:: "%JAVA_EXECUTABLE%" org.greenstone.server.Server2 "%GSDLHOME%" "%serverlang%" %*
201"%JAVA_EXECUTABLE%" org.greenstone.server.Server2 "%GSDLHOME%" "%serverlang%" "%conf%" "%port%"
202
203
204:: The 1st argument to gs2-server.bat (if any) would be --config, the 2nd is the config filename.
205:: Both are stored in %conf% now. If the config file is glisite.cfg, then this script was launched through
206:: GLI and would have opened a DOS console. Need to exit from this script then to close the console.
207:: Remove --config= prefix and do a case insensitive comparison, since filepaths can have uppercase chars
208if /i "%conf:~9%" == "%GSDLHOME%\glisite.cfg" goto quitcmd
209goto exit
210
211:: Exit the batch script (close the console)
212:quitcmd
213popd
214ENDLOCAL
215exit 0
216
217:: Just end the script without closing the console
218:exit
219popd
220ENDLOCAL
Note: See TracBrowser for help on using the browser.