summaryrefslogtreecommitdiffstats
path: root/packaging
diff options
context:
space:
mode:
authorCalum Lind <calumlind+deluge@gmail.com>2015-09-17 09:56:58 +0100
committerCalum Lind <calumlind+deluge@gmail.com>2015-09-18 22:31:39 +0100
commit7fccfa065191cf1eb47f963123b8009d854ede2e (patch)
treec8bece66434d3cd811996a61a9fdefff03d06f46 /packaging
parentff6b52edc6766c5a90b65857e469db06002c5d37 (diff)
downloaddeluge-7fccfa065191cf1eb47f963123b8009d854ede2e.tar.gz
deluge-7fccfa065191cf1eb47f963123b8009d854ede2e.tar.bz2
deluge-7fccfa065191cf1eb47f963123b8009d854ede2e.zip
[Packaging] Updates to the NSIS Installer script
* New message box popup if VC 2008 Redist package not detected. * Add Start Menu page to choose where/if to install items. * Add desktop shortcut install option to finish page. * Clean up spacing and use consistent 4 spaces to indent. * Exclude as many unneeded pygame libraries as possible.
Diffstat (limited to 'packaging')
-rw-r--r--packaging/win32/deluge-bbfreeze.py7
-rw-r--r--packaging/win32/deluge-win32-installer.nsi260
2 files changed, 162 insertions, 105 deletions
diff --git a/packaging/win32/deluge-bbfreeze.py b/packaging/win32/deluge-bbfreeze.py
index 795b675d4..1a074f1b3 100644
--- a/packaging/win32/deluge-bbfreeze.py
+++ b/packaging/win32/deluge-bbfreeze.py
@@ -115,8 +115,11 @@ fzr()
for script in script_list:
os.remove(script)
-# Exclude files which are already included in GTK or Windows.
-excludeDlls = ("MSIMG32.dll", "MSVCR90.dll", "MSVCP90.dll", "MSVCR120.dll", "POWRPROF.dll", "DNSAPI.dll", "USP10.dll")
+# Exclude files which are already included in GTK or Windows. Also exclude unneeded pygame dlls.
+excludeDlls = ("MSIMG32.dll", "MSVCR90.dll", "MSVCP90.dll", "MSVCR120.dll",
+ "POWRPROF.dll", "DNSAPI.dll", "USP10.dll", "MPR.dll",
+ "jpeg.dll", "libfreetype-6.dll", "libpng12-0.dll", "libtiff.dll",
+ "SDL_image.dll", "SDL_ttf.dll")
for dll in excludeDlls:
try:
os.remove(os.path.join(build_dir, dll))
diff --git a/packaging/win32/deluge-win32-installer.nsi b/packaging/win32/deluge-win32-installer.nsi
index 1f654fa6a..ea0e35e97 100644
--- a/packaging/win32/deluge-win32-installer.nsi
+++ b/packaging/win32/deluge-win32-installer.nsi
@@ -8,31 +8,31 @@
# See LICENSE for more details.
#
-# Set default compressor
-SetCompressor /FINAL /SOLID lzma
-SetCompressorDictSize 64
-
# Script version; displayed when running the installer
-!define DELUGE_INSTALLER_VERSION "0.8"
+!define DELUGE_INSTALLER_VERSION "1.0"
# Deluge program information
!define PROGRAM_NAME "Deluge"
-# Deluge program information
+# Detect version from file
!searchparse /file VERSION.tmp `build_version = "` PROGRAM_VERSION `"`
!ifndef PROGRAM_VERSION
!error "Program Version Undefined"
!endif
!define PROGRAM_WEB_SITE "http://deluge-torrent.org"
+!define LICENSE_FILEPATH "..\..\LICENSE"
# Python files generated with bbfreeze
!define BUILD_DIR "build-win32"
!define BBFREEZE_DIR "${BUILD_DIR}\deluge-bbfreeze-${PROGRAM_VERSION}"
+!define INSTALLER_FILENAME "deluge-${PROGRAM_VERSION}-win32-setup.exe"
-# --- Interface settings ---
+# Set default compressor
+SetCompressor /FINAL /SOLID lzma
+SetCompressorDictSize 64
+# --- Interface settings ---
# Modern User Interface 2
!include MUI2.nsh
-
# Installer
!define MUI_ICON "..\..\deluge\ui\data\pixmaps\deluge.ico"
!define MUI_HEADERIMAGE
@@ -42,77 +42,117 @@ SetCompressorDictSize 64
!define MUI_COMPONENTSPAGE_SMALLDESC
!define MUI_FINISHPAGE_NOAUTOCLOSE
!define MUI_ABORTWARNING
-
+# Start Menu Folder Page Configuration
+!define MUI_STARTMENUPAGE_DEFAULTFOLDER ${PROGRAM_NAME}
+!define MUI_STARTMENUPAGE_REGISTRY_ROOT "HKCR"
+!define MUI_STARTMENUPAGE_REGISTRY_KEY "Software\Deluge"
+!define MUI_STARTMENUPAGE_REGISTRY_VALUENAME "Start Menu Folder"
# Uninstaller
!define MUI_UNICON "${NSISDIR}\Contrib\Graphics\Icons\modern-uninstall.ico"
!define MUI_HEADERIMAGE_UNBITMAP "installer-top.bmp"
!define MUI_WELCOMEFINISHPAGE_UNBITMAP "installer-side.bmp"
!define MUI_UNFINISHPAGE_NOAUTOCLOSE
-# --- Start of Modern User Interface ---
+!define MUI_FINISHPAGE_SHOWREADME ""
+!define MUI_FINISHPAGE_SHOWREADME_NOTCHECKED
+!define MUI_FINISHPAGE_SHOWREADME_TEXT "Create Desktop Shortcut"
+!define MUI_FINISHPAGE_SHOWREADME_FUNCTION finishpageaction
-# Welcome page
+# --- Start of Modern User Interface ---
+Var StartMenuFolder
+# Welcome, License & Components pages
!insertmacro MUI_PAGE_WELCOME
-
-# License page
-!insertmacro MUI_PAGE_LICENSE "..\..\LICENSE"
-
-# Components page
+!insertmacro MUI_PAGE_LICENSE ${LICENSE_FILEPATH}
!insertmacro MUI_PAGE_COMPONENTS
-
# Let the user select the installation directory
!insertmacro MUI_PAGE_DIRECTORY
-
+!insertmacro MUI_PAGE_STARTMENU Application $StartMenuFolder
# Run installation
!insertmacro MUI_PAGE_INSTFILES
-
+# Popup Message if VC Redist missing
+Page Custom VCRedistMessage
# Display 'finished' page
!insertmacro MUI_PAGE_FINISH
-
# Uninstaller pages
!insertmacro MUI_UNPAGE_INSTFILES
-
# Language files
!insertmacro MUI_LANGUAGE "English"
-VIProductVersion "${DELUGE_INSTALLER_VERSION}.0.0"
-VIAddVersionKey ProductName "${PROGRAM_NAME}"
-VIAddVersionKey Comments "Deluge Bittorrent Client"
-VIAddVersionKey CompanyName "Deluge Team"
-VIAddVersionKey LegalCopyright "Deluge Team"
-VIAddVersionKey FileDescription "${PROGRAM_NAME} Application Installer"
-VIAddVersionKey FileVersion "${DELUGE_INSTALLER_VERSION}.0.0"
-VIAddVersionKey ProductVersion "${PROGRAM_VERSION}.0"
-VIAddVersionKey OriginalFilename "deluge-${PROGRAM_VERSION}-win32-setup.exe"
# --- Functions ---
+# Check for running Deluge instance.
Function .onInit
- System::Call 'kernel32::OpenMutex(i 0x100000, b 0, t "deluge") i .R0'
- IntCmp $R0 0 notRunning
- System::Call 'kernel32::CloseHandle(i $R0)'
- MessageBox MB_OK|MB_ICONEXCLAMATION "Deluge is running. Please close it first" /SD IDOK
- Abort
- notRunning:
+ System::Call 'kernel32::OpenMutex(i 0x100000, b 0, t "deluge") i .R0'
+ IntCmp $R0 0 notRunning
+ System::Call 'kernel32::CloseHandle(i $R0)'
+ MessageBox MB_OK|MB_ICONEXCLAMATION "Deluge is running. Please close it first" /SD IDOK
+ Abort
+ notRunning:
FunctionEnd
Function un.onUninstSuccess
- HideWindow
- MessageBox MB_ICONINFORMATION|MB_OK "$(^Name) was successfully removed from your computer." /SD IDOK
+ HideWindow
+ MessageBox MB_ICONINFORMATION|MB_OK "$(^Name) was successfully removed from your computer." /SD IDOK
FunctionEnd
Function un.onInit
- MessageBox MB_ICONQUESTION|MB_YESNO|MB_DEFBUTTON2 "Do you want to completely remove $(^Name)?" /SD IDYES IDYES +2
- Abort
+ MessageBox MB_ICONQUESTION|MB_YESNO|MB_DEFBUTTON2 "Do you want to completely remove $(^Name)?" /SD IDYES IDYES +2
+ Abort
+FunctionEnd
+
+Function finishpageaction
+ CreateShortCut "$DESKTOP\Deluge.lnk" "$INSTDIR\deluge.exe"
+FunctionEnd
+
+#Test if Visual Studio Redistributables 2008 SP1 installed
+#Returns -1 if there is no VC redistributables intstalled
+Function CheckVCRedist2008
+ Push $R0
+ ClearErrors
+ ReadRegDword $R0 HKLM "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{FF66E9F6-83E7-3A3E-AF14-8DE9A809A6A4}" "Version"
+ IfErrors 0 +2
+ StrCpy $R0 "-1"
+
+ Push $R1
+ ClearErrors
+ ReadRegDword $R1 HKLM "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{9A25302D-30C0-39D9-BD6F-21E6EC160475}" "Version"
+ IfErrors 0 VSRedistInstalled
+ StrCpy $R1 "-1"
+
+ StrCmp $R0 "-1" +3 0
+ Exch $R0
+ Goto VSRedistInstalled
+ StrCmp $R1 "-1" +3 0
+ Exch $R1
+ Goto VSRedistInstalled
+ # else
+ Push "-1"
+ VSRedistInstalled:
+FunctionEnd
+
+Function VCRedistMessage
+ Call CheckVCRedist2008
+ Pop $R0
+ StrCmp $R0 "-1" 0 end
+ MessageBox MB_YESNO|MB_ICONEXCLAMATION "The following package is required to run \
+ Deluge but it does not appear to be installed:$\r$\n$\r$\n\
+ Microsoft Visual C++ 2008 SP1 Redistributable Package (x86)$\r$\n$\r$\n\
+ Would you like to download it now?" /SD IDNO IDYES clickyes
+ Goto end
+ clickyes:
+ ExecShell open "https://www.microsoft.com/en-us/download/details.aspx?id=5582"
+ end:
FunctionEnd
# --- Installation sections ---
!define PROGRAM_UNINST_KEY "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PROGRAM_NAME}"
!define PROGRAM_UNINST_ROOT_KEY "HKLM"
+!define PROGRAM_UNINST_FILENAME "$INSTDIR\deluge-uninst.exe"
-BrandingText "Deluge Windows Installer v${DELUGE_INSTALLER_VERSION}"
+BrandingText "${PROGRAM_NAME} Windows Installer v${DELUGE_INSTALLER_VERSION}"
Name "${PROGRAM_NAME} ${PROGRAM_VERSION}"
-OutFile "${BUILD_DIR}\deluge-${PROGRAM_VERSION}-win32-setup.exe"
+OutFile "${BUILD_DIR}\${INSTALLER_FILENAME}"
InstallDir "$PROGRAMFILES\Deluge"
ShowInstDetails show
@@ -120,47 +160,38 @@ ShowUnInstDetails show
# Install main application
Section "Deluge Bittorrent Client" Section1
- SectionIn RO
- !include "install_files.nsh"
-
- SetOverwrite ifnewer
- SetOutPath "$INSTDIR"
- File "..\..\LICENSE"
+ SectionIn RO
+ !include "install_files.nsh"
+
+ SetOverwrite ifnewer
+ SetOutPath "$INSTDIR"
+ File ${LICENSE_FILEPATH}
+ WriteIniStr "$INSTDIR\homepage.url" "InternetShortcut" "URL" "${PROGRAM_WEB_SITE}"
+
+ !insertmacro MUI_STARTMENU_WRITE_BEGIN Application
+ SetShellVarContext all
+ CreateDirectory "$SMPROGRAMS\$StartMenuFolder"
+ CreateShortCut "$SMPROGRAMS\$StartMenuFolder\Deluge.lnk" "$INSTDIR\deluge.exe"
+ CreateShortCut "$SMPROGRAMS\$StartMenuFolder\Website.lnk" "$INSTDIR\homepage.url"
+ CreateShortCut "$SMPROGRAMS\$StartMenuFolder\Uninstall Deluge.lnk" ${PROGRAM_UNINST_FILENAME}
+ !insertmacro MUI_STARTMENU_WRITE_END
SectionEnd
-Section -StartMenu_Desktop_Links
- WriteIniStr "$INSTDIR\homepage.url" "InternetShortcut" "URL" "${PROGRAM_WEB_SITE}"
- # create shortcuts for all users
- SetShellVarContext all
- CreateDirectory "$SMPROGRAMS\Deluge"
- CreateShortCut "$SMPROGRAMS\Deluge\Deluge.lnk" "$INSTDIR\deluge.exe"
- CreateShortCut "$SMPROGRAMS\Deluge\Website.lnk" "$INSTDIR\homepage.url"
- CreateShortCut "$SMPROGRAMS\Deluge\Uninstall Deluge.lnk" "$INSTDIR\deluge-uninst.exe"
- CreateShortCut "$DESKTOP\Deluge.lnk" "$INSTDIR\deluge.exe"
-SectionEnd
-
-Section -Uninstaller
- WriteUninstaller "$INSTDIR\deluge-uninst.exe"
- WriteRegStr ${PROGRAM_UNINST_ROOT_KEY} "${PROGRAM_UNINST_KEY}" "DisplayName" "$(^Name)"
- WriteRegStr ${PROGRAM_UNINST_ROOT_KEY} "${PROGRAM_UNINST_KEY}" "UninstallString" "$INSTDIR\deluge-uninst.exe"
-SectionEnd
-
-# Create file association for .torrent
+# Create .torrent file association.
Section "Associate .torrent files with Deluge" Section2
- # Set up file association for .torrent files
- DeleteRegKey HKCR ".torrent"
- WriteRegStr HKCR ".torrent" "" "Deluge"
- WriteRegStr HKCR ".torrent" "Content Type" "application/x-bittorrent"
-
- DeleteRegKey HKCR "Deluge"
- WriteRegStr HKCR "Deluge" "" "Deluge"
- WriteRegStr HKCR "Deluge\Content Type" "" "application/x-bittorrent"
- WriteRegStr HKCR "Deluge\DefaultIcon" "" "$INSTDIR\deluge.exe,0"
- WriteRegStr HKCR "Deluge\shell" "" "open"
- WriteRegStr HKCR "Deluge\shell\open\command" "" '"$INSTDIR\deluge.exe" "%1"'
+ DeleteRegKey HKCR ".torrent"
+ WriteRegStr HKCR ".torrent" "" "Deluge"
+ WriteRegStr HKCR ".torrent" "Content Type" "application/x-bittorrent"
+
+ DeleteRegKey HKCR "Deluge"
+ WriteRegStr HKCR "Deluge" "" "Deluge"
+ WriteRegStr HKCR "Deluge\Content Type" "" "application/x-bittorrent"
+ WriteRegStr HKCR "Deluge\DefaultIcon" "" "$INSTDIR\deluge.exe,0"
+ WriteRegStr HKCR "Deluge\shell" "" "open"
+ WriteRegStr HKCR "Deluge\shell\open\command" "" '"$INSTDIR\deluge.exe" "%1"'
SectionEnd
-# Create magnet uri association
+# Create magnet uri association.
Section "Associate Magnet URI links with Deluge" Section3
DeleteRegKey HKCR "Magnet"
WriteRegStr HKCR "Magnet" "" "URL:Magnet Protocol"
@@ -173,33 +204,56 @@ LangString DESC_Section2 ${LANG_ENGLISH} "Select this option to let Deluge handl
LangString DESC_Section3 ${LANG_ENGLISH} "Select this option to let Deluge handle Magnet URI links from the web-browser."
!insertmacro MUI_FUNCTION_DESCRIPTION_BEGIN
- !insertmacro MUI_DESCRIPTION_TEXT ${Section1} $(DESC_Section1)
- !insertmacro MUI_DESCRIPTION_TEXT ${Section2} $(DESC_Section2)
- !insertmacro MUI_DESCRIPTION_TEXT ${Section3} $(DESC_Section3)
+ !insertmacro MUI_DESCRIPTION_TEXT ${Section1} $(DESC_Section1)
+ !insertmacro MUI_DESCRIPTION_TEXT ${Section2} $(DESC_Section2)
+ !insertmacro MUI_DESCRIPTION_TEXT ${Section3} $(DESC_Section3)
!insertmacro MUI_FUNCTION_DESCRIPTION_END
+# Create uninstaller.
+Section -Uninstaller
+ WriteUninstaller ${PROGRAM_UNINST_FILENAME}
+ WriteRegStr ${PROGRAM_UNINST_ROOT_KEY} "${PROGRAM_UNINST_KEY}" "DisplayName" "$(^Name)"
+ WriteRegStr ${PROGRAM_UNINST_ROOT_KEY} "${PROGRAM_UNINST_KEY}" "UninstallString" ${PROGRAM_UNINST_FILENAME}
+SectionEnd
+
# --- Uninstallation section ---
Section Uninstall
- Delete "$INSTDIR\LICENSE"
- Delete "$INSTDIR\homepage.url"
- Delete "$INSTDIR\deluge-uninst.exe"
- !include "uninstall_files.nsh"
-
- SetShellVarContext all
- Delete "$SMPROGRAMS\Deluge\Deluge.lnk"
- Delete "$SMPROGRAMS\Deluge\Uninstall Deluge.lnk"
- Delete "$SMPROGRAMS\Deluge\Deluge Website.lnk"
- RmDir "$SMPROGRAMS\Deluge"
- Delete "$DESKTOP\Deluge.lnk"
-
- DeleteRegKey ${PROGRAM_UNINST_ROOT_KEY} "${PROGRAM_UNINST_KEY}"
-
- # Only delete the .torrent association if Deluge owns it
- ReadRegStr $1 HKCR ".torrent" ""
- StrCmp $1 "Deluge" 0 DELUGE_skip_delete
- # Delete the key since it is owned by Deluge; afterwards there is no .torrent association
- DeleteRegKey HKCR ".torrent"
- DELUGE_skip_delete:
- # This key is only used by Deluge, so we should always delete it
- DeleteRegKey HKCR "Deluge"
+ # Delete Deluge files.
+ Delete "$INSTDIR\LICENSE"
+ Delete "$INSTDIR\homepage.url"
+ Delete ${PROGRAM_UNINST_FILENAME}
+ !include "uninstall_files.nsh"
+
+ # Delete Start Menu items.
+ !insertmacro MUI_STARTMENU_GETFOLDER Application $StartMenuFolder
+ SetShellVarContext all
+ Delete "$SMPROGRAMS\$StartMenuFolder\Deluge.lnk"
+ Delete "$SMPROGRAMS\$StartMenuFolder\Uninstall Deluge.lnk"
+ Delete "$SMPROGRAMS\$StartMenuFolder\Deluge Website.lnk"
+ RmDir "$SMPROGRAMS\$StartMenuFolder"
+ DeleteRegKey /ifempty HKCR "Software\Deluge"
+
+ Delete "$DESKTOP\Deluge.lnk"
+
+ # Delete registry keys.
+ DeleteRegKey ${PROGRAM_UNINST_ROOT_KEY} "${PROGRAM_UNINST_KEY}"
+ # Only delete the .torrent association if Deluge owns it
+ ReadRegStr $1 HKCR ".torrent" ""
+ StrCmp $1 "Deluge" 0 DELUGE_skip_delete
+ # Delete the key since it is owned by Deluge; afterwards there is no .torrent association
+ DeleteRegKey HKCR ".torrent"
+ DELUGE_skip_delete:
+ # This key is only used by Deluge, so we should always delete it
+ DeleteRegKey HKCR "Deluge"
SectionEnd
+
+# Add version info to installer properties.
+VIProductVersion "${DELUGE_INSTALLER_VERSION}.0.0"
+VIAddVersionKey ProductName ${PROGRAM_NAME}
+VIAddVersionKey Comments "Deluge Bittorrent Client"
+VIAddVersionKey CompanyName "Deluge Team"
+VIAddVersionKey LegalCopyright "Deluge Team"
+VIAddVersionKey FileDescription "${PROGRAM_NAME} Application Installer"
+VIAddVersionKey FileVersion "${DELUGE_INSTALLER_VERSION}.0.0"
+VIAddVersionKey ProductVersion "${PROGRAM_VERSION}.0"
+VIAddVersionKey OriginalFilename ${INSTALLER_FILENAME}