Installer Improvements:

* installer will automatically version itself to the svn checkout
 * default installation folder, filenames, and links all contain the revision number now.
 * Plugins are optionally included into the package (details in txt)
 * VC++ Redist detection: the Redist installer is only extracted/invoked if it's not already installed.

git-svn-id: http://pcsx2.googlecode.com/svn/trunk@1709 96395faa-99c1-11dd-bbfe-3dabce05a288
This commit is contained in:
Jake.Stine 2009-08-29 20:45:19 +00:00
parent fd480496c4
commit e879890d2a
9 changed files with 203 additions and 64 deletions

View File

@ -1,10 +1,45 @@
Instruction for installations: -------------------------------------
PCSX2 NSIS Installer Instructions
-------------------------------------
Install NSIS (tested with 2.45) * Install NSIS (tested with 2.45)
Install NSIS Script Advanced Uninstall Log NSIS Header (you can find it opn NSIS wiki) * Install NSIS Script: Advanced Uninstall Log (you can find it on NSIS wiki)
Create a folder
Put the nsis script in said folder * Download the latest Visual C++ Redistributable (currently 2008 SP1 as of this writing) and
Put vcredist_x86.exe in said folder save it to this nsis/ folder.
Put the pcsx2 folder in said folder (warning, leave only the files you want in the installer. All files from the pcsx2 folder will be added to the installer )
Edit the NSIS script with a text editor, changing the installer name and putting the correct name for the menu item (2 times, both filename and link name) * Load the PCSX2 Suite solution and rebuild all in the following targets:
Compile the NSIS script * Release SSE2
* Release SSSE3 (only needed if packaging plugins)
* Release SSE4 (only needed if packaging plugins)
* Devel (optional)
You may selectively unload plugins you do not wish to package prior to running the NSIS
script.
* Compile script, and Enjoy :)
--------------------------------------------
Compilation Targets and Plugin Inclusion
--------------------------------------------
pcsx2-dev.exe is included into the installer as well *if* present (but is not required).
The Release mode (without -dev) is required, and the script errors if it's missing.
To include non-NULL plugins into the installer you must specify /DINC_PLUGINS on the command
line when compiling the script. The installer will include plugins only if they are present.
If you do not build plugins, or remove some (or all) plugins before running the nsis script,
only PCSX2 and whatever remaining plugins will be packaged.
GSdx SSE2, SSSE3, and SSE4 versions are all included into the installer *if* they are present.
You will need to follow the above instructions and compile all release targets to get all the
GSdx DLLs.
--------------------------------------------
TODO / Wish List!!
--------------------------------------------
* pcsx2-dev should probably be an optional section, conditionally scripted only if the
file is present at compilation time, and packaged.

View File

@ -1,30 +1,78 @@
; Pcsx2 NSIS installer script ; PCSX2 NSIS installer script
; loosely based on a collection of examples and on information from the wikipedia ; loosely based on a collection of examples and on information from the wikipedia
!define APP_NAME "Pcsx2 - A Playstation 2 Emulator" ; Application version, changed for each release to match the verision
; ----------------------------------------
; Determine the revision numbers of the various components
!system 'SubWCRev.exe ..\pcsx2 templates\svnrev_pcsx2.nsh svnrev_pcsx2.nsh'
!ifdef INC_PLUGINS
!system 'SubWCRev.exe ..\plugins\gsdx templates\svnrev_gsdx.nsh svnrev_gsdx.nsh'
!system 'SubWCRev.exe ..\plugins\spu2-x templates\svnrev_spu2x.nsh svnrev_spu2x.nsh'
!system 'SubWCRev.exe ..\plugins\cdvdiso templates\svnrev_cdvdiso.nsh svnrev_cdvdiso.nsh'
!system 'SubWCRev.exe ..\plugins\lilypad templates\svnrev_lilypad.nsh svnrev_lilypad.nsh'
!system 'SubWCRev.exe ..\plugins\zerogs\dx templates\svnrev_zerogs.nsh svnrev_zerogs.nsh'
!system 'SubWCRev.exe ..\plugins\zerospu2 templates\svnrev_zerospu2.nsh svnrev_zerospu2.nsh'
!endif
!include "svnrev_pcsx2.nsh"
!ifdef INC_PLUGINS
!include "svnrev_gsdx.nsh"
!include "svnrev_spu2x.nsh"
!include "svnrev_cdvdiso.nsh"
!include "svnrev_lilypad.nsh"
!include "svnrev_zerogs.nsh"
!include "svnrev_zerospu2.nsh"
!endif
; ----------------------------------------
!define APP_NAME "PCSX2 Beta r${SVNREV}"
!define INSTDIR_REG_ROOT "HKLM" !define INSTDIR_REG_ROOT "HKLM"
!define INSTDIR_REG_KEY "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APP_NAME}" !define INSTDIR_REG_KEY "Software\Microsoft\Windows\CurrentVersion\Uninstall\PCSX2-beta-r${SVNREV}"
;--------------------------------
;Include Modern UI 2 and advanced log uninstaller. all credits to the respective authors
!include "MUI2.nsh" ; ----------------------------------------
!include "AdvUninstLog.nsh" ; Include Modern UI 2 and advanced log uninstaller.
;-------------------------------- !include "MUI2.nsh"
!include "AdvUninstLog.nsh"
; -------------------------------------
; Test if Visual Studio Redistributables 2008 SP1 installed
; Returns -1 if there is no VC redistributables intstalled
;
Function CheckVCRedist
Push $R0
ClearErrors
ReadRegDword $R0 HKLM "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{9A25302D-30C0-39D9-BD6F-21E6EC160475}" "Version"
; if VS 2005+ redist SP1 not installed, install it
IfErrors 0 VSRedistInstalled
StrCpy $R0 "-1"
VSRedistInstalled:
Exch $R0
FunctionEnd
; ----------------------------------------
; The name of the installer ; The name of the installer
Name "Pcsx2" Name "PCSX2 Beta r${SVNREV}"
; The file to write. To change each release OutFile "pcsx2-beta-${SVNREV}-setup.exe"
OutFile "Pcsx2-beta-1474-setup.exe"
; The default installation directory ; The default installation directory
InstallDir "$PROGRAMFILES\Pcsx2" InstallDir "$PROGRAMFILES\pcsx2-r${SVNREV}"
; Registry key to check for directory (so if you install again, it will ; Registry key to check for directory (so if you install again, it will
; overwrite the old one automatically) ; overwrite the old one automatically)
InstallDirRegKey HKLM "Software\Pcsx2" "Install_Dir" InstallDirRegKey HKLM "Software\pcsx2" "Install_Dir"
; Request application privileges for Windows Vista ; Request application privileges for Windows Vista
RequestExecutionLevel admin RequestExecutionLevel admin
@ -42,50 +90,98 @@ RequestExecutionLevel admin
!insertmacro MUI_UNPAGE_INSTFILES !insertmacro MUI_UNPAGE_INSTFILES
;-------------------------------- ; ----------------------------------------
; Basic section (emulation proper) ; Basic section (emulation proper)
Section "Pcsx2 (required)" Section "PCSX2 Beta r${SVNREV} (required)"
SectionIn RO SectionIn RO
; Set output path to the installation directory.
SetOutPath $INSTDIR
; Put file there. It's catched by the uninstaller script ; Put file there. It's catched by the uninstaller script
SetOutPath $INSTDIR
!insertmacro UNINSTALL.LOG_OPEN_INSTALL !insertmacro UNINSTALL.LOG_OPEN_INSTALL
File /r "Pcsx2\"
SetOutPath $INSTDIR
File /oname=pcsx2-r${SVNREV}.exe ..\bin\pcsx2.exe
File ..\bin\w32pthreads.dll
File ..\bin\gnu_gettext.dll
File /nonfatal /oname=pcsx2-dev-r${SVNREV}.exe ..\bin\pcsx2-dev.exe
SetOutPath $INSTDIR\Langs
File /r ..\bin\Langs\*.mo
SetOutPath $INSTDIR\Patches
File /r ..\bin\Patches\*.pnach
; NULL plugins are required, and really there should be more but we don't have working
; SPU2 or GS null plugins right now.
File ..\bin\Plugins\USBnull.dll
File ..\bin\Plugins\DEV9null.dll
File ..\bin\Plugins\FWnull.dll
File ..\bin\Plugins\CDVDnull.dll
!ifdef INC_PLUGINS
SetOutPath $INSTDIR\Plugins
File /nonfatal /oname=gsdx-sse2-r${SVNREV_GSDX}.dll ..\bin\Plugins\gsdx-sse2.dll
File /nonfatal /oname=gsdx-ssse3-r${SVNREV_GSDX}.dll ..\bin\Plugins\gsdx-ssse3.dll
File /nonfatal /oname=gsdx-sse4-r${SVNREV_GSDX}.dll ..\bin\Plugins\gsdx-sse4.dll
File /nonfatal /oname=spu2-x-r${SVNREV_SPU2X}.dll ..\bin\Plugins\spu2-x.dll
File /nonfatal /oname=cdvdiso-r${SVNREV_CDVDISO}.dll ..\bin\Plugins\cdvdiso.dll
File /nonfatal /oname=lilypad-r${SVNREV_LILYPAD}.dll ..\bin\Plugins\lilypad.dll
File /nonfatal /oname=zerogs-r${SVNREV_ZEROGS}.dll ..\bin\Plugins\zerogs.dll
File /nonfatal /oname=zerospu2-r${SVNREV_ZEROSPU2}.dll ..\bin\Plugins\zerospu2.dll
!endif
SetOutPath $INSTDIR
!insertmacro UNINSTALL.LOG_CLOSE_INSTALL !insertmacro UNINSTALL.LOG_CLOSE_INSTALL
; Write the installation path into the registry ; Write the installation path into the registry
WriteRegStr HKLM Software\Pcsx2 "Install_Dir" "$INSTDIR" WriteRegStr HKLM Software\pcsx2 "Install_Dir" "$INSTDIR"
; Write the uninstall keys for Windows ; Write the uninstall keys for Windows
WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Pcsx2" "DisplayName" "Pcsx2 - Playstation 2 Emulator" WriteRegStr HKLM "${INSTDIR_REG_KEY}" "DisplayName" "PCSX2 - Playstation 2 Emulator"
WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Pcsx2" "UninstallString" '"$INSTDIR\uninstall.exe"' WriteRegStr HKLM "${INSTDIR_REG_KEY}" "UninstallString" '"$INSTDIR\uninstall-r${SVNREV}.exe"'
WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Pcsx2" "NoModify" 1 WriteRegDWORD HKLM "${INSTDIR_REG_KEY}" "NoModify" 1
WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Pcsx2" "NoRepair" 1 WriteRegDWORD HKLM "${INSTDIR_REG_KEY}" "NoRepair" 1
WriteUninstaller "uninstall.exe" WriteUninstaller "uninstall-r${SVNREV}.exe"
SectionEnd SectionEnd
; ----------------------------------------
; MSVC Redistributable - required if the user des not already have it
; Note: if your NSIS generates an error here it means you need to download the latest
; visual studio redist package from microsoft. Any redist 2008/SP1 or newer will do.
Section "Microsoft Visual C++ 2008 SP1 Redist (required)"
SectionIn RO
SetOutPath $TEMP
File "vcredist_x86.exe"
Call CheckVCRedist
StrCmp $R0 "-1" installRedist
DetailPrint "Visual C++ 2008 SP1 Redistributable already installed, skipping..."
Goto skipRedist
installRedist:
ExecWait "$TEMP\vcredist_x86.exe"
SkipRedist:
SectionEnd
; ----------------------------------------
; Optional sections (can be disabled by the user) ; Optional sections (can be disabled by the user)
Section "Start Menu Shortcuts" Section "Start Menu Shortcuts"
SetOutPath $INSTDIR
; Need to change name too, for each version ; Need to change name too, for each version
CreateDirectory "$SMPROGRAMS\Pcsx2" CreateDirectory "$SMPROGRAMS\pcsx2"
CreateShortCut "$SMPROGRAMS\Pcsx2\Uninstall.lnk" "$INSTDIR\uninstall.exe" "" "$INSTDIR\uninstall.exe" 0 CreateShortCut "$SMPROGRAMS\pcsx2\Uninstall-r${SVNREV}.lnk" "$INSTDIR\uninstall-r${SVNREV}.exe" "" "$INSTDIR\uninstall-r${SVNREV}.exe" 0
CreateShortCut "$SMPROGRAMS\Pcsx2\Pcsx2.lnk" "$INSTDIR\pcsx2-beta-1474.exe" "" "$INSTDIR\pcsx2-beta-1474.exe" 0 CreateShortCut "$SMPROGRAMS\pcsx2\pcsx2-r${SVNREV}.lnk" "$INSTDIR\pcsx2-r${SVNREV}.exe" "" "$INSTDIR\pcsx2-r${SVNREV}.exe" 0
CreateShortCut "$SMPROGRAMS\pcsx2\pcsx2-dev-r${SVNREV}.lnk" "$INSTDIR\pcsx2-dev-r${SVNREV}.exe" "" "$INSTDIR\pcsx2-dev-r${SVNREV}.exe" 0 "" "" \
SectionEnd "PCSX2 Devel (has debugging and memory dumping)"
; Optional, but required if you don't already have it
Section "Microsoft Visual C++ 2008 SP1 Redist(Required)"
SetOutPath $TEMP
File "vcredist_x86.exe"
ExecWait "$TEMP\vcredist_x86.exe"
SectionEnd SectionEnd
;-------------------------------- ;--------------------------------
@ -105,38 +201,36 @@ Function .onInstSuccess
FunctionEnd FunctionEnd
;--------------------------------
; --------------------------------------
; Uninstaller ; Uninstaller
Section "Un.Standard uninstallation (Leaves user created files untouched)" Section "Un.Safe uninstall (Removes only files installed by this installer)"
; Remove registry keys ; Remove registry keys
DeleteRegKey HKLM Software\Microsoft\Windows\CurrentVersion\Uninstall\Pcsx2 DeleteRegKey HKLM ${INSTDIR_REG_KEY}
DeleteRegKey HKLM Software\Pcsx2 DeleteRegKey HKLM Software\pcsx2
; Remove shortcuts, if any ; Remove shortcuts, if any
Delete "$SMPROGRAMS\Pcsx2\*.*" Delete "$SMPROGRAMS\pcsx2\*.*"
RMDir "$SMPROGRAMS\Pcsx2" RMDir "$SMPROGRAMS\pcsx2"
!insertmacro UNINSTALL.LOG_UNINSTALL "$INSTDIR" !insertmacro UNINSTALL.LOG_UNINSTALL "$INSTDIR"
DeleteRegKey ${INSTDIR_REG_ROOT} "${INSTDIR_REG_KEY}" DeleteRegKey ${INSTDIR_REG_ROOT} "${INSTDIR_REG_KEY}"
SectionEnd SectionEnd
; This option lets you COMPLETELY uninstall by deleting the main folder. Caution! :) ; This option lets you COMPLETELY uninstall by deleting the main folder. Caution! :)
Section /o "Un.Complete Uninstall. WARNING, this will delete every file in the program folder" Section /o "Un.Complete Uninstall. *Completely* removes all files and folders."
MessageBox MB_YESNO "You have chosen to remove ALL files in the installation folder. This will remove all your saves, screenshots, patches and bios as well. Do you want to proceed?" IDYES true IDNO false MessageBox MB_YESNO "WANRING! You have chosen to remove ALL files in the installation folder, including all saves, screenshots, plugins, patches, and bios files. Do you want to proceed?" IDYES true IDNO false
true: true:
Delete "$SMPROGRAMS\Pcsx2\*.*" Delete "$SMPROGRAMS\pcsx2\*.*"
RMDir "$SMPROGRAMS\Pcsx2" RMDir "$SMPROGRAMS\pcsx2"
RMDir /r "$INSTDIR" RMDir /r "$INSTDIR"
DeleteRegKey ${INSTDIR_REG_ROOT} "${INSTDIR_REG_KEY}" DeleteRegKey ${INSTDIR_REG_ROOT} "${INSTDIR_REG_KEY}"
false: false:
SectionEnd SectionEnd
Function UN.onInit Function UN.onInit
@ -144,4 +238,5 @@ Function UN.onInit
;begin uninstall, could be added on top of uninstall section instead ;begin uninstall, could be added on top of uninstall section instead
!insertmacro UNINSTALL.LOG_BEGIN_UNINSTALL !insertmacro UNINSTALL.LOG_BEGIN_UNINSTALL
FunctionEnd FunctionEnd

View File

@ -0,0 +1 @@
!define SVNREV_CDVDISO $WCREV$

View File

@ -0,0 +1 @@
!define SVNREV_GSDX $WCREV$

View File

@ -0,0 +1 @@
!define SVNREV_LILYPAD $WCREV$

View File

@ -0,0 +1,3 @@
!define SVNREV $WCREV$
!define SVN_MODS $WCMODS?1:0$

View File

@ -0,0 +1 @@
!define SVNREV_SPU2X $WCREV$

View File

@ -0,0 +1 @@
!define SVNREV_ZEROGS $WCREV$

View File

@ -0,0 +1 @@
!define SVNREV_ZEROSPU2 $WCREV$