Author: markt
Date: Tue Oct 26 12:30:35 2010
New Revision: 1027504

URL: http://svn.apache.org/viewvc?rev=1027504&view=rev
Log:
Fix https://issues.apache.org/bugzilla/show_bug.cgi?id=50140
Don't ignore a user specified install directory on 64-bit platforms
Allow 32-bit or 64-bit JVMs to be selected when installing on a 64-bit platform

Modified:
    tomcat/trunk/res/jvm.ini
    tomcat/trunk/res/tomcat.nsi
    tomcat/trunk/webapps/docs/changelog.xml

Modified: tomcat/trunk/res/jvm.ini
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/res/jvm.ini?rev=1027504&r1=1027503&r2=1027504&view=diff
==============================================================================
--- tomcat/trunk/res/jvm.ini (original)
+++ tomcat/trunk/res/jvm.ini Tue Oct 26 12:30:35 2010
@@ -18,7 +18,7 @@ NumFields=2
 
 [Field 1]
 Type=Label
-Text=Please select the path of a Java SE 6.0 or later JRE installed on your 
system. Note that if you have a 64-bit operating system, you must specify a 
64-bit JRE:
+Text=Please select the path of a Java SE 6.0 or later JRE installed on your 
system.
 left=0
 right=300
 top=5

Modified: tomcat/trunk/res/tomcat.nsi
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/res/tomcat.nsi?rev=1027504&r1=1027503&r2=1027504&view=diff
==============================================================================
--- tomcat/trunk/res/tomcat.nsi (original)
+++ tomcat/trunk/res/tomcat.nsi Tue Oct 26 12:30:35 2010
@@ -37,7 +37,10 @@
 !include "StrFunc.nsh"
 ${StrRep}
   Var "JavaHome"
-
+  Var "JavaExe"
+  Var "JvmDll"
+  Var "Arch"
+  Var "ResetInstDir"
 
 
 ;--------------------------------
@@ -76,9 +79,9 @@ ${StrRep}
   !insertmacro MUI_PAGE_WELCOME
   !insertmacro MUI_PAGE_LICENSE INSTALLLICENSE
   !insertmacro MUI_PAGE_COMPONENTS
-  !insertmacro MUI_PAGE_DIRECTORY
   Page custom SetConfiguration Void "$(TEXT_CONF_PAGETITLE)"
-  Page custom SetChooseJVM Void "$(TEXT_JVM_PAGETITLE)"
+  Page custom SetChooseJVM checkJava "$(TEXT_JVM_PAGETITLE)"
+  !insertmacro MUI_PAGE_DIRECTORY
   !insertmacro MUI_PAGE_INSTFILES
   Page custom CheckUserType
   !insertmacro MUI_PAGE_FINISH
@@ -105,9 +108,6 @@ ${StrRep}
   ;Language
   !insertmacro MUI_LANGUAGE English
 
-  ;Folder-select dialog
-  InstallDir "$PROGRAMFILES\Apache Software Foundation\Tomcat 
@VERSION_MAJOR_MINOR@"
-
   ;Install types
   InstType Normal
   InstType Minimum
@@ -129,9 +129,9 @@ Section "Core" SecTomcatCore
 
   SectionIn 1 2 3 RO
 
-  IfSilent +2 0
-  Call checkJvm
-
+  IfSilent 0 +2
+  Call checkJava
+  
   SetOutPath $INSTDIR
   File tomcat.ico
   File LICENSE
@@ -153,38 +153,27 @@ Section "Core" SecTomcatCore
   File /r webapps\ROOT\*.*
 
   Call configure
-  Call findJavaPath
-  Pop $2
-
-  IfSilent +2 0
-  !insertmacro MUI_INSTALLOPTIONS_READ $2 "jvm.ini" "Field 2" "State"
-
-  StrCpy "$JavaHome" $2
-  Call findJVMPath
-  Pop $2
 
-  DetailPrint "Using Jvm: $2"
+  DetailPrint "Using Jvm: $JavaHome"
 
   SetOutPath $INSTDIR\bin
   File bin\tom...@version_major@w.exe
 
   ; Get the current platform x86 / AMD64 / IA64
-  Call FindCpuType
-  Pop $0
-  StrCmp $0 "x86" 0 +2
+  StrCmp $Arch "x86" 0 +2
   File /oname=tom...@version_major@.exe bin\tom...@version_major@.exe
-  StrCmp $0 "x64" 0 +2
+  StrCmp $Arch "x64" 0 +2
   File /oname=tom...@version_major@.exe bin\x64\tom...@version_major@.exe
-  StrCmp $0 "i64" 0 +2
+  StrCmp $Arch "i64" 0 +2
   File /oname=tom...@version_major@.exe bin\i64\tom...@version_major@.exe
 
   InstallRetry:
   FileOpen $R7 "$INSTDIR\logs\service-install.log" w
-  FileWrite $R7 '"$instdir\bin\tom...@version_major@.exe" 
//IS//tom...@version_major@ --DisplayName "Apache Tomcat @VERSION_MAJOR@" 
--Description "Apache Tomcat @VERSION@ Server - http://tomcat.apache.org/"; 
--LogPath "$INSTDIR\logs" --Install "$instdir\bin\tom...@version_major@.exe" 
--Jvm "$2" --StartPath "$INSTDIR" --StopPath "$INSTDIR"'
+  FileWrite $R7 '"$instdir\bin\tom...@version_major@.exe" 
//IS//tom...@version_major@ --DisplayName "Apache Tomcat @VERSION_MAJOR@" 
--Description "Apache Tomcat @VERSION@ Server - http://tomcat.apache.org/"; 
--LogPath "$INSTDIR\logs" --Install "$instdir\bin\tom...@version_major@.exe" 
--Jvm "$JvmDll" --StartPath "$INSTDIR" --StopPath "$INSTDIR"'
   FileWrite $R7 "$\r$\n"
   
   ClearErrors
-  nsExec::ExecToStack '"$instdir\bin\tom...@version_major@.exe" 
//IS//tom...@version_major@ --DisplayName "Apache Tomcat @VERSION_MAJOR@" 
--Description "Apache Tomcat @VERSION@ Server - http://tomcat.apache.org/"; 
--LogPath "$INSTDIR\logs" --Install "$instdir\bin\tom...@version_major@.exe" 
--Jvm "$2" --StartPath "$INSTDIR" --StopPath "$INSTDIR"'
+  nsExec::ExecToStack '"$instdir\bin\tom...@version_major@.exe" 
//IS//tom...@version_major@ --DisplayName "Apache Tomcat @VERSION_MAJOR@" 
--Description "Apache Tomcat @VERSION@ Server - http://tomcat.apache.org/"; 
--LogPath "$INSTDIR\logs" --Install "$instdir\bin\tom...@version_major@.exe" 
--Jvm "$JvmDll" --StartPath "$INSTDIR" --StopPath "$INSTDIR"'
   Pop $0
   Pop $1
   StrCmp $0 "0" InstallOk
@@ -202,17 +191,6 @@ Section "Service" SecTomcatService
 
   SectionIn 3
 
-  IfSilent 0 +3
-  Call findJavaPath
-  Pop $2
-
-  IfSilent +2 0
-  !insertmacro MUI_INSTALLOPTIONS_READ $2 "jvm.ini" "Field 2" "State"
-
-  StrCpy "$JavaHome" $2
-  Call findJVMPath
-  Pop $2
-
   FileWrite $R7 '"$instdir\bin\tom...@version_major@.exe" 
//US//tom...@version_major@ --Startup auto'
   FileWrite $R7 "$\r$\n"
   nsExec::ExecToLog '"$instdir\bin\tom...@version_major@.exe" 
//US//tom...@version_major@ --Startup auto'
@@ -228,14 +206,12 @@ Section "Native" SecTomcatNative
   SectionIn 3
 
   SetOutPath $INSTDIR\bin
-  Call FindCpuType
-  Pop $0
 
-  StrCmp $0 "x86" 0 +2
+  StrCmp $Arch "x86" 0 +2
   File bin\tcnative-1.dll
-  StrCmp $0 "x64" 0 +2
+  StrCmp $Arch "x64" 0 +2
   File /oname=tcnative-1.dll bin\x64\tcnative-1.dll
-  StrCmp $0 "i64" 0 +2
+  StrCmp $Arch "i64" 0 +2
   File /oname=tcnative-1.dll bin\i64\tcnative-1.dll
 
   ClearErrors
@@ -248,8 +224,6 @@ Section "Start Menu Items" SecMenu
 
   SectionIn 1 2 3
 
-  !insertmacro MUI_INSTALLOPTIONS_READ $2 "jvm.ini" "Field 2" "State"
-
   SetOutPath "$SMPROGRAMS\Apache Tomcat @VERSION_MAJOR_MINOR@"
 
   CreateShortCut "$SMPROGRAMS\Apache Tomcat @version_major_mi...@\tomcat Home 
Page.lnk" \
@@ -353,20 +327,16 @@ Section -post
 SectionEnd
 
 Function .onInit
-  ;Reset install dir for 64-bit
-  ExpandEnvStrings $0 "%PROGRAMW6432%"
-  StrCmp $0 "%PROGRAMW6432%" +2 0
-  StrCpy $INSTDIR "$0\Apache Software Foundation\Tomcat @VERSION_MAJOR_MINOR@"
+  StrCpy $ResetInstDir $INSTDIR
 
   ;Extract Install Options INI Files
   !insertmacro MUI_INSTALLOPTIONS_EXTRACT "config.ini"
   !insertmacro MUI_INSTALLOPTIONS_EXTRACT "jvm.ini"
-
 FunctionEnd
 
 Function SetChooseJVM
   !insertmacro MUI_HEADER_TEXT "$(TEXT_JVM_TITLE)" "$(TEXT_JVM_SUBTITLE)"
-  Call findJavaPath
+  Call findJavaHome
   Pop $3
   !insertmacro MUI_INSTALLOPTIONS_WRITE "jvm.ini" "Field 2" "State" $3
   !insertmacro MUI_INSTALLOPTIONS_DISPLAY "jvm.ini"
@@ -430,13 +400,13 @@ FunctionEnd
 !insertmacro MUI_FUNCTION_DESCRIPTION_END
 
 ; =====================
-; FindCpuType Function
+; findCpuType Function
 ; =====================
 ;
 ; Find the CPU used on the system, and put the result on the top of the
 ; stack
 ;
-Function FindCpuType
+Function findCpuType
 
   ClearErrors
   ; Default CPU is always x86
@@ -485,16 +455,89 @@ Function CheckUserType
   done:
 FunctionEnd
 
+; ==================
+; checkJava Function
+; ==================
+;
+; Checks that a valid JVM has been specified or a suitable default is available
+; Sets $JavaHome, $JavaExe and $JvmDll accordingly
+; Determines if the JVM is 32-bit or 64-bit and sets $Arch accordingly. For
+; 64-bit JVMs, also determines if it is x64 or ia64
+Function checkJava
+
+  IfSilent +3
+  !insertmacro MUI_INSTALLOPTIONS_READ $5 "jvm.ini" "Field 2" "State"
+  Goto TestJavaHome
+  
+  ; Silent install so try and find JavaHome from registry
+  Call findJavaHome
+  Pop $5
+  
+TestJavaHome:
+  IfFileExists "$5\bin\java.exe" FoundJavaExe
+  IfSilent +2
+  MessageBox MB_OK|MB_ICONSTOP "No Java Virtual Machine found in 
folder:$\r$\n$5"
+  DetailPrint "No Java Virtual Machine found in folder:$\r$\n$5"
+  Quit
+  
+FoundJavaExe:
+  StrCpy "$JavaHome" $5
+  StrCpy "$JavaExe" "$5\bin\java.exe"
+
+  ; Need path to jvm.dll to configure the service - uses $JavaHome
+  Call findJVMPath
+  Pop $5
+  StrCmp $5 "" 0 FoundJvmDll
+  IfSilent +2
+  MessageBox MB_OK|MB_ICONSTOP "No Java Virtual Machine found in 
folder:$\r$\n$5"
+  DetailPrint "No Java Virtual Machine found in folder:$\r$\n$5"
+  Quit
+
+FoundJvmDll:
+  StrCpy "$JvmDll" $5
+
+  ; 32-bit JVM -> use 32-bit service wrapper regardless of cpu type
+  ; 64-bit JVM -> use x64 or ia64 service wrapper depending on OS architecture
+  ; Yes, this is ugly and fragile. Suggestions for a better approach welcome
+  GetTempFileName $R0
+  FileOpen $R1 $R0.bat w
+  FileWrite $R1 "@echo off$\r$\n"
+  FileWrite $R1 "$\"$JavaExe$\" -version 2>&1 | find /i $\"64-Bit$\"$\r$\n"
+  FileClose $R1
+
+  ClearErrors
+  ExecWait '"$R0.bat"'
+  IfErrors +6
+  Delete $R0.bat
+  Call findCpuType
+  Pop $5
+  StrCpy "$Arch" $5
+  Goto SetInstallDir
+  Delete $R0.bat
+  StrCpy "$Arch" "x86"
+  
+SetInstallDir:
+  StrCpy $INSTDIR $ResetInstDir
+
+  ; The default varies depending on 32-bit or 64-bit
+  StrCmp $INSTDIR "" 0 +5
+  StrCmp $Arch "x86" 0 +2
+  StrCpy $INSTDIR "$PROGRAMFILES32\Apache Software Foundation\Tomcat 
@VERSION_MAJOR_MINOR@"
+  StrCmp $Arch "x86" +2 0
+  StrCpy $INSTDIR "$PROGRAMFILES64\Apache Software Foundation\Tomcat 
@VERSION_MAJOR_MINOR@"
+
+FunctionEnd
+
 
 ; =====================
-; FindJavaPath Function
+; findJavaHome Function
 ; =====================
 ;
 ; Find the JAVA_HOME used on the system, and put the result on the top of the
 ; stack
 ; Will return an empty string if the path cannot be determined
 ;
-Function findJavaPath
+Function findJavaHome
 
   ClearErrors
 
@@ -525,7 +568,7 @@ FunctionEnd
 ; ====================
 ;
 ; Find the full JVM path, and put the result on top of the stack
-; Argument: JVM base path (result of findJavaPath)
+; Argument: JVM base path (result of findJavaHome)
 ; Will return an empty string if the path cannot be determined
 ;
 Function findJVMPath
@@ -574,27 +617,6 @@ Function findJVMPath
 FunctionEnd
 
 
-; ====================
-; CheckJvm Function
-; ====================
-;
-Function checkJvm
-
-  !insertmacro MUI_INSTALLOPTIONS_READ $3 "jvm.ini" "Field 2" "State"
-  IfFileExists "$3\bin\java.exe" NoErrors1
-  MessageBox MB_OK|MB_ICONSTOP "No Java Virtual Machine found in 
folder:$\r$\n$3"
-  Quit
-NoErrors1:
-  StrCpy "$JavaHome" $3
-  Call findJVMPath
-  Pop $4
-  StrCmp $4 "" 0 NoErrors2
-  MessageBox MB_OK|MB_ICONSTOP "No Java Virtual Machine found in 
folder:$\r$\n$3"
-  Quit
-NoErrors2:
-
-FunctionEnd
-
 ; ==================
 ; Configure Function
 ; ==================

Modified: tomcat/trunk/webapps/docs/changelog.xml
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/webapps/docs/changelog.xml?rev=1027504&r1=1027503&r2=1027504&view=diff
==============================================================================
--- tomcat/trunk/webapps/docs/changelog.xml (original)
+++ tomcat/trunk/webapps/docs/changelog.xml Tue Oct 26 12:30:35 2010
@@ -119,6 +119,18 @@
         General code clean-up to reduce (not eliminate) the number of warnings
         reported by IDEs. (markt)
       </fix>
+      <fix>
+        <bug>50140</bug>: Don&apos;t ignore a user specified installation
+        directory when performing a silent install with the Windows installer 
on
+        64-bit platforms. (markt)
+      </fix>
+      <add>
+        When installing with the Windows installer on 64-bit platforms, allow
+        the user to select either a 32-bit JDK or a 64-bit JDK. If a 32-bit JDK
+        is selected, the 32-bit service wrapper and the 32-bit native DLL will
+        be installed. If a 64-bit JDK is selected, the 64-bit service wrapper
+        and the 64-bit native DLL will be installed. (markt)
+      </add>
     </changelog>
   </subsection>
 </section>



---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org
For additional commands, e-mail: dev-h...@tomcat.apache.org

Reply via email to