os/win32/installer/install.nsi
branch0.5
changeset 5453 61bfaa6036eb
parent 5449 b5b26de8e06a
child 5454 26572e97b611
--- a/os/win32/installer/install.nsi	Tue Feb 27 15:19:36 2007 +0000
+++ b/os/win32/installer/install.nsi	Tue Feb 27 15:29:11 2007 +0000
@@ -1,8 +1,11 @@
-; Define your application name
-!define APPNAME "OpenTTD"
-!define APPNAMEANDVERSION "OpenTTD 0.5.0.0"
-!define APPVERSION "0.5.0.0"
-!define INSTALLERVERSION 28 ;NEED TO UPDATE THIS FOR EVERY RELEASE!!!
+!define APPNAME "OpenTTD"   ; Define application name
+!define APPVERSION "0.5.0"  ; Define application version
+!define INSTALLERVERSION 28 ; NEED TO UPDATE THIS FOR EVERY RELEASE!!!
+
+!define APPURLLINK "http://www.openttd.org"
+!define APPNAMEANDVERSION "${APPNAME} ${APPVERSION}"
+!define APPVERSIONINTERNAL "${APPVERSION}.0" ; Needs to be of the format X.X.X.X
+
 !define MUI_ICON "..\..\..\openttd.ico"
 !define MUI_UNICON "..\..\..\openttd.ico"
 !define MUI_WELCOMEFINISHPAGE_BITMAP "welcome.bmp"
@@ -14,7 +17,7 @@
 
 ; Version Info
 Var AddWinPrePopulate
-VIProductVersion "${APPVERSION}"
+VIProductVersion "${APPVERSIONINTERNAL}"
 VIAddVersionKey "ProductName" "OpenTTD Installer"
 VIAddVersionKey "Comments" "Installs ${APPNAMEANDVERSION}"
 VIAddVersionKey "CompanyName" "OpenTTD Developers"
@@ -44,18 +47,17 @@
 !define MUI_ABORTWARNING
 
 !insertmacro MUI_PAGE_WELCOME
-LicenseForceSelection radiobuttons "I &accept this Agreement" "I &do not accept this agreement"
 
+!define MUI_LICENSEPAGE_RADIOBUTTONS
+!insertmacro MUI_DEFAULT MUI_LICENSEPAGE_RADIOBUTTONS_TEXT_ACCEPT "I &accept this agreement"
+!insertmacro MUI_DEFAULT MUI_LICENSEPAGE_RADIOBUTTONS_TEXT_DECLINE "I &do not accept this agreement"
 !insertmacro MUI_PAGE_LICENSE "..\..\..\COPYING"
 
-;--------------------------------
-; Rest of pages
 !insertmacro MUI_PAGE_COMPONENTS
 
-
-;--------------------------------
-; New custom page for finding CD
-Page custom SelectCD SelectCD2 ": TTD folder"
+;---------------------------------
+; Custom page for finding TTDLX CD
+Page custom SelectCDEnter SelectCDExit ": TTD folder"
 
 !insertmacro MUI_PAGE_DIRECTORY
 
@@ -69,9 +71,13 @@
 
 !insertmacro MUI_PAGE_INSTFILES
 
-!define MUI_FINISHPAGE_RUN "$INSTDIR\OpenTTD.exe"
+;-----------------------------------------------------
+; New custom page to show UNICODE and MSLU information
+Page custom ShowWarningsPage
+
+!define MUI_FINISHPAGE_RUN "$INSTDIR\openttd.exe"
 !define MUI_FINISHPAGE_LINK "Visit OpenTTD's homepage"
-!define MUI_FINISHPAGE_LINK_LOCATION "http://www.openttd.org/"
+!define MUI_FINISHPAGE_LINK_LOCATION "${APPURLLINK}"
 !define MUI_FINISHPAGE_NOREBOOTSUPPORT
 !define MUI_FINISHPAGE_SHOWREADME "$INSTDIR\readme.txt"
 !define MUI_FINISHPAGE_SHOWREADME_NOTCHECKED
@@ -84,64 +90,63 @@
 !insertmacro MUI_LANGUAGE "English"
 !insertmacro MUI_RESERVEFILE_LANGDLL
 
-;--------------------------------
-; Sections
+;--------------------------------------------------------------
+; (Core) OpenTTD install section. Copies all internal game data
 Section "!OpenTTD" Section1
-
-	; Set Section properties
+	; Overwrite files by default, but don't complain on failure
 	SetOverwrite try
 
 	; Make savegame folder
 	SetOutPath "$INSTDIR\save"
-	; define root variable relative to installer
+	; Define root variable relative to installer
 	!define PATH_ROOT "..\..\..\"
 
 	; Copy language files
-  SetOutPath "$INSTDIR\lang\"
-  File ${PATH_ROOT}lang\*.lng
-  File ${PATH_ROOT}lang\english.txt
+	SetOutPath "$INSTDIR\lang\"
+	File ${PATH_ROOT}lang\*.lng
+	File ${PATH_ROOT}lang\english.txt
 
 	; Copy data files
 	SetOutPath "$INSTDIR\data\"
 	File ${PATH_ROOT}data\*.grf
 	File ${PATH_ROOT}data\opntitle.dat
-  ; Copy scenario files
+	; Copy scenario files (don't choke if they don't exist)
 	SetOutPath "$INSTDIR\scenario\"
-  File ${PATH_ROOT}scenario\*.scn
+	File /nonfatal ${PATH_ROOT}scenario\*.scn
 
 	; Copy the rest of the stuff
 	SetOutPath "$INSTDIR\"
 
-	;Copy text files
-  File ${PATH_ROOT}changelog.txt
-  File ${PATH_ROOT}COPYING
-  File ${PATH_ROOT}readme.txt
-  File ${PATH_ROOT}known-bugs.txt
+	; Copy text files
+	File ${PATH_ROOT}changelog.txt
+	File ${PATH_ROOT}COPYING
+	File ${PATH_ROOT}readme.txt
+	File ${PATH_ROOT}known-bugs.txt
 
 	; Copy executable
-	File /oname=OpenTTD.exe        ${PATH_ROOT}Release\openttd.exe
+	File /oname=openttd.exe ${PATH_ROOT}Release\openttd.exe
 	File ${PATH_ROOT}strgen\Debug\strgen.exe
 
 
-  ; Delete old files from the main dir. they are now placed in data/ and lang/
+	; Delete old files from the main dir. they are now placed in data/ and lang/
 	Delete "$INSTDIR\*.lng"
 	Delete "$INSTDIR\*.grf"
 	Delete "$INSTDIR\sample.cat"
 	Delete "$INSTDIR\ttd.exe"
 
 
-	;Creates the Registry Entries
-	WriteRegStr HKEY_LOCAL_MACHINE "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\OpenTTD" "Comments" "Visit http://www.openttd.org"
+	; Create the Registry Entries
+	WriteRegStr HKEY_LOCAL_MACHINE "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\OpenTTD" "Comments" "Visit ${APPURLLINK}"
 	WriteRegStr HKEY_LOCAL_MACHINE "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\OpenTTD" "DisplayIcon" "$INSTDIR\openttd.exe,0"
 	WriteRegStr HKEY_LOCAL_MACHINE "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\OpenTTD" "DisplayName" "OpenTTD ${APPVERSION}"
 	WriteRegStr HKEY_LOCAL_MACHINE "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\OpenTTD" "DisplayVersion" "${APPVERSION}"
-	WriteRegStr HKEY_LOCAL_MACHINE "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\OpenTTD" "HelpLink" "http://www.openttd.org"
+	WriteRegStr HKEY_LOCAL_MACHINE "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\OpenTTD" "HelpLink" "${APPURLLINK}"
 	WriteRegStr HKEY_LOCAL_MACHINE "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\OpenTTD" "Install Folder" "$INSTDIR"
 	WriteRegStr HKEY_LOCAL_MACHINE "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\OpenTTD" "Publisher" "OpenTTD"
 	WriteRegStr HKEY_LOCAL_MACHINE "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\OpenTTD" "Shortcut Folder" "$SHORTCUTS"
 	WriteRegStr HKEY_LOCAL_MACHINE "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\OpenTTD" "UninstallString" "$INSTDIR\uninstall.exe"
-	WriteRegStr HKEY_LOCAL_MACHINE "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\OpenTTD" "URLInfoAbout" "http://www.openttd.org"
-	;This key sets the Version DWORD that patches will check against
+	WriteRegStr HKEY_LOCAL_MACHINE "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\OpenTTD" "URLInfoAbout" "${APPURLLINK}"
+	; This key sets the Version DWORD that new installers will check against
 	WriteRegDWORD HKEY_LOCAL_MACHINE "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\OpenTTD" "Version" ${INSTALLERVERSION}
 
 	!insertmacro MUI_STARTMENU_WRITE_BEGIN "OpenTTD"
@@ -155,11 +160,12 @@
 	!insertmacro MUI_STARTMENU_WRITE_END
 SectionEnd
 
+;----------------------------------------------------------------------------------
+; TTDLX files install section. Copies all needed TTDLX files from CD or install dir
 Section "Copy Game Graphics" Section2
-	; Include files from CD
-	;Let's copy the files from the CD
+	; Let's copy the files with size approximation
 	SetOutPath "$INSTDIR\gm"
-	CopyFiles "$CDDRIVE\gm\*.gm" "$INSTDIR\gm\"
+	CopyFiles "$CDDRIVE\gm\*.gm" "$INSTDIR\gm\" 1028
 	SetOutPath "$INSTDIR\data\"
 	CopyFiles "$CDDRIVE\sample.cat" "$INSTDIR\data\sample.cat" 1566
 	; Copy Windows files
@@ -177,7 +183,8 @@
 	SetOutPath "$INSTDIR\"
 SectionEnd
 
-;----------------------
+;-------------------------------------------
+; Install the uninstaller (option is hidden)
 Section -FinishSection
 	WriteUninstaller "$INSTDIR\uninstall.exe"
 SectionEnd
@@ -188,25 +195,30 @@
 	!insertmacro MUI_DESCRIPTION_TEXT ${Section2} "Copies the game graphics. Requires TTD (for Windows)."
 !insertmacro MUI_FUNCTION_DESCRIPTION_END
 
-;!undef SHORTCUTS
-;Uninstall section
-
-Section Uninstall
-	MessageBox MB_YESNOCANCEL|MB_ICONQUESTION "Would you like to remove the Saved Game Folders located at '$INSTDIR\Save?'  If you choose Yes, your Saved Games will be removed." IDYES RemoveSavedGames IDNO NoRemoveSavedGames
+;-----------------------------------------------
+; Uninstall section, deletes all installed files
+Section "Uninstall"
+	MessageBox MB_YESNO|MB_ICONQUESTION \
+		"Remove the save game folders located at $\"$INSTDIR\save?$\"$\n \
+		If you choose Yes, your saved games will be deleted." \
+		IDYES RemoveSavedGames IDNO NoRemoveSavedGames
 	RemoveSavedGames:
-		Delete "$INSTDIR\Save\AutoSave\*"
-		RMDir "$INSTDIR\Save\AutoSave"
-		Delete "$INSTDIR\Save\*"
-		RMDir "$INSTDIR\Save"
+		Delete "$INSTDIR\save\autosave\*"
+		RMDir "$INSTDIR\save\autosave"
+		Delete "$INSTDIR\save\*"
+		RMDir "$INSTDIR\save"
 	NoRemoveSavedGames:
 
-	MessageBox MB_YESNOCANCEL|MB_ICONQUESTION "Would you like to remove the Scenario Folders located at '$INSTDIR\Scenario?'  If you choose Yes, your Scenarios will be removed." IDYES RemoveScen IDNO NoRemoveScen
+	MessageBox MB_YESNO|MB_ICONQUESTION \
+		"Remove the scenario folders located at $\"$INSTDIR\scenario?$\"$\n \
+		If you choose Yes, your scenarios will be deleted." \
+		IDYES RemoveScen IDNO NoRemoveScen
 	RemoveScen:
-		Delete "$INSTDIR\Scenario\*"
-		RMDir "$INSTDIR\Scenario"
+		Delete "$INSTDIR\scenario\*"
+		RMDir "$INSTDIR\scenario"
 	NoRemoveScen:
 
-	;Remove from registry...
+	; Remove from registry...
 	!insertmacro MUI_STARTMENU_GETFOLDER "OpenTTD" $SHORTCUTS
 	ReadRegStr $SHORTCUTS HKEY_LOCAL_MACHINE "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\OpenTTD" "Shortcut Folder"
 
@@ -239,12 +251,17 @@
 
 	; Data files
 	Delete "$INSTDIR\data\opntitle.dat"
+
+	Delete "$INSTDIR\data\2ccmap.grf"
+	Delete "$INSTDIR\data\airports.grf"
+	Delete "$INSTDIR\data\autorail.grf"
+	Delete "$INSTDIR\data\canalsw.grf"
+	Delete "$INSTDIR\data\dosdummy.grf"
+	Delete "$INSTDIR\data\elrailsw.grf"
 	Delete "$INSTDIR\data\nsignalsw.grf"
 	Delete "$INSTDIR\data\openttd.grf"
-	Delete "$INSTDIR\data\canalsw.grf"
 	Delete "$INSTDIR\data\trkfoundw.grf"
-	Delete "$INSTDIR\data\autorail.grf"
-	Delete "$INSTDIR\data\dosdummy.grf"
+
 	Delete "$INSTDIR\data\sample.cat"
 	; Windows Data files
 	Delete "$INSTDIR\data\trg1r.grf"
@@ -259,10 +276,10 @@
 	Delete "$INSTDIR\data\trgc.grf"
 	Delete "$INSTDIR\data\trgi.grf"
 
-	;Music
+	; Music
 	Delete "$INSTDIR\gm\*.gm"
 
-	;Language files
+	; Language files
 	Delete "$INSTDIR\lang\*.lng"
 	Delete "$INSTDIR\lang\english.txt"
 
@@ -273,89 +290,145 @@
 	RMDir "$INSTDIR\lang"
 	RMDir "$INSTDIR\data"
 	RMDir "$INSTDIR"
+
 SectionEnd
 
-Function SelectCD
+;------------------------------------------------------------
+; Custom page function to find the TTDLX CD/install location
+Function SelectCDEnter
 	SectionGetFlags ${Section2} $0
 	IntOp $1 $0 & 0x80 ; bit 7 set by upgrade, no need to copy files
-	IntCmp $1 1 DoneCD ;upgrade doesn't need copy files
+	IntCmp $1 1 DoneCD ; Upgrade doesn't need copy files
 
 	IntOp $0 $0 & 1
 	IntCmp $0 1 NoAbort
-		Abort
+	Abort
 NoAbort:
 
 	GetTempFileName $R0
 	!insertmacro MUI_HEADER_TEXT "Locate TTD" "Setup needs the location of Transport Tycoon Deluxe in order to continue."
-	File /oname=$R0 CDFinder.ini
+	!insertmacro MUI_INSTALLOPTIONS_EXTRACT_AS "CDFinder.ini" "CDFinder"
+
 	ClearErrors
-	;Now, let's populate $CDDRIVE
+	; Now, let's populate $CDDRIVE
 	ReadRegStr $CDDRIVE HKLM "SOFTWARE\Fish Technology Group\Transport Tycoon Deluxe" "HDPath"
 	IfErrors NoTTD
-	StrCpy $AddWinPrePopulate "Setup has detected your TTD folder.  Don't change the folder.  Simply press Next."
+	StrCpy $AddWinPrePopulate "Setup has detected your TTD folder. Don't change the folder. Simply press Next."
+	!insertmacro MUI_INSTALLOPTIONS_WRITE "CDFinder" "Field 2" "State" $CDDRIVE          ; TTDLX path
 	Goto TruFinish
 NoTTD:
-	StrCpy $CDDRIVE ""
-	StrCpy $AddWinPrePopulate "Setup couldn't find TTD.  Please enter the path where the graphics files from TTD are stored and press Next to continue."
+	StrCpy $AddWinPrePopulate "Setup couldn't find TTD. Please enter the path where the graphics files from TTD are stored and press Next to continue."
 TruFinish:
 	ClearErrors
-	WriteINIStr $R0 "Field 2" "State" $CDDRIVE
-	WriteINIStr $R0 "Field 3" "Text" $AddWinPrePopulate
+	!insertmacro MUI_INSTALLOPTIONS_WRITE "CDFinder" "Field 3" "Text" $AddWinPrePopulate ; Caption
 DoneCD:
-	InstallOptions::dialog $R0
-	Pop $R1
+	; Initialize the dialog *AFTER* we've changed the text otherwise we won't see the changes
+	!insertmacro MUI_INSTALLOPTIONS_INITDIALOG "CDFinder"
+	!insertmacro MUI_INSTALLOPTIONS_SHOW
 FunctionEnd
 
-; Exit from page function
-Function SelectCD2
-	ReadINIStr $CDDRIVE $R0 "Field 2" "State"
-	IfFileExists $CDDRIVE\trgir.grf hasCD ""
-	IfFileExists $CDDRIVE\TRGI.GRF hasCD ""
-	IfFileExists $CDDRIVE\sample.cat "" NoCD
+;----------------------------------------------------------------
+; Custom page function when 'next' is selected for the TTDLX path
+Function SelectCDExit
+	!insertmacro MUI_INSTALLOPTIONS_READ $CDDRIVE "CDFinder" "Field 2" "State"
+	; If trg1r.grf does not exist at the path, retry with DOS version
+	IfFileExists $CDDRIVE\trg1r.grf "" DosCD
+	IfFileExists $CDDRIVE\trgir.grf "" NoCD
+	IfFileExists $CDDRIVE\sample.cat hasCD NoCD
+DosCD:
+	IfFileExists $CDDRIVE\TRG1.GRF "" NoCD
+	IfFileExists $CDDRIVE\TRGI.GRF "" NoCD
+	IfFileExists $CDDRIVE\SAMPLE.CAT hasCD NoCD
 NoCD:
-  MessageBox MB_OK "Setup cannot continue without the Transport Tycoon Deluxe Location!"
-  Abort
+	MessageBox MB_OK "Setup cannot continue without the Transport Tycoon Deluxe Location!"
+	Abort
 hasCD:
 FunctionEnd
 
+;---------------------------------------------------------------------
+; Custom page function to show notices for running OpenTTD
+; We have extracted this custom page as Notice in the .onInit function
+Function ShowWarningsPage
+	!insertmacro MUI_HEADER_TEXT "Installation Complete" "Important notices for OpenTTD usage."
+	!insertmacro MUI_INSTALLOPTIONS_EXTRACT_AS "notice.ini" "Notice"
+	!insertmacro MUI_INSTALLOPTIONS_INITDIALOG "Notice"
+
+	Call GetWindowsVersion
+	Pop $R0
+
+	; Hide the MSLU text if the installer is not run on Win9x systems
+	StrCmp $R0 "winnt" 0 Win9x
+	!insertmacro MUI_INSTALLOPTIONS_READ $R1 "Notice" "Field 1" "HWND" ; MSLU groupbox
+	ShowWindow $R1 0
+	!insertmacro MUI_INSTALLOPTIONS_READ $R1 "Notice" "Field 2" "HWND" ; MSLU text
+	ShowWindow $R1 0
+	!insertmacro MUI_INSTALLOPTIONS_READ $R1 "Notice" "Field 3" "HWND" ; MSLU link
+	ShowWindow $R1 0
+Win9x:
+	ClearErrors
+	!insertmacro MUI_INSTALLOPTIONS_SHOW
+FunctionEnd
+
+;-------------------------------------------------------------------------------
+; Determine windows version, returns "win9x" if Win9x/Me or "winnt" on the stack
+Function GetWindowsVersion
+	ClearErrors
+	StrCpy $R0 "winnt"
+
+	ReadRegStr $R1 HKLM "SOFTWARE\MICROSOFT\WINDOWS NT\CurrentVersion" CurrentVersion
+	IfErrors 0 WinNT
+	StrCpy $R0 "win9x"
+WinNT:
+	ClearErrors
+	Push $R0
+FunctionEnd
 
 Var OLDVERSION
 Var UninstallString
 
+;-----------------------------------------------------------------------------------
+; NSIS Initialize function, determin if we are going to install/upgrade or uninstall
 Function .onInit
 	StrCpy $SHORTCUTS "OpenTTD"
 
 	SectionSetFlags 0 17
 
-	;Starts Setup - let's look for an older version of OpenTTD
+	; Starts Setup - let's look for an older version of OpenTTD
 	ReadRegDWORD $R8 HKLM "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\OpenTTD" "Version"
 
 	IfErrors ShowWelcomeMessage ShowUpgradeMessage
 ShowWelcomeMessage:
 	ReadRegStr $R8 HKLM "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\OpenTTD" "Version"
-	;In the event someone still has OpenTTD 0.1, this will detect that (that installer used a string instead of dword entry)
+	; In the event someone still has OpenTTD 0.1, this will detect that (that installer used a string instead of dword entry)
 	IfErrors FinishCallback
 
 ShowUpgradeMessage:
 	IntCmp ${INSTALLERVERSION} $R8 VersionsAreEqual InstallerIsOlder  WelcomeToSetup
 WelcomeToSetup:
-	;An older version was found.  Let's let the user know there's an upgrade that will take plce.
+	; An older version was found.  Let's let the user know there's an upgrade that will take place.
 	ReadRegStr $OLDVERSION HKEY_LOCAL_MACHINE "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\OpenTTD" "DisplayVersion"
-	;Gets the older version then displays it in a message box
-	MessageBox MB_OK|MB_ICONINFORMATION "Welcome to ${APPNAMEANDVERSION} Setup.$\n$\nThis will allow you to upgrade from version $OLDVERSION."
+	; Gets the older version then displays it in a message box
+	MessageBox MB_OK|MB_ICONINFORMATION \
+		"Welcome to ${APPNAMEANDVERSION} Setup.$\n \
+		This will allow you to upgrade from version $OLDVERSION."
 	SectionSetFlags ${Section2} 0x80 ; set bit 7
 	Goto FinishCallback
 
 VersionsAreEqual:
 	ReadRegStr $UninstallString HKEY_LOCAL_MACHINE "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\OpenTTD" "UninstallString"
 	IfFileExists "$UninstallString" "" FinishCallback
-	MessageBox MB_YESNO|MB_ICONQUESTION "Setup detected ${APPNAMEANDVERSION} on your system. That's the version this program will install.$\n$\nAre you trying to uninstall it?" IDYES DoUninstall IDNO FinishCallback
-DoUninstall: ;You have the same version as this installer.  This allows you to uninstall.
+	MessageBox MB_YESNO|MB_ICONQUESTION \
+		"Setup detected ${APPNAMEANDVERSION} on your system. That's the version this program will install.$\n \
+		Are you trying to uninstall it?" \
+		IDYES DoUninstall IDNO FinishCallback
+DoUninstall: ; You have the same version as this installer.  This allows you to uninstall.
 	Exec "$UninstallString"
 	Quit
 
 InstallerIsOlder:
-	MessageBox MB_OK|MB_ICONSTOP "You have a newer version of ${APPNAME}.$\n$\nSetup will now exit."
+	MessageBox MB_OK|MB_ICONSTOP \
+		"You have a newer version of ${APPNAME}.$\n \
+		Setup will now exit."
 	Quit
 
 FinishCallback: