Author: kkolinko
Date: Wed Feb  2 17:54:36 2011
New Revision: 1066549

URL: http://svn.apache.org/viewvc?rev=1066549&view=rev
Log:
* Backport Windows installer improvements from Tomcat 7.0.5.
  - Use *modern* types of nsis install/uninstall icons (r999976, mturk)
  - Create service-install.log file during installation with params that were 
used to invoke commons daemon. (r1003840, mturk; r1035083,r1035088 kkolinko)
  - Allow 32-bit or 64-bit JVMs to be selected when installing on a 64-bit 
platform. (r1027504, markt; r1033856,r1033882 kkolinko)
  - Reimplemented the Windows installer GUI using nsDialogs and MUI2 libraries, 
instead of deprecated InstallOptions. The *.ini files are no more used. All is 
specified in the nsi script. (r1034911, kkolinko)
  - Use new admin-gui and manager-gui roles for the user (r982151, mturk)
  - Add a field to display/edit the roles for the user that we add to 
tomcat-user.xml
  - The roles are calculated depending on what webapps are installed (only 
manager, vs. host-manager, vs. both of them).
  - Do not display "username", "password", "roles" fields when neither manager 
nor host-manager are selected. In the previous version we showed them as 
disabled. Now we do not show them on screen.
  - Add support for the '/?' command line option. It displays a message box. 
See .onInit function in tomcat.nsi for details. (r1034911, kkolinko)
  - When installing on Windows, do not leave undeleted stale files in 
$TEMP/src/res/confinstall/. Pack only needed fines, not duplicates. Place those 
files into $PLUGINSDIR instead of $TEMP.
  - Add DetailPrint statements for operations that take noticeable time. 
(r1034924, kkolinko)
  - Improve descriptions of the components. (r964211, r1035051)
The following fixes were backported as well:
  - Fix https://issues.apache.org/bugzilla/show_bug.cgi?id=50140
Don't ignore a user specified install directory on 64-bit platforms.
  - Fix https://issues.apache.org/bugzilla/show_bug.cgi?id=45332
Specify the correct encoding (the current Windows code page) rather than 
assuming UTF-8 when creating tomcat-users.xml with the Windows installer.
  - Fix https://issues.apache.org/bugzilla/show_bug.cgi?id=45852
Add special handling for cp932 (aka ms932) when creating tomcat-users.xml with 
Windows installer.

Added:
    tomcat/tc5.5.x/trunk/build/resources/main.ico
      - copied unchanged from r1066470, tomcat/trunk/res/main.ico
    tomcat/tc5.5.x/trunk/build/resources/uninst.ico
      - copied unchanged from r1066470, tomcat/trunk/res/uninst.ico
Removed:
    tomcat/tc5.5.x/trunk/build/resources/config.ini
    tomcat/tc5.5.x/trunk/build/resources/jvm.ini
Modified:
    tomcat/tc5.5.x/trunk/STATUS.txt
    tomcat/tc5.5.x/trunk/build/build.xml
    tomcat/tc5.5.x/trunk/build/resources/confinstall/tomcat-users_1.xml
    tomcat/tc5.5.x/trunk/build/tomcat.nsi
    tomcat/tc5.5.x/trunk/container/webapps/docs/changelog.xml

Modified: tomcat/tc5.5.x/trunk/STATUS.txt
URL: 
http://svn.apache.org/viewvc/tomcat/tc5.5.x/trunk/STATUS.txt?rev=1066549&r1=1066548&r2=1066549&view=diff
==============================================================================
--- tomcat/tc5.5.x/trunk/STATUS.txt (original)
+++ tomcat/tc5.5.x/trunk/STATUS.txt Wed Feb  2 17:54:36 2011
@@ -41,35 +41,6 @@ PATCHES PROPOSED TO BACKPORT:
   -O: jim
   -1:
 
-* Backport Windows installer improvements from Tomcat 7.0.5.
-  (as applied to TC6 in http://svn.apache.org/viewvc?rev=1056426&view=rev )
-
-  TC5.5 differences from TC6:
-   1) The patch includes changes to build.xml, to implement filtering for 
@YEAR@
-   2) The patch includes changes to tomcat-users_1.xml, to implement TC6/TC7
-   installer feature that the character encoding that was used to write
-   tomcat-users.xml is included in the XML signature at the top of the file.
-   That is to support non-latin usernames.
-   3) The patch uses the old roles "manager" and "admin", not the "-gui" ones.
-
-  To apply:
-  1. Run the following SVN commands:
-   svn del build/resources/jvm.ini
-   svn del build/resources/config.ini
-   svn del build/resources/main.ico
-   svn del build/resources/uninst.ico
-   # copy icons from TC7, see r999976
-   svn copy ../../trunk/res/main.ico build/resources/
-   svn copy ../../trunk/res/uninst.ico build/resources/
-  2. Apply patch:
-   http://people.apache.org/~kkolinko/patches/2011-01-17_tc55_tomcat-nsi.patch
-  +1: kkolinko, markt, mturk
-  -1:
-
-   For reference: here is the diff of tomcat.nsi of trunk @1059900 if I copy
-   patched tomcat.nsi of tc5.5 on top of it:
-   (  
http://people.apache.org/~kkolinko/patches/2011-01-17_tc55_tomcat-nsi-of-tc7_vs_tc55.diff
 )
-
 * Fix https://issues.apache.org/bugzilla/show_bug.cgi?id=50620
   Exceptions calling session.endAccess should not prevent recycle() from 
completing normally
   1) copy o.a.tomcat.util.ExceptionUtils from trunk

Modified: tomcat/tc5.5.x/trunk/build/build.xml
URL: 
http://svn.apache.org/viewvc/tomcat/tc5.5.x/trunk/build/build.xml?rev=1066549&r1=1066548&r2=1066549&view=diff
==============================================================================
--- tomcat/tc5.5.x/trunk/build/build.xml (original)
+++ tomcat/tc5.5.x/trunk/build/build.xml Wed Feb  2 17:54:36 2011
@@ -1561,10 +1561,15 @@
     <copy file="${nsis.nsexec.dll}" todir="${tomcat.dist}" />
     <copy file="${nsis.nsisdl.dll}" todir="${tomcat.dist}" />
 
+    <tstamp>
+       <format property="YEAR" pattern="yyyy" />
+    </tstamp>
+
     <filter token="VERSION" value="${version}"/>
     <filter token="VERSION_NUMBER" value="${version.number}"/>
        <filter token="VERSION_MAJOR" value="${version.major}"/>
        <filter token="VERSION_MAJOR_MINOR" value="${version.major.minor}"/>
+    <filter token="YEAR" value="${YEAR}"/>
 
     <copy file="tomcat.nsi" tofile="${tomcat.dist}/tomcat.nsi"
         filtering="true" encoding="ISO-8859-1" />

Modified: tomcat/tc5.5.x/trunk/build/resources/confinstall/tomcat-users_1.xml
URL: 
http://svn.apache.org/viewvc/tomcat/tc5.5.x/trunk/build/resources/confinstall/tomcat-users_1.xml?rev=1066549&r1=1066548&r2=1066549&view=diff
==============================================================================
--- tomcat/tc5.5.x/trunk/build/resources/confinstall/tomcat-users_1.xml 
(original)
+++ tomcat/tc5.5.x/trunk/build/resources/confinstall/tomcat-users_1.xml Wed Feb 
 2 17:54:36 2011
@@ -1,4 +1,3 @@
-<?xml version="1.0"?>
 <!--
   Licensed to the Apache Software Foundation (ASF) under one or more
   contributor license agreements.  See the NOTICE file distributed with

Modified: tomcat/tc5.5.x/trunk/build/tomcat.nsi
URL: 
http://svn.apache.org/viewvc/tomcat/tc5.5.x/trunk/build/tomcat.nsi?rev=1066549&r1=1066548&r2=1066549&view=diff
==============================================================================
--- tomcat/tc5.5.x/trunk/build/tomcat.nsi (original)
+++ tomcat/tc5.5.x/trunk/build/tomcat.nsi Wed Feb  2 17:54:36 2011
@@ -18,16 +18,14 @@
 
   ;Compression options
   CRCCheck on
-  SetCompress force
-  SetCompressor lzma
-  SetDatablockOptimize on
+  SetCompressor /SOLID lzma
 
   Name "Apache Tomcat"
 
   ;Product information
   VIAddVersionKey ProductName "Apache Tomcat"
   VIAddVersionKey CompanyName "Apache Software Foundation"
-  VIAddVersionKey LegalCopyright "Copyright (c) 1999-2011 The Apache Software 
Foundation"
+  VIAddVersionKey LegalCopyright "Copyright (c) 1999-@YEAR@ The Apache 
Software Foundation"
   VIAddVersionKey FileDescription "Apache Tomcat Installer"
   VIAddVersionKey FileVersion "2.0"
   VIAddVersionKey ProductVersion "@VERSION@"
@@ -35,12 +33,34 @@
   VIAddVersionKey InternalName "apache-tomcat-@VERSION@.exe"
   VIProductVersion @VERSION_NUMBER@
 
-!include "MUI.nsh"
+!include "MUI2.nsh"
+!include "nsDialogs.nsh"
 !include "StrFunc.nsh"
+!include "LogicLib.nsh"
+!include "FileFunc.nsh"
 ${StrRep}
-  Var "JavaHome"
-
 
+Var JavaHome
+Var JavaExe
+Var JvmDll
+Var Arch
+Var ResetInstDir
+Var TomcatPort
+Var TomcatAdminEnable
+Var TomcatAdminUsername
+Var TomcatAdminPassword
+Var TomcatAdminRoles
+
+; Variables that store handles of dialog controls
+Var CtlJavaHome
+Var CtlTomcatPort
+Var CtlTomcatAdminUsername
+Var CtlTomcatAdminPassword
+Var CtlTomcatAdminRoles
+
+; Handle of the service-install.log file
+; It is opened in "Core" section and closed in "-post"
+Var ServiceInstallLog
 
 ;--------------------------------
 ;Configuration
@@ -50,15 +70,12 @@ ${StrRep}
   !define MUI_HEADERIMAGE_BITMAP header.bmp
   !define MUI_WELCOMEFINISHPAGE_BITMAP side_left.bmp 
   !define MUI_FINISHPAGE_SHOWREADME "$INSTDIR\webapps\ROOT\RELEASE-NOTES.txt"
-  !define MUI_FINISHPAGE_RUN $INSTDIR\bin\tomcat5w.exe
-  !define MUI_FINISHPAGE_RUN_PARAMETERS //MR//Tomcat5
+  !define MUI_FINISHPAGE_RUN $INSTDIR\bin\tomcat@version_ma...@w.exe
+  !define MUI_FINISHPAGE_RUN_PARAMETERS //MR//Tomcat@VERSION_MAJOR@
   !define MUI_FINISHPAGE_NOREBOOTSUPPORT
 
   !define MUI_ABORTWARNING
 
-  !define TEMP1 $R0
-  !define TEMP2 $R1
-
   !define MUI_ICON tomcat.ico
   !define MUI_UNICON tomcat.ico
 
@@ -74,13 +91,22 @@ ${StrRep}
   LangString TEXT_CONF_SUBTITLE ${LANG_ENGLISH} "Tomcat basic configuration."
   LangString TEXT_CONF_PAGETITLE ${LANG_ENGLISH} ": Configuration Options"
 
+  LangString TEXT_JVM_LABEL1 ${LANG_ENGLISH} "Please select the path of a Java 
SE 5.0 or later JRE installed on your system."
+  LangString TEXT_CONF_LABEL_PORT ${LANG_ENGLISH} "HTTP/1.1 Connector Port"
+  LangString TEXT_CONF_LABEL_ADMIN ${LANG_ENGLISH} "Tomcat Administrator Login 
(optional)"
+  LangString TEXT_CONF_LABEL_ADMINUSERNAME ${LANG_ENGLISH} "User Name"
+  LangString TEXT_CONF_LABEL_ADMINPASSWORD ${LANG_ENGLISH} "Password"
+  LangString TEXT_CONF_LABEL_ADMINROLES ${LANG_ENGLISH} "Roles"
+
   ;Install Page order
   !insertmacro MUI_PAGE_WELCOME
   !insertmacro MUI_PAGE_LICENSE INSTALLLICENSE
+  ; Use custom onLeave function with COMPONENTS page
+  !define MUI_PAGE_CUSTOMFUNCTION_LEAVE pageComponentsLeave
   !insertmacro MUI_PAGE_COMPONENTS
+  Page custom pageConfiguration pageConfigurationLeave "$(TEXT_CONF_PAGETITLE)"
+  Page custom pageChooseJVM pageChooseJVMLeave "$(TEXT_JVM_PAGETITLE)"
   !insertmacro MUI_PAGE_DIRECTORY
-  Page custom SetConfiguration Void "$(TEXT_CONF_PAGETITLE)"
-  Page custom SetChooseJVM Void "$(TEXT_JVM_PAGETITLE)"
   !insertmacro MUI_PAGE_INSTFILES
   Page custom CheckUserType
   !insertmacro MUI_PAGE_FINISH
@@ -95,7 +121,7 @@ ${StrRep}
   ;Component-selection page
     ;Descriptions
     LangString DESC_SecTomcat ${LANG_ENGLISH} "Install the Tomcat Servlet 
container as a Windows service."
-    LangString DESC_SecTomcatCore ${LANG_ENGLISH} "Install the Tomcat Servlet 
container core."
+    LangString DESC_SecTomcatCore ${LANG_ENGLISH} "Install the Tomcat Servlet 
container core and create the Windows service."
     LangString DESC_SecTomcatService ${LANG_ENGLISH} "Automatically start the 
Tomcat service when the computer is started."
     LangString DESC_SecTomcatNative ${LANG_ENGLISH} "Install APR based Tomcat 
native .dll for better performance and scalability in production environments."
     LangString DESC_SecMenu ${LANG_ENGLISH} "Create a Start Menu program group 
for Tomcat."
@@ -104,25 +130,24 @@ ${StrRep}
     LangString DESC_SecHostManager ${LANG_ENGLISH} "Install the Tomcat Host 
Manager administrative web application."
     LangString DESC_SecExamples ${LANG_ENGLISH} "Install the Servlet and JSP 
example web applications."
     LangString DESC_SecWebapps ${LANG_ENGLISH} "Installs other utility web 
applications (WebDAV, balancer, etc)."
-;    LangString DESC_SecCompat ${LANG_ENGLISH} "Installs Java2™ compatibility 
package. This release of Apache Tomcat was packaged to run on J2SE 5.0 or 
later. It can be run on earlier JVMs by installng this package."
 
   ;Language
   !insertmacro MUI_LANGUAGE English
 
-  ;Folder-select dialog
-  InstallDir "$PROGRAMFILES\Apache Software Foundation\Tomcat 5.5"
-
   ;Install types
   InstType Normal
   InstType Minimum
   InstType Full
 
   ; Main registry key
-  InstallDirRegKey HKLM "SOFTWARE\Apache Software Foundation\Tomcat\5.5" ""
+  InstallDirRegKey HKLM "SOFTWARE\Apache Software 
Foundation\Tomcat\@VERSION_MAJOR_MINOR@" ""
 
-  !insertmacro MUI_RESERVEFILE_INSTALLOPTIONS
-  ReserveFile "jvm.ini"
-  ReserveFile "config.ini"
+  ReserveFile "${NSISDIR}\Plugins\System.dll"
+  ReserveFile "${NSISDIR}\Plugins\nsDialogs.dll"
+  ReserveFile confinstall\server_1.xml
+  ReserveFile confinstall\server_2.xml
+  ReserveFile confinstall\tomcat-users_1.xml
+  ReserveFile confinstall\tomcat-users_2.xml
 
 ;--------------------------------
 ;Installer Sections
@@ -133,8 +158,9 @@ Section "Core" SecTomcatCore
 
   SectionIn 1 2 3 RO
 
-  IfSilent +2 0
-  Call checkJvm
+  ${If} ${Silent}
+    Call checkJava
+  ${EndIf}
 
   SetOutPath $INSTDIR
   File tomcat.ico
@@ -144,12 +170,10 @@ Section "Core" SecTomcatCore
   File /r common\*.*
   SetOutPath $INSTDIR\shared
   File /nonfatal /r shared\*.*
+  ; Note: just calling 'SetOutPath' will create the empty folders for us
   SetOutPath $INSTDIR\logs
-  File /nonfatal /r logs\*.*
   SetOutPath $INSTDIR\work
-  File /nonfatal /r work\*.*
   SetOutPath $INSTDIR\temp
-  File /nonfatal /r temp\*.*
   SetOutPath $INSTDIR\bin
   File bin\bootstrap.jar
   File bin\commons-logging-api-1.1.1.jar
@@ -164,63 +188,57 @@ 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\tomcat@version_ma...@w.exe
 
   ; Get the current platform x86 / AMD64 / IA64
-  Call FindCpuType
-  Pop $0
-  StrCmp $0 "x86" 0 +2
-  File /oname=tomcat@VERSION_MAJOR@.exe bin\tomcat@VERSION_MAJOR@.exe
-  StrCmp $0 "x64" 0 +2
-  File /oname=tomcat@VERSION_MAJOR@.exe bin\x64\tomcat@VERSION_MAJOR@.exe
-  StrCmp $0 "i64" 0 +2
-  File /oname=tomcat@VERSION_MAJOR@.exe bin\i64\tomcat@VERSION_MAJOR@.exe
+  ${If} $Arch == "x86"
+    File /oname=tomcat@VERSION_MAJOR@.exe bin\tomcat@VERSION_MAJOR@.exe
+  ${ElseIf} $Arch == "x64"
+    File /oname=tomcat@VERSION_MAJOR@.exe bin\x64\tomcat@VERSION_MAJOR@.exe
+  ${ElseIf} $Arch == "i64"
+    File /oname=tomcat@VERSION_MAJOR@.exe bin\i64\tomcat@VERSION_MAJOR@.exe
+  ${EndIf}
+
+  FileOpen $ServiceInstallLog "$INSTDIR\logs\service-install.log" a
+  FileSeek $ServiceInstallLog 0 END
 
   InstallRetry:
+  FileWrite $ServiceInstallLog '"$INSTDIR\bin\tomcat@VERSION_MAJOR@.exe" 
//IS//Tomcat@VERSION_MAJOR@ --DisplayName "Apache Tomcat @VERSION_MAJOR@" 
--Description "Apache Tomcat @VERSION@ Server - http://tomcat.apache.org/"; 
--LogPath "$INSTDIR\logs" --Install "$INSTDIR\bin\tomcat@VERSION_MAJOR@.exe" 
--Jvm "$JvmDll" --StartPath "$INSTDIR" --StopPath "$INSTDIR"'
+  FileWrite $ServiceInstallLog "$\r$\n"
   ClearErrors
-  nsExec::ExecToLog '"$INSTDIR\bin\tomcat5.exe" //IS//Tomcat5 --DisplayName 
"Apache Tomcat" --Description "Apache Tomcat @VERSION@ Server - 
http://tomcat.apache.org/"; --LogPath "$INSTDIR\logs" --Install 
"$INSTDIR\bin\tomcat5.exe" --Jvm "$2" --StartPath "$INSTDIR" --StopPath 
"$INSTDIR"'
+  DetailPrint "Installing Tomcat@VERSION_MAJOR@ service"
+  nsExec::ExecToStack '"$INSTDIR\bin\tomcat@VERSION_MAJOR@.exe" 
//IS//Tomcat@VERSION_MAJOR@ --DisplayName "Apache Tomcat @VERSION_MAJOR@" 
--Description "Apache Tomcat @VERSION@ Server - http://tomcat.apache.org/"; 
--LogPath "$INSTDIR\logs" --Install "$INSTDIR\bin\tomcat@VERSION_MAJOR@.exe" 
--Jvm "$JvmDll" --StartPath "$INSTDIR" --StopPath "$INSTDIR"'
   Pop $0
+  Pop $1
   StrCmp $0 "0" InstallOk
+    FileWrite $ServiceInstallLog "Install failed: $0 $1$\r$\n"
     MessageBox MB_ABORTRETRYIGNORE|MB_ICONSTOP \
-      "Failed to install Tomcat5 service.$\r$\nCheck your settings and 
permissions.$\r$\nIgnore and continue anyway (not recommended)?" \
+      "Failed to install Tomcat@VERSION_MAJOR@ service.$\r$\nCheck your 
settings and permissions.$\r$\nIgnore and continue anyway (not recommended)?" \
        /SD IDIGNORE IDIGNORE InstallOk IDRETRY InstallRetry
   Quit
   InstallOk:
   ClearErrors
 
+  ; Will be closed in "-post" section
+  ; FileClose $ServiceInstallLog
 SectionEnd
 
 Section "Service Startup" 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
-
-  nsExec::ExecToLog '"$INSTDIR\bin\tomcat5.exe" //US//Tomcat5 --Startup auto'
+  ${If} $ServiceInstallLog != ""
+    FileWrite $ServiceInstallLog '"$INSTDIR\bin\tomcat@VERSION_MAJOR@.exe" 
//US//Tomcat@VERSION_MAJOR@ --Startup auto'
+    FileWrite $ServiceInstallLog "$\r$\n"
+  ${EndIf}
+  DetailPrint "Configuring Tomcat@VERSION_MAJOR@ service"
+  nsExec::ExecToLog '"$INSTDIR\bin\tomcat@VERSION_MAJOR@.exe" 
//US//Tomcat@VERSION_MAJOR@ --Startup auto'
   ; Behave like Apache Httpd (put the icon in tray on login)
-  WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Run" 
"ApacheTomcatMonitor" '"$INSTDIR\bin\tomcat5w.exe" //MS//Tomcat5'
+  WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Run" 
"ApacheTomcatMonitor" '"$INSTDIR\bin\tomcat@version_ma...@w.exe" 
//MS//Tomcat@VERSION_MAJOR@'
 
   ClearErrors
 
@@ -231,15 +249,14 @@ Section "Native" SecTomcatNative
   SectionIn 3
 
   SetOutPath $INSTDIR\bin
-  Call FindCpuType
-  Pop $0
 
-  StrCmp $0 "x86" 0 +2
-  File bin\tcnative-1.dll
-  StrCmp $0 "x64" 0 +2
-  File /oname=tcnative-1.dll bin\x64\tcnative-1.dll
-  StrCmp $0 "i64" 0 +2
-  File /oname=tcnative-1.dll bin\i64\tcnative-1.dll
+  ${If} $Arch == "x86"
+    File bin\tcnative-1.dll
+  ${ElseIf} $Arch == "x64"
+    File /oname=tcnative-1.dll bin\x64\tcnative-1.dll
+  ${ElseIf} $Arch == "i64"
+    File /oname=tcnative-1.dll bin\i64\tcnative-1.dll
+  ${EndIf}
 
   ClearErrors
 
@@ -251,46 +268,7 @@ Section "Start Menu Items" SecMenu
 
   SectionIn 1 2 3
 
-  !insertmacro MUI_INSTALLOPTIONS_READ $2 "jvm.ini" "Field 2" "State"
-
-  SetOutPath "$SMPROGRAMS\Apache Tomcat 5.5"
-
-  CreateShortCut "$SMPROGRAMS\Apache Tomcat 5.5\Tomcat Home Page.lnk" \
-                 "http://tomcat.apache.org/";
-
-  CreateShortCut "$SMPROGRAMS\Apache Tomcat 5.5\Welcome.lnk" \
-                 "http://127.0.0.1:$R0/";
-
-  IfFileExists "$INSTDIR\server\webapps\manager" 0 NoManagerApp
-
-  CreateShortCut "$SMPROGRAMS\Apache Tomcat 5.5\Tomcat Manager.lnk" \
-                 "http://127.0.0.1:$R0/manager/html";
-
-NoManagerApp:
-
-  IfFileExists "$INSTDIR\webapps\webapps\tomcat-docs" 0 NoDocumentaion
-
-  CreateShortCut "$SMPROGRAMS\Apache Tomcat 5.5\Tomcat Documentation.lnk" \
-                 "$INSTDIR\webapps\tomcat-docs\index.html"
-
-NoDocumentaion:
-
-  CreateShortCut "$SMPROGRAMS\Apache Tomcat 5.5\Uninstall Tomcat 5.5.lnk" \
-                 "$INSTDIR\Uninstall.exe"
-
-  CreateShortCut "$SMPROGRAMS\Apache Tomcat 5.5\Tomcat 5.5 Program 
Directory.lnk" \
-                 "$INSTDIR"
-
-  CreateShortCut "$SMPROGRAMS\Apache Tomcat 5.5\Monitor Tomcat.lnk" \
-                 "$INSTDIR\bin\tomcat5w.exe" \
-                 '//MS//Tomcat5' \
-                 "$INSTDIR\tomcat.ico" 0 SW_SHOWNORMAL
-
-  CreateShortCut "$SMPROGRAMS\Apache Tomcat 5.5\Configure Tomcat.lnk" \
-                 "$INSTDIR\bin\tomcat5w.exe" \
-                 '//ES//Tomcat5' \
-                 "$INSTDIR\tomcat.ico" 0 SW_SHOWNORMAL
-
+  Call createShortcuts
 SectionEnd
 
 Section "Documentation" SecDocs
@@ -348,91 +326,174 @@ Section "Webapps" SecWebapps
 
 SectionEnd
 
-;Section "Compatibility" SecCompat
-;
-;  SetOutPath $INSTDIR
-;  File /oname=bin\jmx.jar ..\compat\bin\jmx.jar
-;  File /oname=common\endorsed\xercesImpl.jar 
..\compat\common\endorsed\xercesImpl.jar
-;  File /oname=common\endorsed\xml-apis.jar  
..\compat\common\endorsed\xml-apis.jar
-;
-;SectionEnd
-
 Section -post
-  nsExec::ExecToLog '"$INSTDIR\bin\tomcat5.exe" //US//Tomcat5 --Classpath 
"$INSTDIR\bin\bootstrap.jar" --StartClass org.apache.catalina.startup.Bootstrap 
--StopClass org.apache.catalina.startup.Bootstrap --StartParams start 
--StopParams stop  --StartMode jvm --StopMode jvm'
-  nsExec::ExecToLog '"$INSTDIR\bin\tomcat5.exe" //US//Tomcat5 --JvmOptions 
"-Dcatalina.home=$INSTDIR#-Dcatalina.base=$INSTDIR#-Djava.endorsed.dirs=$INSTDIR\common\endorsed#-Djava.io.tmpdir=$INSTDIR\temp#-Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager#-Djava.util.logging.config.file=$INSTDIR\conf\logging.properties"
 --StdOutput auto --StdError auto'
+  ${If} $ServiceInstallLog != ""
+    FileWrite $ServiceInstallLog '"$INSTDIR\bin\tomcat@VERSION_MAJOR@.exe" 
//US//Tomcat@VERSION_MAJOR@ --Classpath "$INSTDIR\bin\bootstrap.jar" 
--StartClass org.apache.catalina.startup.Bootstrap --StopClass 
org.apache.catalina.startup.Bootstrap --StartParams start --StopParams stop  
--StartMode jvm --StopMode jvm'
+    FileWrite $ServiceInstallLog "$\r$\n"
+    FileWrite $ServiceInstallLog '"$INSTDIR\bin\tomcat@VERSION_MAJOR@.exe" 
//US//Tomcat@VERSION_MAJOR@ --JvmOptions 
"-Dcatalina.home=$INSTDIR#-Dcatalina.base=$INSTDIR#-Djava.endorsed.dirs=$INSTDIR\common\endorsed#-Djava.io.tmpdir=$INSTDIR\temp#-Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager#-Djava.util.logging.config.file=$INSTDIR\conf\logging.properties"'
+    FileWrite $ServiceInstallLog "$\r$\n"
+    FileWrite $ServiceInstallLog '"$INSTDIR\bin\tomcat@VERSION_MAJOR@.exe" 
//US//Tomcat@VERSION_MAJOR@ --StdOutput auto --StdError auto'
+    FileWrite $ServiceInstallLog "$\r$\n"
+    FileClose $ServiceInstallLog
+  ${EndIf}
+
+  DetailPrint "Configuring Tomcat@VERSION_MAJOR@ service"
+  nsExec::ExecToLog '"$INSTDIR\bin\tomcat@VERSION_MAJOR@.exe" 
//US//Tomcat@VERSION_MAJOR@ --Classpath "$INSTDIR\bin\bootstrap.jar" 
--StartClass org.apache.catalina.startup.Bootstrap --StopClass 
org.apache.catalina.startup.Bootstrap --StartParams start --StopParams stop  
--StartMode jvm --StopMode jvm'
+  nsExec::ExecToLog '"$INSTDIR\bin\tomcat@VERSION_MAJOR@.exe" 
//US//Tomcat@VERSION_MAJOR@ --JvmOptions 
"-Dcatalina.home=$INSTDIR#-Dcatalina.base=$INSTDIR#-Djava.endorsed.dirs=$INSTDIR\common\endorsed#-Djava.io.tmpdir=$INSTDIR\temp#-Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager#-Djava.util.logging.config.file=$INSTDIR\conf\logging.properties"'
+  nsExec::ExecToLog '"$INSTDIR\bin\tomcat@VERSION_MAJOR@.exe" 
//US//Tomcat@VERSION_MAJOR@ --StdOutput auto --StdError auto'
 
   WriteUninstaller "$INSTDIR\Uninstall.exe"
 
-  WriteRegStr HKLM "SOFTWARE\Apache Software Foundation\Tomcat\5.5" 
"InstallPath" $INSTDIR
-  WriteRegStr HKLM "SOFTWARE\Apache Software Foundation\Tomcat\5.5" "Version" 
@VERSION@
-  WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Apache 
Tomcat 5.5" \
-                   "DisplayName" "Apache Tomcat 5.5 (remove only)"
-  WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Apache 
Tomcat 5.5" \
+  WriteRegStr HKLM "SOFTWARE\Apache Software 
Foundation\Tomcat\@VERSION_MAJOR_MINOR@" "InstallPath" $INSTDIR
+  WriteRegStr HKLM "SOFTWARE\Apache Software 
Foundation\Tomcat\@VERSION_MAJOR_MINOR@" "Version" @VERSION@
+  WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Apache 
Tomcat @VERSION_MAJOR_MINOR@" \
+                   "DisplayName" "Apache Tomcat @VERSION_MAJOR_MINOR@ (remove 
only)"
+  WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Apache 
Tomcat @VERSION_MAJOR_MINOR@" \
                    "UninstallString" '"$INSTDIR\Uninstall.exe"'
 
 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@"
+  ${GetParameters} $R0
+  ClearErrors
+
+  ${GetOptions} "$R0" "/?" $R1
+  ${IfNot} ${Errors}
+    MessageBox MB_OK|MB_ICONINFORMATION 'Available options:$\r$\n\
+               /S - Silent install.$\r$\n\
+               /D=INSTDIR - Specify installation directory.'
+    Abort
+  ${EndIf}
+  ClearErrors
 
-  ;Extract Install Options INI Files
-  !insertmacro MUI_INSTALLOPTIONS_EXTRACT "config.ini"
-  !insertmacro MUI_INSTALLOPTIONS_EXTRACT "jvm.ini"
+  StrCpy $ResetInstDir "$INSTDIR"
 
+  ;Initialize default values
+  StrCpy $JavaHome ""
+  StrCpy $TomcatPort "8080"
+  StrCpy $TomcatAdminEnable "0"
+  StrCpy $TomcatAdminUsername ""
+  StrCpy $TomcatAdminPassword ""
+  StrCpy $TomcatAdminRoles ""
 FunctionEnd
 
-Function SetChooseJVM
+Function pageChooseJVM
   !insertmacro MUI_HEADER_TEXT "$(TEXT_JVM_TITLE)" "$(TEXT_JVM_SUBTITLE)"
-  Call findJavaPath
-  Pop $3
-  !insertmacro MUI_INSTALLOPTIONS_WRITE "jvm.ini" "Field 2" "State" $3
-  !insertmacro MUI_INSTALLOPTIONS_DISPLAY "jvm.ini"
+  ${If} $JavaHome == ""
+    Call findJavaHome
+    Pop $JavaHome
+  ${EndIf}
+
+  nsDialogs::Create 1018
+  Pop $R0
+
+  ${NSD_CreateLabel} 0 5u 100% 25u "$(TEXT_JVM_LABEL1)"
+  Pop $R0
+  ${NSD_CreateDirRequest} 0 65u 280u 13u "$JavaHome"
+  Pop $CtlJavaHome
+  ${NSD_CreateBrowseButton} 282u 65u 15u 13u "..."
+  Pop $R0
+  ${NSD_OnClick} $R0 pageChooseJVM_onDirBrowse
+
+  ${NSD_SetFocus} $CtlJavaHome
+  nsDialogs::Show
+FunctionEnd
+
+; onClick function for button next to DirRequest control
+Function pageChooseJVM_onDirBrowse
+  ; R0 is HWND of the button, it is on top of the stack
+  Pop $R0
+
+  ${NSD_GetText} $CtlJavaHome $R1
+  nsDialogs::SelectFolderDialog "" "$R1"
+  Pop $R1
+
+  ${If} $R1 != "error"
+    ${NSD_SetText} $CtlJavaHome $R1
+  ${EndIf}
 FunctionEnd
 
-Function SetConfiguration
-  !insertmacro MUI_HEADER_TEXT "$(TEXT_CONF_TITLE)" "$(TEXT_CONF_SUBTITLE)"
+Function pageChooseJVMLeave
+  ${NSD_GetText} $CtlJavaHome $JavaHome
+  ${If} $JavaHome == ""
+    Abort
+  ${EndIf}
+
+  Call checkJava
+FunctionEnd
+
+; onLeave function for the COMPONENTS page
+; It updates options based on what components were selected.
+;
+Function pageComponentsLeave
+  StrCpy $TomcatAdminEnable "0"
+  StrCpy $TomcatAdminRoles ""
 
   SectionGetFlags ${SecManager} $0
   IntOp $0 $0 & ${SF_SELECTED}
-  IntCmp $0 0 0 Enable Enable
+  ${If} $0 <> 0
+    StrCpy $TomcatAdminEnable "1"
+    StrCpy $TomcatAdminRoles "manager"
+  ${EndIf}
+
   SectionGetFlags ${SecHostManager} $0
   IntOp $0 $0 & ${SF_SELECTED}
-  IntCmp $0 0 Disable 0 0
+  ${If} $0 <> 0
+    StrCpy $TomcatAdminEnable "1"
+    ${If} $TomcatAdminRoles != ""
+      StrCpy $TomcatAdminRoles "admin,$TomcatAdminRoles"
+    ${Else}
+      StrCpy $TomcatAdminRoles "admin"
+    ${EndIf}
+  ${EndIf}
+FunctionEnd
 
-Enable:
-  ; Enable the user and password controls if the manager or host-manager app is
-  ; being installed
-  !insertmacro MUI_INSTALLOPTIONS_READ $0 "config.ini" "Field 5" "HWND"
-  !insertmacro MUI_INSTALLOPTIONS_WRITE "config.ini" "Field 5" "Flags" ""
-  EnableWindow $0 1
-  !insertmacro MUI_INSTALLOPTIONS_READ $0 "config.ini" "Field 7" "HWND"
-  !insertmacro MUI_INSTALLOPTIONS_WRITE "config.ini" "Field 7" "Flags" ""
-  EnableWindow $0 1
-  Goto Display
-
-Disable:
-  ; Disable the user and password controls if neither the manager nor
-  ; host-manager app is being installed
-  !insertmacro MUI_INSTALLOPTIONS_READ $0 "config.ini" "Field 5" "HWND"
-  !insertmacro MUI_INSTALLOPTIONS_WRITE "config.ini" "Field 5" "Flags" 
"DISABLED"
-  EnableWindow $0 0
-  !insertmacro MUI_INSTALLOPTIONS_READ $0 "config.ini" "Field 7" "HWND"
-  !insertmacro MUI_INSTALLOPTIONS_WRITE "config.ini" "Field 7" "Flags" 
"DISABLED"
-  EnableWindow $0 0
-  ; Clear the values
-  !insertmacro MUI_INSTALLOPTIONS_WRITE "config.ini" "Field 5" "State" ""
-  !insertmacro MUI_INSTALLOPTIONS_WRITE "config.ini" "Field 7" "State" ""
+Function pageConfiguration
+  !insertmacro MUI_HEADER_TEXT "$(TEXT_CONF_TITLE)" "$(TEXT_CONF_SUBTITLE)"
 
-Display:
-  !insertmacro MUI_INSTALLOPTIONS_DISPLAY "config.ini"
+  nsDialogs::Create 1018
+  Pop $R0
 
-FunctionEnd
+  ${NSD_CreateLabel} 0 5u 100u 15u "$(TEXT_CONF_LABEL_PORT)"
+  Pop $R0
 
-Function Void
-FunctionEnd
+  ${NSD_CreateText} 150u 5u 50u 13u "$TomcatPort"
+  Pop $CtlTomcatPort
+  ${NSD_SetTextLimit} $CtlTomcatPort 5
+
+  ${If} $TomcatAdminEnable == "1"
+    ${NSD_CreateLabel} 0 30u 100% 15u "$(TEXT_CONF_LABEL_ADMIN)"
+    Pop $R0
+    ${NSD_CreateLabel} 10u 50u 140u 15u "$(TEXT_CONF_LABEL_ADMINUSERNAME)"
+    Pop $R0
+    ${NSD_CreateText} 150u 50u 110u 13u "$TomcatAdminUsername"
+    Pop $CtlTomcatAdminUsername
+    ${NSD_CreateLabel} 10u 70u 140u 15u "$(TEXT_CONF_LABEL_ADMINPASSWORD)"
+    Pop $R0
+    ${NSD_CreatePassword} 150u 70u 110u 13u "$TomcatAdminPassword"
+    Pop $CtlTomcatAdminPassword
+    ${NSD_CreateLabel} 10u 90u 140u 15u "$(TEXT_CONF_LABEL_ADMINROLES)"
+    Pop $R0
+    ${NSD_CreateText} 150u 90u 110u 13u "$TomcatAdminRoles"
+    Pop $CtlTomcatAdminRoles
+  ${EndIf}
+
+  ${NSD_SetFocus} $CtlTomcatPort
+  nsDialogs::Show
+FunctionEnd
+
+Function pageConfigurationLeave
+  ${NSD_GetText} $CtlTomcatPort $TomcatPort
+  ${If} $TomcatAdminEnable == "1"
+    ${NSD_GetText} $CtlTomcatAdminUsername $TomcatAdminUsername
+    ${NSD_GetText} $CtlTomcatAdminPassword $TomcatAdminPassword
+    ${NSD_GetText} $CtlTomcatAdminRoles $TomcatAdminRoles
+  ${EndIf}
+FunctionEnd
+
+; Not used
+;Function Void
+;FunctionEnd
 
 ;--------------------------------
 ;Descriptions
@@ -442,7 +503,6 @@ FunctionEnd
   !insertmacro MUI_DESCRIPTION_TEXT ${SecTomcatCore} $(DESC_SecTomcatCore)
   !insertmacro MUI_DESCRIPTION_TEXT ${SecTomcatService} 
$(DESC_SecTomcatService)
   !insertmacro MUI_DESCRIPTION_TEXT ${SecTomcatNative} $(DESC_SecTomcatNative)
-;  !insertmacro MUI_DESCRIPTION_TEXT ${SecCompat} $(DESC_SecCompat)
   !insertmacro MUI_DESCRIPTION_TEXT ${SecMenu} $(DESC_SecMenu)
   !insertmacro MUI_DESCRIPTION_TEXT ${SecDocs} $(DESC_SecDocs)
   !insertmacro MUI_DESCRIPTION_TEXT ${SecManager} $(DESC_SecManager)
@@ -453,32 +513,6 @@ FunctionEnd
 
 
 ; =====================
-; FindCpuType Function
-; =====================
-;
-; Find the CPU used on the system, and put the result on the top of the
-; stack
-;
-Function FindCpuType
-
-  ClearErrors
-  ; Default CPU is always x86
-  StrCpy $1 "x86"
-  ExpandEnvStrings $0 "%PROCESSOR_ARCHITEW6432%"
-  StrCmp $0 "%PROCESSOR_ARCHITEW6432%" +5 0
-  StrCmp $0 "IA64" 0 +3
-  StrCpy $1 "i64"
-  Goto FoundCpu
-  StrCpy $1 "x64"
-
-FoundCpu:
-  ; Put the result in the stack
-  Push $1
-
-FunctionEnd
-
-
-; =====================
 ; CheckUserType Function
 ; =====================
 ;
@@ -508,36 +542,135 @@ 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
+
+  ${If} $JavaHome == ""
+    ; E.g. if a silent install
+    Call findJavaHome
+    Pop $JavaHome
+  ${EndIf}
+
+  ${If} $JavaHome == ""
+  ${OrIfNot} ${FileExists} "$JavaHome\bin\java.exe"
+    IfSilent +2
+    MessageBox MB_OK|MB_ICONSTOP "No Java Virtual Machine found in 
folder:$\r$\n$JavaHome"
+    DetailPrint "No Java Virtual Machine found in folder:$\r$\n$JavaHome"
+    Quit
+  ${EndIf}
+
+  StrCpy "$JavaExe" "$JavaHome\bin\java.exe"
+
+  ; Need path to jvm.dll to configure the service - uses $JavaHome
+  Call findJVMPath
+  Pop $5
+  ${If} $5 == ""
+    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
+  ${EndIf}
+
+  StrCpy "$JvmDll" $5
+
+  ; Read PE header of JvmDll to check for architecture
+  ; 1. Jump to 0x3c and read offset of PE header
+  ; 2. Jump to offset. Read PE header signature. It must be 'PE'\0\0 (50 45 00 
00).
+  ; 3. The next word gives the machine type.
+  ; 0x014c: x86
+  ; 0x8664: x64
+  ; 0x0200: i64
+  ClearErrors
+  FileOpen $R1 "$JvmDll" r
+  IfErrors WrongPEHeader
+
+  FileSeek $R1 0x3c SET
+  FileReadByte $R1 $R2
+  FileReadByte $R1 $R3
+  IntOp $R3 $R3 << 8
+  IntOp $R2 $R2 + $R3
+
+  FileSeek $R1 $R2 SET
+  FileReadByte $R1 $R2
+  IntCmp $R2 0x50 +1 WrongPEHeader WrongPEHeader
+  FileReadByte $R1 $R2
+  IntCmp $R2 0x45 +1 WrongPEHeader WrongPEHeader
+  FileReadByte $R1 $R2
+  IntCmp $R2 0 +1 WrongPEHeader WrongPEHeader
+  FileReadByte $R1 $R2
+  IntCmp $R2 0 +1 WrongPEHeader WrongPEHeader
+
+  FileReadByte $R1 $R2
+  FileReadByte $R1 $R3
+  IntOp $R3 $R3 << 8
+  IntOp $R2 $R2 + $R3
+
+  IntCmp $R2 0x014c +1 +3 +3
+  StrCpy "$Arch" "x86"
+  Goto DonePEHeader
+
+  IntCmp $R2 0x8664 +1 +3 +3
+  StrCpy "$Arch" "x64"
+  Goto DonePEHeader
+
+  IntCmp $R2 0x0200 +1 +3 +3
+  StrCpy "$Arch" "i64"
+  Goto DonePEHeader
+
+WrongPEHeader:
+  IfSilent +2
+  MessageBox MB_OK|MB_ICONEXCLAMATION 'Cannot read PE header from 
"$JvmDll"$\r$\nWill assume that the architecture is x86.'
+  DetailPrint 'Cannot read PE header from "$JvmDll". Assuming the architecture 
is x86.'
+  StrCpy "$Arch" "x86"
+
+DonePEHeader:
+  FileClose $R1
+
+  DetailPrint 'Architecture: "$Arch"'
+
+  StrCpy $INSTDIR "$ResetInstDir"
+
+  ; The default varies depending on 32-bit or 64-bit
+  ${If} "$INSTDIR" == ""
+    ${If} $Arch == "x86"
+      StrCpy $INSTDIR "$PROGRAMFILES32\Apache Software Foundation\Tomcat 
@VERSION_MAJOR_MINOR@"
+    ${Else}
+      StrCpy $INSTDIR "$PROGRAMFILES64\Apache Software Foundation\Tomcat 
@VERSION_MAJOR_MINOR@"
+    ${EndIf}
+  ${EndIf}
+
+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
-
-  ;ClearErrors
-
-  ;ReadEnvStr $1 JAVA_HOME
-
-  ;IfErrors 0 FoundJDK
+Function findJavaHome
 
   ClearErrors
 
   ; Use the 64-bit registry on 64-bit machines
   ExpandEnvStrings $0 "%PROGRAMW6432%"
-  StrCmp $0 "%PROGRAMW6432%" +2 0
-  SetRegView 64
+  ${If} $0 != "%PROGRAMW6432%"
+    SetRegView 64
+  ${EndIf}
 
   ReadRegStr $2 HKLM "SOFTWARE\JavaSoft\Java Runtime Environment" 
"CurrentVersion"
   ReadRegStr $1 HKLM "SOFTWARE\JavaSoft\Java Runtime Environment\$2" "JavaHome"
   ReadRegStr $3 HKLM "SOFTWARE\JavaSoft\Java Runtime Environment\$2" 
"RuntimeLib"
 
-  ;FoundJDK:
-
   IfErrors 0 NoErrors
   StrCpy $1 ""
 
@@ -556,43 +689,43 @@ FunctionEnd
 ; ====================
 ;
 ; Find the full JVM path, and put the result on top of the stack
-; Argument: JVM base path (result of findJavaPath)
+; Implicit argument: $JavaHome
 ; Will return an empty string if the path cannot be determined
 ;
 Function findJVMPath
 
   ClearErrors
-  
+
   ;Step one: Is this a JRE path (Program Files\Java\XXX)
   StrCpy $1 "$JavaHome"
-  
+
   StrCpy $2 "$1\bin\hotspot\jvm.dll"
   IfFileExists "$2" FoundJvmDll
   StrCpy $2 "$1\bin\server\jvm.dll"
   IfFileExists "$2" FoundJvmDll
-  StrCpy $2 "$1\bin\client\jvm.dll"  
+  StrCpy $2 "$1\bin\client\jvm.dll"
   IfFileExists "$2" FoundJvmDll
   StrCpy $2 "$1\bin\classic\jvm.dll"
   IfFileExists "$2" FoundJvmDll
 
   ;Step two: Is this a JDK path (Program Files\XXX\jre)
   StrCpy $1 "$JavaHome\jre"
-  
+
   StrCpy $2 "$1\bin\hotspot\jvm.dll"
   IfFileExists "$2" FoundJvmDll
   StrCpy $2 "$1\bin\server\jvm.dll"
   IfFileExists "$2" FoundJvmDll
-  StrCpy $2 "$1\bin\client\jvm.dll"  
+  StrCpy $2 "$1\bin\client\jvm.dll"
   IfFileExists "$2" FoundJvmDll
   StrCpy $2 "$1\bin\classic\jvm.dll"
   IfFileExists "$2" FoundJvmDll
 
   ClearErrors
   ;Step tree: Read defaults from registry
-  
+
   ReadRegStr $1 HKLM "SOFTWARE\JavaSoft\Java Runtime Environment" 
"CurrentVersion"
   ReadRegStr $2 HKLM "SOFTWARE\JavaSoft\Java Runtime Environment\$1" 
"RuntimeLib"
-  
+
   IfErrors 0 FoundJvmDll
   StrCpy $2 ""
 
@@ -605,98 +738,84 @@ 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
 ; ==================
 ;
-; Display the configuration dialog boxes, read the values entered by the user,
-; and build the configuration files
+; Writes server.xml and tomcat-users.xml
 ;
 Function configure
-
-  !insertmacro MUI_INSTALLOPTIONS_READ $R0 "config.ini" "Field 2" "State"
-  !insertmacro MUI_INSTALLOPTIONS_READ $R1 "config.ini" "Field 5" "State"
-  !insertmacro MUI_INSTALLOPTIONS_READ $R2 "config.ini" "Field 7" "State"
-
-  IfSilent 0 +2
-  StrCpy $R0 '8080'
-
-  StrCpy $R4 'port="$R0"'
+  StrCpy $R4 'port="$TomcatPort"'
   StrCpy $R5 ''
 
-  IfSilent Silent 0
-
-  ; Escape XML
-  Push $R1
-  Call xmlEscape
-  Pop $R1
-  Push $R2
-  Call xmlEscape
-  Pop $R2
-
-  StrCmp $R1 "" +4 0  ; Blank user - do not add anything to tomcat-users.xml
-  StrCmp $R2 "" +3 0  ; Blank password - do not add anything to 
tomcat-users.xml
-  StrCpy $R5 '<user name="$R1" password="$R2" roles="admin,manager" />'
-  DetailPrint 'Admin user added: "$R1"'
-
-Silent:
-  DetailPrint 'HTTP/1.1 Connector configured on port "$R0"'
-
-  SetOutPath $TEMP
-  File /r confinstall
+  ${If} $TomcatAdminEnable == "1"
+  ${AndIf} "$TomcatAdminUsername" != ""
+  ${AndIf} "$TomcatAdminPassword" != ""
+  ${AndIf} "$TomcatAdminRoles" != ""
+    ; Escape XML
+    Push $TomcatAdminUsername
+    Call xmlEscape
+    Pop $R1
+    Push $TomcatAdminPassword
+    Call xmlEscape
+    Pop $R2
+    Push $TomcatAdminRoles
+    Call xmlEscape
+    Pop $R3
+    StrCpy $R5 '<user name="$R1" password="$R2" roles="$R3" />$\r$\n'
+    DetailPrint 'Admin user added: "$TomcatAdminUsername"'
+  ${EndIf}
+
+  DetailPrint 'HTTP/1.1 Connector configured on port "$TomcatPort"'
+
+  ; Extract these fragments to $PLUGINSDIR. That is a temporary directory,
+  ; that is automatically deleted when the installer exits.
+  InitPluginsDir
+  SetOutPath $PLUGINSDIR
+  File confinstall\server_1.xml
+  File confinstall\server_2.xml
+  File confinstall\tomcat-users_1.xml
+  File confinstall\tomcat-users_2.xml
 
   ; Build final server.xml
   Delete "$INSTDIR\conf\server.xml"
+  DetailPrint "Writing server.xml"
   FileOpen $R9 "$INSTDIR\conf\server.xml" w
 
-  Push "$TEMP\confinstall\server_1.xml"
+  Push "$PLUGINSDIR\server_1.xml"
   Call copyFile
   FileWrite $R9 $R4
-  Push "$TEMP\confinstall\server_2.xml"
+  Push "$PLUGINSDIR\server_2.xml"
   Call copyFile
 
   FileClose $R9
-
   DetailPrint "server.xml written"
 
   ; Build final tomcat-users.xml
-  
   Delete "$INSTDIR\conf\tomcat-users.xml"
+  DetailPrint "Writing tomcat-users.xml"
   FileOpen $R9 "$INSTDIR\conf\tomcat-users.xml" w
-
-  Push "$TEMP\confinstall\tomcat-users_1.xml"
+  ; File will be written using current windows codepage
+  System::Call 'Kernel32::GetACP() i .r18'
+  ${If} $R8 == "932"
+    ; Special case where Java uses non-standard name for character set
+    FileWrite $R9 "<?xml version='1.0' encoding='ms$R8'?>$\r$\n"
+  ${Else}
+    FileWrite $R9 "<?xml version='1.0' encoding='cp$R8'?>$\r$\n"
+  ${EndIf}
+  Push "$PLUGINSDIR\tomcat-users_1.xml"
   Call copyFile
   FileWrite $R9 $R5
-  Push "$TEMP\confinstall\tomcat-users_2.xml"
+  Push "$PLUGINSDIR\tomcat-users_2.xml"
   Call copyFile
 
   FileClose $R9
-
   DetailPrint "tomcat-users.xml written"
 
-  RMDir /r "$TEMP\confinstall"
-
+  Delete "$PLUGINSDIR\server_1.xml"
+  Delete "$PLUGINSDIR\server_2.xml"
+  Delete "$PLUGINSDIR\tomcat-users_1.xml"
+  Delete "$PLUGINSDIR\tomcat-users_2.xml"
 FunctionEnd
 
 
@@ -741,25 +860,77 @@ Function copyFile
 FunctionEnd
 
 
+; =================
+; createShortcuts Function
+; =================
+;
+; This is called by the SecMenu section.
+;
+; The code is moved here, because ${SecManager} etc. are not visible
+; in SecMenu, because they are defined lower than it.
+;
+Function createShortcuts
+
+  SetOutPath "$SMPROGRAMS\Apache Tomcat @VERSION_MAJOR_MINOR@"
+
+  CreateShortCut "$SMPROGRAMS\Apache Tomcat @VERSION_MAJOR_MINOR@\Tomcat Home 
Page.lnk" \
+                 "http://tomcat.apache.org/";
+
+  CreateShortCut "$SMPROGRAMS\Apache Tomcat @VERSION_MAJOR_MINOR@\Welcome.lnk" 
\
+                 "http://127.0.0.1:$TomcatPort/";
+
+  ${If} ${SectionIsSelected} ${SecManager}
+    CreateShortCut "$SMPROGRAMS\Apache Tomcat @VERSION_MAJOR_MINOR@\Tomcat 
Manager.lnk" \
+                   "http://127.0.0.1:$TomcatPort/manager/html";
+  ${EndIf}
+
+  ${If} ${SectionIsSelected} ${SecHostManager}
+    CreateShortCut "$SMPROGRAMS\Apache Tomcat @VERSION_MAJOR_MINOR@\Tomcat 
Host Manager.lnk" \
+                   "http://127.0.0.1:$TomcatPort/host-manager/html";
+  ${EndIf}
+
+  ${If} ${SectionIsSelected} ${SecDocs}
+    CreateShortCut "$SMPROGRAMS\Apache Tomcat @VERSION_MAJOR_MINOR@\Tomcat 
Documentation.lnk" \
+                   "$INSTDIR\webapps\tomcat-docs\index.html"
+  ${EndIf}
+
+  CreateShortCut "$SMPROGRAMS\Apache Tomcat @VERSION_MAJOR_MINOR@\Uninstall 
Tomcat @VERSION_MAJOR_MINOR@.lnk" \
+                 "$INSTDIR\Uninstall.exe"
+
+  CreateShortCut "$SMPROGRAMS\Apache Tomcat @VERSION_MAJOR_MINOR@\Tomcat 
@VERSION_MAJOR_MINOR@ Program Directory.lnk" \
+                 "$INSTDIR"
+
+  CreateShortCut "$SMPROGRAMS\Apache Tomcat @VERSION_MAJOR_MINOR@\Monitor 
Tomcat.lnk" \
+                 "$INSTDIR\bin\tomcat@version_ma...@w.exe" \
+                 '//MS//Tomcat@VERSION_MAJOR@' \
+                 "$INSTDIR\tomcat.ico" 0 SW_SHOWNORMAL
+
+  CreateShortCut "$SMPROGRAMS\Apache Tomcat @VERSION_MAJOR_MINOR@\Configure 
Tomcat.lnk" \
+                 "$INSTDIR\bin\tomcat@version_ma...@w.exe" \
+                 '//ES//Tomcat@VERSION_MAJOR@' \
+                 "$INSTDIR\tomcat.ico" 0 SW_SHOWNORMAL
+
+FunctionEnd
+
 ;--------------------------------
 ;Uninstaller Section
 
 Section Uninstall
 
-  Delete "$INSTDIR\modern.exe"
   Delete "$INSTDIR\Uninstall.exe"
 
   ; Stop Tomcat service monitor if running
-  nsExec::ExecToLog '"$INSTDIR\bin\tomcat5w.exe" //MQ//Tomcat5'
+  DetailPrint "Stopping Tomcat@VERSION_MAJOR@ service monitor"
+  nsExec::ExecToLog '"$INSTDIR\bin\tomcat@version_ma...@w.exe" 
//MQ//Tomcat@VERSION_MAJOR@'
   ; Delete Tomcat service
-  nsExec::ExecToLog '"$INSTDIR\bin\tomcat5.exe" //DS//Tomcat5'
+  DetailPrint "Uninstalling Tomcat@VERSION_MAJOR@ service"
+  nsExec::ExecToLog '"$INSTDIR\bin\tomcat@VERSION_MAJOR@.exe" 
//DS//Tomcat@VERSION_MAJOR@'
   ClearErrors
 
-  DeleteRegKey HKCR "JSPFile"
-  DeleteRegKey HKLM 
"Software\Microsoft\Windows\CurrentVersion\Uninstall\Apache Tomcat 5.5"
-  DeleteRegKey HKLM "SOFTWARE\Apache Software Foundation\Tomcat\5.5"
+  DeleteRegKey HKLM 
"Software\Microsoft\Windows\CurrentVersion\Uninstall\Apache Tomcat 
@VERSION_MAJOR_MINOR@"
+  DeleteRegKey HKLM "SOFTWARE\Apache Software 
Foundation\Tomcat\@VERSION_MAJOR_MINOR@"
   DeleteRegValue HKLM "Software\Microsoft\Windows\CurrentVersion\Run" 
"ApacheTomcatMonitor"
-  RMDir /r "$SMPROGRAMS\Apache Tomcat 5.5"
+  RMDir /r "$SMPROGRAMS\Apache Tomcat @VERSION_MAJOR_MINOR@"
   Delete "$INSTDIR\tomcat.ico"
   Delete "$INSTDIR\LICENSE"
   Delete "$INSTDIR\NOTICE"
@@ -782,16 +953,18 @@ Section Uninstall
   IfSilent Removed 0
 
   ; if $INSTDIR was removed, skip these next ones
-  IfFileExists "$INSTDIR" 0 Removed 
+  IfFileExists "$INSTDIR" 0 Removed
     MessageBox MB_YESNO|MB_ICONQUESTION \
-      "Remove all files in your Tomcat 5.5 directory? (If you have anything  \
+      "Remove all files in your Tomcat @VERSION_MAJOR_MINOR@ directory? (If 
you have anything  \
  you created that you want to keep, click No)" IDNO Removed
-    RMDir /r "$INSTDIR\webapps\ROOT" ; this would be skipped if the user hits 
no
-    RMDir "$INSTDIR\webapps"
-    Delete "$INSTDIR\*.*" 
+    ; these would be skipped if the user hits no
+    RMDir /r "$INSTDIR\webapps"
+    RMDir /r "$INSTDIR\logs"
+    RMDir /r "$INSTDIR\conf"
+    Delete "$INSTDIR\*.*"
     RMDir /r "$INSTDIR"
     Sleep 500
-    IfFileExists "$INSTDIR" 0 Removed 
+    IfFileExists "$INSTDIR" 0 Removed
       MessageBox MB_OK|MB_ICONEXCLAMATION \
                  "Note: $INSTDIR could not be removed."
   Removed:

Modified: tomcat/tc5.5.x/trunk/container/webapps/docs/changelog.xml
URL: 
http://svn.apache.org/viewvc/tomcat/tc5.5.x/trunk/container/webapps/docs/changelog.xml?rev=1066549&r1=1066548&r2=1066549&view=diff
==============================================================================
--- tomcat/tc5.5.x/trunk/container/webapps/docs/changelog.xml (original)
+++ tomcat/tc5.5.x/trunk/container/webapps/docs/changelog.xml Wed Feb  2 
17:54:36 2011
@@ -45,6 +45,16 @@
       <fix>
         Fix permissions of version.sh in bin tarball. (rjung)
       </fix>
+      <update>
+        Numerous improvements to the Windows installer: update 
install/uninstall
+        icons, create an installation log, allow 32-bit JVMs to be selected 
when
+        installing on a 64-bit platform, replace the .ini files with the script
+        equivalents, use the new manager and host-manager roles, provide the
+        ability to edit the roles for the added user, add support for the
+        <code>/?</code> command line switch, clean up fully after installation,
+        add DetailPrint statements for operations that may take time and
+        improve the descriptions of the components. (kkolinko, mturk, markt)
+      </update>
     </changelog>
   </subsection>
   <subsection name="Catalina">



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

Reply via email to