source: main/trunk/greenstone3/gs3-setup.bat@ 31461

Last change on this file since 31461 was 31461, checked in by ak19, 7 years ago

Corrections to commit of revision 31447, to handle further cases: even if the JAVA_HOME/JRE_HOME found by search4j were not of the correct bitness for the GS3 installation, if there's no bundled JRE, then shouldn't just check for a system JAVA_HOME or JRE_HOME but use the one found by search4j (and proceed to warn about the incompatibility, as before).

  • Property svn:executable set to *
  • Property svn:keywords set to Author Date Id Revision
File size: 13.5 KB
RevLine 
[15071]1@echo off
2
[22069]3setlocal enabledelayedexpansion
4
[20191]5set java_min_version=1.5.0_00
[15071]6
[27832]7if exist gs3-setup.bat goto prelim
[15071]8 echo This script must be run from within the Greenstone 3 home directory
[27832]9 goto done
[15071]10
[27832]11:prelim
12if "!GSDL3SRCHOME!" == "" goto start
13if "!GSDL3SRCHOME!" == "!CD!" (
14 echo Your environment is already set up for Greenstone3
15 goto done
16) else (
17 echo Your environment was set up for Greenstone 3 in !GSDL3SRCHOME!.
18 echo Overwriting that set up for the current Greenstone 3 in !CD!.
19)
20
[15071]21:start
[15363]22:: ---- Set some relevant environment variables ----
23
24:: this is the default
[22069]25:: greenstone3 (!GSDL3SRCHOME!)
26:: +-- web (!GSDL3HOME!)
[15363]27:: +-- packages
[22069]28:: +-- tomcat (!TOMCAT_HOME!)
29:: +-- ant (!ANT_HOME!)
[15363]30
[24374]31:: set GSDL3SRCHOME to the current directory
[22069]32cd | winutil\setvar.exe GSDL3SRCHOME > !TMP!\setgsdl3.bat
33call !TMP!\setgsdl3.bat
34del !TMP!\setgsdl3.bat
[15363]35
[24374]36:: set GSDL3HOME to the 'web' subdirectory
[22069]37set GSDL3HOME=!GSDL3SRCHOME!\web
[30574]38set WEB_CONTAINING_CLASSES=!GSDL3SRCHOME!\web
[30568]39:: set GSDL3HOME to any web.home property provided, and create that folder if it doesn't exist
40:: Replace forward slashes in web.home with back slashes
41:: http://scripts.dragon-it.co.uk/scripts.nsf/docs/batch-search-replace-substitute!OpenDocument&ExpandSection=3&BaseTarget=East&AutoFramed
[30592]42if exist "!GSDL3SRCHOME!\build.properties" for /F "usebackq tokens=1,2 delims==" %%G in ("!GSDL3SRCHOME!\build.properties") do (
[30568]43 if "%%G"=="web.home" (
44 set GSDL3HOME=%%H
45 set GSDL3HOME=!GSDL3HOME:/=\!
[30574]46 set WEB_CONTAINING_CLASSES=!GSDL3HOME!
[30568]47 if not exist "!GSDL3HOME!" cmd /c "!GSDL3SRCHOME!\userweb.cmd"
[30574]48 goto foundwebhome
49 )
[30568]50)
[15071]51
[30574]52:foundwebhome
[30568]53:: Whatever the web directory is, it should contain the WEB-INF\classes folder, else go back to using default for this
54:: The WEB-INF\classes folder will be absent in a userweb folder, but will be present if GSDL3HOME=GSDL3SRCHOME\web
55:: or if web.home points to GS3 as a webapp inside tomcat
[30574]56if not exist "!GSDL3HOME!\WEB-INF\classes" set WEB_CONTAINING_CLASSES=!GSDL3SRCHOME!\web
[30568]57
[15363]58:: change if using external tomcat or ant
[22069]59set TOMCAT_HOME=!GSDL3SRCHOME!\packages\tomcat
60if exist "!GSDL3SRCHOME!\packages\ant\*.*" set ANT_HOME=!GSDL3SRCHOME!\packages\ant
[15071]61
[15363]62:: other important environment variables
[15071]63set GSDLOS=windows
[15363]64
65:: ---- Set the CLASSPATH and PATH environment variables ----
[22069]66if "!GS_CP_SET!" == "yes" goto skipSetCp
[30574]67set CLASSPATH=!WEB_CONTAINING_CLASSES!\WEB-INF\classes;!GSDL3SRCHOME!\resources\java;!GSDL3SRCHOME!\cp.jar;!CLASSPATH!;
[24603]68set PATH=!GSDL3SRCHOME!\bin;!GSDL3SRCHOME!\bin\script;!GSDL3SRCHOME!\lib\jni;!ANT_HOME!\bin;!PATH!
[15071]69
[20304]70:: Override Imagemagick and Ghostscript paths to the bundled applications shipped with greenstone if they exists otherwise use default environment variables.
[24374]71:: if exist "!GSDL3SRCHOME!\gs2build\bin\windows\ghostscript\bin\gsdll32.dll" set GS_DLL=!GSDL3SRCHOME!\gs2build\bin\windows\ghostscript\bin\gsdll32.dll
72:: if exist "!GSDL3SRCHOME!\gs2build\bin\windows\ghostscript\lib\*.*" set GS_LIB=!GSDL3SRCHOME!\gs2build\bin\windows\ghostscript\lib
73:: if exist "!GSDL3SRCHOME!\gs2build\bin\windows\ghostscript\bin\*.*" set PATH=!GSDL3SRCHOME!\gs2build\bin\windows\ghostscript\bin;!PATH!
74:: if exist "!GSDL3SRCHOME!\gs2build\bin\windows\imagemagick\*.*" set PATH=!GSDL3SRCHOME!\gs2build\bin\windows\imagemagick;!PATH!
[20304]75
[15363]76:: a little dynamic set cp stuff
[22075]77if exist "!TMP!\setcp.bat" del "!TMP!\setcp.bat"
78
79:: http://ss64.com/nt/for_cmd.html, how to deal with spaces in the file list in a for command
80:: Note that TOMCAT_HOME\common\endorsed only exists for Tomcat 5, not Tomcat 6
81:: (where it contains xercesImpl.jar and xml-apis.jar which aren't there in Tomcat 6)
82if exist "!TOMCAT_HOME!\common\endorsed\*.jar" for /f %%j in ('dir/b ^"!TOMCAT_HOME!\common\endorsed\*.jar^"') do echo set CLASSPATH=%%CLASSPATH%%;%%TOMCAT_HOME%%\common\endorsed\%%j>> !TMP!\setcp.bat
83for /f %%j in ('dir/b ^"!TOMCAT_HOME!\lib\*.jar^"') do echo set CLASSPATH=%%CLASSPATH%%;%%TOMCAT_HOME%%\lib\%%j>> !TMP!\setcp.bat
84
[22069]85if exist !TMP!\setcp.bat call !TMP!\setcp.bat
86if exist !TMP!\setcp.bat del !TMP!\setcp.bat
[15363]87
88set GS_CP_SET=yes
[15071]89:skipSetCp
90
[21320]91:: ---- if gs2build is there, run its setup.bat file ----
[24374]92endlocal & set RUNJAVA=%RUNJAVA%& set PATH=%PATH%& set GSDLOS=%GSDLOS%& set GSDLHOME=%GSDLHOME%& set GSDL3HOME=%GSDL3HOME%& set GSDL3SRCHOME=%GSDL3SRCHOME%& set JAVA_HOME=%JAVA_HOME%& set JRE_HOME=%JRE_HOME%& set ANT_HOME=%ANT_HOME%& set CLASSPATH=%CLASSPATH%
[21320]93
94if exist gs2build\setup.bat (
95 echo.
96 echo Running gs2build\setup.bat
97 cd gs2build
98 call setup.bat
99 cd ..
100)
101
102:: ---- Check for any setup files in ext or local folders ----
103if exist ext (
104 for /D %%e IN ("ext/*") do (
105 cd ext\%%e
[24336]106 if EXIST gs3-setup.bat (
107 call gs3-setup.bat
108 ) else (
109 if EXIST setup.bat call setup.bat
110 )
[21320]111 cd ..\..
112 )
113)
114
115
116if exist local\gs3-setup.bat (
117 echo.
118 echo Running local\gs3-setup.bat
119 cd local
120 call gs3-setup.bat
121 cd ..
122)
123
[24374]124setlocal enabledelayedexpansion
125
[15363]126:: ---- Search for java ----
[20300]127set JAVA_MIN_VERSION=1.5.0_00
[22069]128set HINT=!CD!\packages\jre
[31447]129
[20300]130::if search4j is present, use it
131set FOUNDJAVAHOME=
132set RUNJAVA=
133if exist bin\search4j.exe (
[22069]134 for /F "tokens=*" %%r in ('bin\search4j.exe -d -p "!HINT!" -m !JAVA_MIN_VERSION!') do set FOUNDJAVAHOME=%%r
135 for /F "tokens=*" %%r in ('bin\search4j.exe -r -p "!HINT!" -m !JAVA_MIN_VERSION!') do set FOUNDJREHOME=%%r
[20300]136)
[15071]137
[31447]138
139echo.
140echo ********************************************************************
141
142rem Check if any Java found matches the bitness of the Greenstone installation's binaries
143rem The sort of output we want:
144:: Installed GS as 32 bit
145:: Detected java is 64 bit
146:: Changing to use the GS bundled 32 bit jre
147:: We've detected a mismatch, this will only affect MG/MGPP collections for searching and GDBM database collections
148
149:: 1. What bit-ness are this Greenstone installation's binaries?
150:: GNUfile: http://stackoverflow.com/questions/2689168/checking-if-file-is-32bit-or-64bit-on-windows
151:: http://gnuwin32.sourceforge.net/packages/file.htm
[31460]152:: Also http://stackoverflow.com/questions/4089641/programatically-determine-if-native-exe-is-32-bit-or-64-bit
[31447]153:: http://stackoverflow.com/questions/2062020/how-can-i-tell-if-im-running-in-64-bit-jvm-or-32-bit-jvm-from-within-a-program
154:: Messy way: http://superuser.com/questions/358434/how-to-check-if-a-binary-is-32-or-64-bit-on-windows
155
156:: "%GSDLHOME%\bin\windows\GNUfile\bin\file.exe" "%GSDLHOME%\bin\windows\wvWare.exe"
[31460]157:: But we'll test the bitness of gdbmjava.dll itself as it's guaranteed to be present in GS3 and is also dependent on JNI
158:: No need to have the right bitness for GS2, since it doesn't use JNI
[31447]159
160:: See https://ss64.com/nt/for_cmd.html for using batch FOR to loop against the results of another command.
161:: Running
162:: for /f "usebackq delims=" %%G IN (`"gs2build\bin\windows\GNUfile\bin\file.exe" gs2build\bin\windows\wvWare.exe`) do echo %%G
163:: prints out the entire output, e.g.:
164:: gs2build\bin\windows\wvWare.exe; PE32 executable for MS Windows (console) Intel 80386 32-bit
165:: To just get the "PE32" part of that output, set the delimiter char to space and request only the 2nd token:
166:: Note: Using call before the command to allow 2 sets of double quotes, see
167:: http://stackoverflow.com/questions/6474738/batch-file-for-f-doesnt-work-if-path-has-spaces
168:: Could use shortfilenames, see http://stackoverflow.com/questions/10227144/convert-long-filename-to-short-filename-8-3-using-cmd-exe
[31460]169for /f "usebackq tokens=2 delims= " %%G IN (`call "%GSDLHOME%\bin\windows\GNUfile\bin\file.exe" "%GSDL3SRCHOME%\lib\jni\gdbmjava.dll"`) do set bitness=%%G
[31447]170
171if "%bitness%" == "PE32+" (
172 set bitness=64
173 echo The installed Greenstone is 64 bit
174) else (
175 if "%bitness%" == "PE32" (
176 set bitness=32
177 echo The installed Greenstone is 32 bit
178 ) else (
179 echo WARNING: Greenstone installation is of unknown bitness. "%bitness%" is neither 32 nor 64 bit& goto bundledjre
180 set bitness=UNKNOWN
181 )
182)
183
184:: 2. What bitness are any JAVA_HOME else JRE_HOME found by search4j?
185:: If you run the non-existent program "pinky" from batch or the DOS console, the exit value is 9009
186:: The same must be true if java is not installed and therefore not found. echo %errorlevel% produces 9009
187:: If java exists and is 32 bit, then running "java -d32 -version" has a return value of 1. echo %errorlevel% (1)
188:: If java exists and is 64 bit, then running "java -d32 -version" has a return value of 0. echo %errorlevel% (0)
189
190:testjavahome
191:: http://www.robvanderwoude.com/errorlevel.php
192:: https://ss64.com/nt/errorlevel.html
[21988]193if DEFINED FOUNDJAVAHOME (
[31447]194 echo *** Testing bitness of JAVA_HOME found at !FOUNDJAVAHOME!:
195 "!FOUNDJAVAHOME!\bin\java.exe" -d%bitness% -version 2> nul
196 if !ERRORLEVEL! equ 1 echo *** The detected system JDK java is an incompatible bit architecture& goto testjre
197 if !ERRORLEVEL! equ 0 (
[31461]198 echo *** The detected system JDK java is a matching %bitness% bit
199 goto setupjavahome
[31447]200 )
[20300]201)
[15071]202
[31447]203:testjre
204if DEFINED FOUNDJREHOME (
205 echo *** Testing bitness of JRE_HOME found at !FOUNDJREHOME!:
206 "!FOUNDJREHOME!\bin\java.exe" -d%bitness% -version 2> nul
207 if !ERRORLEVEL! equ 1 echo *** The detected JRE java is an incompatible bit architecture& goto bundledjre
208 if !ERRORLEVEL! equ 0 (
209 rem The JRE_HOME found by search4j may be the bundled JRE, overriding any system JRE_HOME,
210 rem because the bundled JRE_HOME was provided as HINT to search4j.
[31461]211 echo *** The detected JRE java is a matching %bitness% bit
212 goto setupjrehome
[31447]213 )
[20307]214)
215
[31447]216:: 3. Fall back to 32 bit JRE bundled with GS
217:bundledjre
218:: We bundled a 32 bit JRE, but what if GS was compiled with 64 bit Java?
219:: All but MG/MGPP and GDBM should still work with 64 bit java.
[22069]220if exist "!HINT!\bin\java.exe" (
[31447]221 echo *** Changing to use the GS bundled 32-bit jre.
[31461]222 set JRE_HOME=!HINT!
[22069]223 set PATH=!JAVA_HOME!\bin;!PATH!
224 set RUNJAVA=!JAVA_HOME!\bin\java.exe
[20300]225 goto summaryThenEnd
226)
[15071]227
[31461]228:: 4. If no bundled JRE exists either, we'd still need to check if search4j found a JAVA_HOME or JRE_HOME
229:: and use that even if there was a bitness mismatch btw GS3 and the Java found.
230:: Label summaryThenEnd will print out warnings on any mismatch
231:setupjavahome
232if DEFINED FOUNDJAVAHOME (
233 echo *** Using the system JAVA_HOME detected at !FOUNDJAVAHOME!
234 set JAVA_HOME=!FOUNDJAVAHOME!
235 set PATH=!FOUNDJAVAHOME!\bin;!PATH!
236 set RUNJAVA=!FOUNDJAVAHOME!\bin\java.exe
237 goto summaryThenEnd
238)
239
240:setupjrehome
241if DEFINED FOUNDJREHOME (
242 echo *** Using the JRE_HOME detected at !FOUNDJREHOME!
243 set JRE_HOME=!FOUNDJREHOME!
244 set PATH=!FOUNDJREHOME!\bin;!PATH!
245 set RUNJAVA=!FOUNDJREHOME!\bin\java.exe
246 goto summaryThenEnd
247)
248
249:: 5. Last ditch effort: search4j couldn't find any java, but check any Java env vars set anyway
[31447]250echo *** Search4j could not find an appropriate JAVA or JRE.
251echo *** Attempting to use any JAVA_HOME else JRE_HOME in the environment...
252
[22069]253if exist "!JAVA_HOME!\bin\java.exe" (
254 set PATH=!JAVA_HOME!\bin;!PATH!
255 set RUNJAVA=!JAVA_HOME!\bin\java.exe
[22082]256 echo Using Java at !JAVA_HOME!
257 echo WARNING: Greenstone has not checked the version number of this Java installation
258 echo The source distribution of Greenstone3 requires Java 1.5 or greater
259 echo SVN users may still use Java 1.4
[31447]260 echo.
[20300]261 goto summaryThenEnd
262)
263
[22069]264if exist "!JRE_HOME!\bin\java.exe" (
265 set PATH=!JRE_HOME!\bin;!PATH!
266 set RUNJAVA=!JRE_HOME!\bin\java.exe
[22082]267 echo Using Java at !JRE_HOME!
[31447]268 echo WARNING: Greenstone has not checked the version number of this JRE installation
[22081]269 echo The source distribution of Greenstone3 requires Java 1.5 or greater
[22082]270 echo SVN users may still use Java 1.4
[31447]271 echo.
[20300]272 goto summaryThenEnd
273)
274
[22082]275echo ERROR: Failed to locate Java
[31447]276echo Please set JAVA_HOME or JRE_HOME to point to an appropriate %bitness% bit Java
[20300]277goto end
278
279:summaryThenEnd
[31461]280:: 6. Check that the bitness of any Java found is appropriate and warn if it is not.
[31447]281"!RUNJAVA!" -d%bitness% -version 2> nul
282if !ERRORLEVEL! equ 1 (
[31461]283 echo *** WARNING: Detected mismatch between the bit-ness of your Greenstone installation ^(%bitness% bit^)
284 echo *** and the Java found at %RUNJAVA%.
[31447]285 echo *** Continuing with this Java anyway:
286 echo *** This will only affect MG/MGPP collections for searching, and GDBM database collections
287 echo *** Else set JAVA_HOME or JRE_HOME to point to an appropriate %bitness%-bit Java
288 echo *** Or recompile GS with your system Java:
289 if exist "!JAVA_HOME!" ( echo *** JAVA_HOME at !JAVA_HOME! ) else ( echo *** JRE_HOME at !JRE_HOME! )
290)
[20300]291
[31447]292echo ********************************************************************
293echo.
294
[22069]295echo GSDL3SRCHOME : !GSDL3SRCHOME!
296echo GSDL3HOME : !GSDL3HOME!
297echo JAVA : !RUNJAVA!
[22075]298
[22024]299if "!ANT_HOME!" == "" (
[20493]300 echo.
301 echo ANT_HOME is not yet set.
302 echo Please make sure you have Ant version 1.7.1 or higher installed
[22082]303 echo Then set ANT_HOME to the Ant installation folder
[22075]304 echo and add the path to its bin folder to the PATH environment variable
[20493]305) else (
[22024]306 echo ANT_HOME : !ANT_HOME!
[20493]307)
308echo.
[22015]309
[27832]310:done
[22069]311:: End localisation of variables that started with the set local/set enabledelayedexpansion command
312:: Restore global variables that would otherwise be lost at script's end due to their having been initialised in a
313:: set local/set enabledelayedexpansion section. See http://ss64.com/nt/endlocal.html
[22339]314endlocal & set RUNJAVA=%RUNJAVA%& set PATH=%PATH%& set GSDLOS=%GSDLOS%& set GSDLHOME=%GSDLHOME%& set GSDL3HOME=%GSDL3HOME%& set GSDL3SRCHOME=%GSDL3SRCHOME%& set JAVA_HOME=%JAVA_HOME%& set JRE_HOME=%JRE_HOME%& set ANT_HOME=%ANT_HOME%& set CLASSPATH=%CLASSPATH%
[22015]315
[20300]316:end
Note: See TracBrowser for help on using the repository browser.