NSIS Installer:

* Add the major/minor version number to the generated exe's.
 * Default to using the HEAD revision for all exe's and plugins in the package, instead of versioning each one independently.
 * Update instructions readme to mention use of Eclipse as a NSIS editor and integrated environment.

git-svn-id: http://pcsx2.googlecode.com/svn/trunk@3122 96395faa-99c1-11dd-bbfe-3dabce05a288
This commit is contained in:
Jake.Stine 2010-05-30 02:00:19 +00:00
parent b678e65b6e
commit 52609a58c8
18 changed files with 584 additions and 545 deletions

View File

@ -1,5 +1,5 @@
; =======================================================================
; Setup.exe Properties
; Generated-Setup.exe Properties
; =======================================================================
; (for the professionalism!!)
@ -7,7 +7,7 @@
VIAddVersionKey /LANG=${LANG_ENGLISH} "ProductName" "${APP_NAME}"
;VIAddVersionKey /LANG=${LANG_ENGLISH} "Comments" "A test comment"
VIAddVersionKey /LANG=${LANG_ENGLISH} "LegalCopyright" "© 2010 PCSX2 Dev Team"
VIAddVersionKey /LANG=${LANG_ENGLISH} "FileDescription" "Installs PCSX2, a Playstation 2 Emulator for the PC"
VIAddVersionKey /LANG=${LANG_ENGLISH} "FileVersion" "${APP_VERSION}.${SVNREV}"
VIAddVersionKey /LANG=${LANG_ENGLISH} "FileDescription" "Installs PCSX2, a Playstation 2 Emulator for the PC."
VIAddVersionKey /LANG=${LANG_ENGLISH} "FileVersion" "${APP_VERSION}.${SVNREV_PACKAGE}"
VIProductVersion "${APP_VERSION}.${SVNREV}"
VIProductVersion "${APP_VERSION}.${SVNREV_PACKAGE}"

View File

@ -11,9 +11,10 @@ Section "Start Menu Shortcuts" SEC_STARTMENU
CreateShortCut "$SMPROGRAMS\PCSX2\Uninstall ${APP_NAME}.lnk" "${UNINST_EXE}" "" "${UNINST_EXE}" 0
CreateShortCut "$SMPROGRAMS\PCSX2\${APP_NAME}.lnk" "${APP_EXE}" "" "${APP_EXE}" 0
CreateShortCut "$SMPROGRAMS\PCSX2\Readme ${APP_VERSION}.lnk" "$INSTDIR\docs\${PCSX2_README}"
;CreateShortCut "$SMPROGRAMS\PCSX2\Timeline of PCSX2 Releases.lnk" "$INSTDIR\${PCSX2_README}.doc"
CreateShortCut "$SMPROGRAMS\PCSX2\Frequently Asked Questions ${APP_VERSION}.lnk" "$INSTDIR\docs\${PCSX2_FAQ}"
CreateShortCut "$SMPROGRAMS\PCSX2\Readme ${APP_VERSION}.lnk" "$INSTDIR\docs\${PCSX2_README}" \
"" "" 0 "" "" "Typical usage overview and background information for PCSX2."
CreateShortCut "$SMPROGRAMS\PCSX2\Frequently Asked Questions ${APP_VERSION}.lnk" "$INSTDIR\docs\${PCSX2_FAQ}" \
"" "" 0 "" "" "Common answers to common problems and inquiries."
;IfFileExists ..\bin\pcsx2-dev.exe 0 +2
; CreateShortCut "PCSX2\pcsx2-dev-r${SVNREV}.lnk" "$INSTDIR\pcsx2-dev-r${SVNREV}.exe" "" "$INSTDIR\pcsx2-dev-r${SVNREV}.exe" 0 "" "" \

116
nsis/SharedBase.nsh Normal file
View File

@ -0,0 +1,116 @@
; =======================================================================
; Core Includes and Defines
; =======================================================================
!ifndef INC_CORE
!define INC_CORE 1
!endif
!ifndef INC_PLUGINS
; Set to 0 to include the core binaries only (no plugins)
!define INC_PLUGINS 1
!endif
!ifndef INC_LANGS
; Set to 1 to enable inclusion of Languages folders (which are currently missing in 0.9.7)
!define INC_LANGS 0
!endif
!ifndef USE_PACKAGE_REV
; When enabled, all exe and plugins use a single revision based ont he trunk/HEAD svn revision.
; When disabled, each plugin and the main exe get their own revision number based on the actual
; revision the component was last updated.
!define USE_PACKAGE_REV 1
!endif
!if ${INC_CORE} > 0
; FIXME: Technically we'd want to exclude plugin revisions here, but it isn't easy to do.
!system 'SubWCRev.exe ..\ templates\svnrev_package.nsh svnrev_package.nsh'
!else
; Revision information for all plugins; used to moniker the output file when building
; plugin-only packages.
!system 'SubWCRev.exe ..\plugins templates\svnrev_package.nsh svnrev_package.nsh'
!endif
!system 'SubWCRev.exe ..\pcsx2 templates\svnrev_pcsx2.nsh svnrev_pcsx2.nsh'
!include "svnrev_package.nsh"
!include "svnrev_pcsx2.nsh"
; Notes on Uninstall Log Location (UNINSTALL_LOG)
; The name of the uninstall log determines whether or not future installers
; fall under the same single uninstall entry, or if they use multiple (separate)
; uninstall folders.
!ifndef APP_VERSION
!define APP_VERSION "0.9.7"
!endif
!define APP_NAME "PCSX2 ${APP_VERSION} (r${SVNREV_PACKAGE})"
!define APP_FILENAME "pcsx2-r${SVNREV_PCSX2}"
!define UNINSTALL_LOG "Uninst-pcsx2-r${SVNREV_PACKAGE}"
!define INSTDIR_REG_ROOT "HKLM"
XPStyle on
; LZMA is the best, by far, so let's make sure it's always in use:
; (dictionaries larger than 24MB don't seem to help)
SetCompressor /SOLID lzma
SetCompressorDictSize 24
; The name of the installer
Name "${APP_NAME}"
OutFile "output\pcsx2-${APP_VERSION}-r${SVNREV_PACKAGE}-${OUTFILE_POSTFIX}.exe"
; The default installation directory
InstallDir "$PROGRAMFILES\PCSX2 ${APP_VERSION}"
; Registry key to check for directory (so if you install again, it will
; overwrite the old one automatically)
InstallDirRegKey ${INSTDIR_REG_ROOT} "Software\PCSX2" "Install_Dir_${APP_VERSION}"
; These defines are dependent on NSIS vars assigned above.
!define APP_EXE "$INSTDIR\${APP_FILENAME}.exe"
!define INSTDIR_REG_KEY "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APP_FILENAME}"
!define PCSX2_README "pcsx2 readme ${APP_VERSION}.doc"
!define PCSX2_FAQ "pcsx2 FAQ ${APP_VERSION}.pdf"
Var DirectXSetupError
; =======================================================================
; Vista/Win7 UAC Stuff
; =======================================================================
; FIXME !!
; Request application privileges for Windows Vista/7; I'd love for this to be sensible about which
; execution level it requests, but UAC is breaking my mind. I included some code for User type
; detection in function IsUserAdmin, but not really using it constructively yet. (see also our
; uses of SetShellVarContext in the installer sections)
;!include "IsUserAdmin.nsi"
; Allow admin-rights PCSX2 users to be hardcore!
AllowRootDirInstall true
; Just require admin for now, until we figure out a nice way to allow for casual user installs.
RequestExecutionLevel admin
; =======================================================================
; MUI2 and Advanced Uninstaller Basics
; =======================================================================
!include "MUI2.nsh"
!include "AdvUninstLog.nsh"
; This defines the Advanced Uninstaller mode of operation...
!insertmacro UNATTENDED_UNINSTALL
!define MUI_HEADERIMAGE
!define MUI_HEADERIMAGE_BITMAP "banner.bmp"
!define MUI_COMPONENTSPAGE_SMALLDESC

View File

@ -1,5 +1,4 @@
; =======================================================================
; Plugin Includes
; =======================================================================
@ -27,15 +26,13 @@
; Shared Install Functions
; =======================================================================
; ==================================================================================
Function .onInit
;prepare Advanced Uninstall log always within .onInit function
!insertmacro UNINSTALL.LOG_PREPARE_INSTALL
; MORE UAC HELL ---------- >
call IsUserAdmin
;call IsUserAdmin
FunctionEnd
@ -111,6 +108,9 @@ Function un.onUninstSuccess
StrCpy $0 "$INSTDIR\plugins"
Call un.DeleteDirIfEmpty
StrCpy $0 "$INSTDIR\docs"
Call un.DeleteDirIfEmpty
StrCpy $0 "$INSTDIR"
Call un.DeleteDirIfEmpty
FunctionEnd

View File

@ -1,52 +0,0 @@
; =======================================================================
; Core Includes and Defines
; =======================================================================
; Notes on Uninstall Log Location (UNINSTALL_LOG)
; The name of the uninstall log determines whether or not future installers
; fall under the same single uninstall entry, or if they use multiple (separate)
; uninstall folders.
!system 'SubWCRev.exe ..\pcsx2 templates\svnrev_pcsx2.nsh svnrev_pcsx2.nsh'
!include "svnrev_pcsx2.nsh"
!ifndef APP_VERSION
!define APP_VERSION "0.9.7"
!endif
!define APP_NAME "PCSX2 ${APP_VERSION} (r${SVNREV})"
!define APP_FILENAME "pcsx2-r${SVNREV}"
!define UNINSTALL_LOG "Uninst-${APP_FILENAME}"
!define INSTDIR_REG_ROOT "HKLM"
XPStyle on
; LZMA is the best, by far, so let's make sure it's always in use:
; (dictionaries larger than 24MB don't seem to help)
SetCompressor /SOLID lzma
SetCompressorDictSize 24
; The name of the installer
Name "${APP_NAME}"
OutFile "${APP_FILENAME}-${OUTFILE_POSTFIX}.exe"
; The default installation directory
InstallDir "$PROGRAMFILES\PCSX2 ${APP_VERSION}"
; Registry key to check for directory (so if you install again, it will
; overwrite the old one automatically)
InstallDirRegKey ${INSTDIR_REG_ROOT} "Software\PCSX2" "Install_Dir_${APP_VERSION}"
; These defines are dependent on NSIS vars assigned above.
!define APP_EXE "$INSTDIR\${APP_FILENAME}.exe"
!define INSTDIR_REG_KEY "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APP_FILENAME}"
!define PCSX2_README "pcsx2 readme ${APP_VERSION}.doc"
!define PCSX2_FAQ "pcsx2 FAQ ${APP_VERSION}.pdf"
Var DirectXSetupError

View File

@ -26,25 +26,35 @@
You may selectively unload plugins you do not wish to package prior to running the NSIS
script.
* Compile script, and Enjoy :)
* Compile script! Output executable will be generated to the output/ folder.
--------------------------------------------
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.
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.
--------------------------------------------
Recommendations to Developers
--------------------------------------------
From Air: I use Eclipse to edit NSIS scripts. Do a google search for 'nsis eclipse' and it
should take you to the NSIS wiki with instructions on how to set up a NSIS environment in
Eclipse. This typically only takes me a few minutes (yes it's really that painless). Via
Eclipse you can use F2 and F3 for online help and context help on NSIS commands, and the syntax
highlighting is very clean and NSIS-specific. Additionally it'll give you Visual Studio-style
hyperlinks for errors during compilation, so that you can simply click on an error and be taken
right to the offending line of code. Highly recommended! :)
--------------------------------------------
TODO / Wish List!!
--------------------------------------------

View File

@ -5,12 +5,6 @@
; Copyright 2009-2010 PCSX2 Dev Team
;
!ifndef INC_PLUGINS
; Set to 0 to include the core binaries only (no plugins)
!define INC_PLUGINS 1
!endif
!ifndef INC_CRT_2008
; Set to 0 to disable inclusion of Visual Studio 2008 SP1 CRT Redists
!define INC_CRT_2008 1
@ -21,44 +15,14 @@
!define INC_CRT_2010 1
!endif
!ifndef INC_LANGS
; Set to 1 to enable inclusion of Languages folders (which are currently missing in 0.9.7)
!define INC_LANGS 0
!endif
!define OUTFILE_POSTFIX "setup"
!include "SharedSettings.nsh"
!include "MUI2.nsh"
!include "AdvUninstLog.nsh"
; =======================================================================
; Vista/Win7 UAC Stuff
; =======================================================================
!include "IsUserAdmin.nsi"
!include "SharedBase.nsh"
; Reserve features for improved performance with solid archiving.
; (uncomment if we add our own install options ini files)
;!insertmacro MUI_RESERVEFILE_INSTALLOPTIONS
;!insertmacro MUI_RESERVEFILE_LANGDLL
; Allow admin-rights PCSX2 users to be hardcore!
AllowRootDirInstall true
; FIXME !!
; Request application privileges for Windows Vista/7; I'd love for this to be sensible about which
; execution level it requests, but UAC is breaking my mind. I included some code for User type
; detection in function IsUserAdmin, but not really using it constructively yet. (see also our
; uses of SetShellVarContext in the installer sections)
RequestExecutionLevel admin
; This defines the Advanced Uninstaller mode of operation...
!insertmacro UNATTENDED_UNINSTALL
!define MUI_HEADERIMAGE
!define MUI_HEADERIMAGE_BITMAP "banner.bmp"
!define MUI_COMPONENTSPAGE_SMALLDESC
!insertmacro MUI_PAGE_COMPONENTS
!insertmacro MUI_PAGE_DIRECTORY
!insertmacro MUI_PAGE_INSTFILES

View File

@ -8,55 +8,13 @@
; PCSX2 from a variety of mirror hosts. Packages are only downloaded on an as-needed
; basis; this most importantly applies to the very bulky VS 2008 and VS2010 packages.
!ifndef INC_PLUGINS
; Set to 0 to include the core binaries only (no plugins)
!define INC_PLUGINS 1
!endif
!ifndef INC_ZZOGL
; Includes ZZOGL and CG Toolkit (via web install). Currently not supported (work in progress)
!define INC_ZZOGL 0
!endif
!ifndef INC_LANGS
; Set to 1 to enable inclusion of Languages folders (which are currently missing in 0.9.7)
!define INC_LANGS 0
!endif
!define OUTFILE_POSTFIX "websetup"
!include "SharedSettings.nsh"
!include "MUI2.nsh"
!include "AdvUninstLog.nsh"
; Reserve features for improved performance with solid archiving.
; (uncomment if we add our own install options ini files)
;!insertmacro MUI_RESERVEFILE_INSTALLOPTIONS
;!insertmacro MUI_RESERVEFILE_LANGDLL
; =======================================================================
; Vista/Win7 UAC Stuff
; =======================================================================
!include "IsUserAdmin.nsi"
; Allow admin-rights PCSX2 users to be hardcore!
AllowRootDirInstall true
; FIXME !!
; Request application privileges for Windows Vista/7; I'd love for this to be sensible about which
; execution level it requests, but UAC is breaking my mind. I included some code for User type
; detection in function IsUserAdmin, but not really using it constructively yet. (see also our
; uses of SetShellVarContext in the installer sections)
RequestExecutionLevel admin
; This defines the Advanced Uninstaller mode of operation...
!insertmacro UNATTENDED_UNINSTALL
!define MUI_HEADERIMAGE
!define MUI_HEADERIMAGE_BITMAP "banner.bmp"
;!define MUI_COMPONENTSPAGE_NODESC
!define MUI_COMPONENTSPAGE_SMALLDESC
!include "SharedBase.nsh"
!insertmacro MUI_PAGE_COMPONENTS
!insertmacro MUI_PAGE_DIRECTORY
@ -117,6 +75,8 @@ Section "!${APP_NAME} (required)" SEC_CORE
SectionEnd
!include "SectionShortcuts.nsh"
!if ${INC_ZZOGL} > 0
Section "ZZogl Plugin (requires OpenGL)"
@ -138,8 +98,6 @@ Section "Nvidia's CG Toolkit"
SectionEnd
!endif
!include "SectionShortcuts.nsh"
; -----------------------------------------------------------------------
; MSVC Redistributable - required if the user does not already have it
; Note: if your NSIS generates an error here it means you need to download the latest
@ -284,7 +242,6 @@ SectionEnd
!include "SectionUninstaller.nsh"
LangString DESC_CORE ${LANG_ENGLISH} "Core components (binaries, plugins, languages, etc)."
LangString DESC_STARTMENU ${LANG_ENGLISH} "Adds shortcuts for PCSX2 to the start menu (all users)."

View File

@ -1 +1,5 @@
!if ${USE_PACKAGE_REV} == 0
!define SVNREV_CDVDISO $WCREV$
!else
!define SVNREV_CDVDISO ${SVNREV_PACKAGE}
!endif

View File

@ -1 +1,5 @@
!if ${USE_PACKAGE_REV} == 0
!define SVNREV_GSDX $WCREV$
!else
!define SVNREV_GSDX ${SVNREV_PACKAGE}
!endif

View File

@ -1 +1,5 @@
!if ${USE_PACKAGE_REV} == 0
!define SVNREV_LILYPAD $WCREV$
!else
!define SVNREV_LILYPAD ${SVNREV_PACKAGE}
!endif

View File

@ -0,0 +1,3 @@
!define SVNREV_PACKAGE $WCREV$
!define SVNMOD_PACKAGE $WCMODS?1:0$

View File

@ -1,3 +1,8 @@
!if ${USE_PACKAGE_REV} == 0
!define SVNREV_PCSX2 $WCREV$
!define SVNMOD_PCSX2 $WCMODS?1:0$
!else
!define SVNREV_PCSX2 ${SVNREV_PACKAGE}
!define SVNMOD_PCSX2 ${SVMOD_PACKAGE}
!endif
!define SVNREV $WCREV$
!define SVN_MODS $WCMODS?1:0$

View File

@ -0,0 +1,7 @@
!if ${USE_PACKAGE_REV} == 0
!define SVNREV_PLUGINS $WCREV$
!define SVNMOD_PLUGINS $WCMODS?1:0$
!else
!define SVNREV_PLUGINS ${SVNREV_PACKAGE}
!define SVNMOD_PLUGINS ${SVMOD_PACKAGE}
!endif

View File

@ -1 +1,5 @@
!if ${USE_PACKAGE_REV} == 0
!define SVNREV_SPU2X $WCREV$
!else
!define SVNREV_SPU2X ${SVNREV_PACKAGE}
!endif

View File

@ -1 +1,5 @@
!if ${USE_PACKAGE_REV} == 0
!define SVNREV_ZEROGS $WCREV$
!else
!define SVNREV_ZEROGS ${SVNREV_PACKAGE}
!endif

View File

@ -1 +1,5 @@
!if ${USE_PACKAGE_REV} == 0
!define SVNREV_ZEROSPU2 $WCREV$
!else
!define SVNREV_ZEROSPU2 ${SVNREV_PACKAGE}
!endif

View File

@ -1 +1,5 @@
!if ${USE_PACKAGE_REV} == 0
!define SVNREV_ZZOGL $WCREV$
!else
!define SVNREV_ZZOGL ${SVNREV_PACKAGE}
!endif