source: main/trunk/greenstone2/gs2-server.bat@ 22388

Last change on this file since 22388 was 22388, checked in by ak19, 14 years ago

Can handle the case of adjusting an empty classpath. Fixes a bug that occurs when there's an empty classpath that never got expanded to contain the necessary jar files.

File size: 7.9 KB
RevLine 
[20391]1@echo off
2SETLOCAL
3
[20896]4if "%serverlang%" == "" set serverlang=en
[20635]5set java_min_version=1.5.0_00
[20896]6set PROGNAME=gs2-server
7if "%PROGABBR%" == "" set PROGABBR=GSI
[20391]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
[20436]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%"
[20391]34 call setup.bat
[20655]35rem echo **** GSDLOS: %GSDLOS% and GSDLHOME: %GSDLHOME%
[20391]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."
[20915]48rem echo "%GSDLHOME%\apache-httpd\nul"
[20905]49if not exist "%GSDLHOME%\apache-httpd\*" (
[20391]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)
[20905]78call :isinpath "%GSDLHOME%\lib\java"
[20391]79
80:: After the call, we come back here
81goto chkjava
82
83:isinpath
[20392]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")
[20391]86:: Instead, we expand the filepath of parameter 1 to its full path and
87:: try to subtract it from the classpath.
[20392]88::call set test_cpath=%%CLASSPATH:%~f1=%%
[22388]89call set test_cpath=%%CLASSPATH:%~1=%%
[20391]90
[22388]91:: If the classpath was not empty to begin with and if there IS a difference in
92:: the classpath before and after, then the filepath was already on the classpath
93if not "%CLASSPATH%" == "" if not "%CLASSPATH%" == "%test_cpath%" (
94 echo - CLASSPATH already correct:
[20391]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
[20392]103:: http://ss64.com/nt/for_r.html and (for call) http://ss64.com/nt/for.html
[20391]104:: http://ss64.com/nt/syntax-args.html
[20905]105FOR /R "%GSDLHOME%\lib\java" %%G IN (*.jar) DO call :putinpath "%%G"
[20391]106echo - Adjusted CLASSPATH
107echo.
108::echo CLASSPATH:& echo %CLASSPATH%
109goto :eof
110
111
112:putinpath
[20905]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%
[20391]118goto :eof
119
120:: ---- Check Java ----
121:chkjava
[20655]122:: call the script with source, so that we have the variables JAVA_EXECUTABLE and GS_JAVA_HOME it sets
[20391]123set exit_status=0
124:: Need to find Java. If found, JAVA_EXECUTABLE will be set
125:: call findjava.bat %serverlang% %PROGNAME%
[20934]126if "%GSDL3SRCHOME%" == "" (set _VERSION=2) else (set _VERSION=3)
[20478]127call "%GSDLHOME%\findjava.bat"
[20391]128if "%JAVA_EXECUTABLE%" == "" echo **** No Java executable found& goto exit
[20655]129set PATH=%GS_JAVA_HOME%\bin;%PATH%
[20391]130
131
132:: ---- Run the Greenstone Server Interface ----
[20896]133:: Some informative messages to direct the users to the logs
134if "%serverlang%" == "en" (
135 echo ***************************************************************
[20905]136 echo Starting the Greenstone Server Interface ^(GSI^)...
[20896]137 echo.
138 echo Server log messages go to:
[20905]139 echo "%GSDLHOME%\etc\logs-gsi\server.log"
[20896]140 echo.
141 echo Using Apache web server located at:
[20905]142 echo "%GSDLHOME%\apache-httpd\%GSDLOS%\bin\httpd"
[20896]143 echo The Apache error log is at:
[20905]144 echo "%GSDLHOME%\apache-httpd\%GSDLOS%\logs\error_log"
[20896]145 echo The Apache configuration file template is at:
[20905]146 echo "%GSDLHOME%\apache-httpd\%GSDLOS%\conf\httpd.conf.in"
[20896]147 echo This is used to generate:
[20905]148 echo "%GSDLHOME%\apache-httpd\%GSDLOS%\conf\httpd.conf"
[20896]149 echo each time Enter Library is pressed or otherwise activated.
150 echo ***************************************************************
151 echo.
152)
[20391]153echo.
[21966]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
[22084]166:: Get everything after the "--quitport=", if anything, and store it in port var. If no port, nothing to do.
[21966]167set conf=%*
[22084]168if "%conf%" == "" goto :runit
169
[21966]170set port=%conf:*--quitport=%
171if "%conf%" == "%port%" (
172set port=
173goto :runit
174) else (
175set port=%port:~1%
176)
177
178:: Because we got here, need to adjust conf by removing " --quitport=" from it and prefixing this to port
179call set conf=%%conf:%port%=%%
180set conf=%conf:~0,-12%
181set port=--quitport=%port%
182
183:: Remove trailing spaces from conf and port
184:: (We'll put the all-important quotes around conf and port when the actual java cmd is launched)
185set tmp=%conf%
186call :trim %tmp%
187set conf=%tmp%
188set tmp=%port%
189call :trim %port%
190set port=%tmp%
191set tmp=
192
193goto :runit
194
195:: http://www.computing.net/answers/programming/dos-batch-remove-trailing-space/9270.html
196:trim
197set tmp=%*
198goto :eof
199
200:runit
201::echo port: %port%& echo conf: %conf%& echo.& echo.
202:: "%JAVA_EXECUTABLE%" org.greenstone.server.Server2 "%GSDLHOME%" "%serverlang%" %*
203"%JAVA_EXECUTABLE%" org.greenstone.server.Server2 "%GSDLHOME%" "%serverlang%" "%conf%" "%port%"
204
205
206:: The 1st argument to gs2-server.bat (if any) would be --config, the 2nd is the config filename.
207:: Both are stored in %conf% now. If the config file is glisite.cfg, then this script was launched through
208:: GLI and would have opened a DOS console. Need to exit from this script then to close the console.
[22084]209:: Remove --config=prefix and do a case insensitive comparison, since filepaths can have uppercase chars
210if "%conf%" == "" goto exit
[21966]211if /i "%conf:~9%" == "%GSDLHOME%\glisite.cfg" goto quitcmd
[20391]212goto exit
213
[20478]214:: Exit the batch script (close the console)
215:quitcmd
216popd
217ENDLOCAL
218exit 0
219
220:: Just end the script without closing the console
[20391]221:exit
222popd
223ENDLOCAL
Note: See TracBrowser for help on using the repository browser.