1; Modified to conform to Modern UI 2.0
2
3!define PROJECT_PATH ".."
4
5!define PRODUCT_NAME "%(display-name)s"
6!define PRODUCT_VERSION "%(version)s"
7!define PRODUCT_PUBLISHER "MusicBrainz"
8!define PRODUCT_DESCRIPTION "%(description)s"
9!define PRODUCT_URL "%(url)s"
10!define PRODUCT_UNINST_KEY "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCT_NAME}"
11!define PRODUCT_UNINST_ROOT_KEY "HKLM"
12
13SetCompressor /FINAL /SOLID LZMA
14Name "${PRODUCT_NAME} ${PRODUCT_VERSION}"
15OutFile "picard-setup-${PRODUCT_VERSION}.exe"
16ShowInstDetails show
17ShowUnInstDetails show
18BrandingText " "
19Unicode true
20; We need this so Windows 7/Vista lets us install what we need to
21RequestExecutionLevel admin
22
23; The default installation directory
24InstallDir "$PROGRAMFILES64\${PRODUCT_NAME}"
25
26; The default installation directory
27InstallDirRegKey HKLM "Software\MusicBrainz\${PRODUCT_NAME}" "InstallDir"
28
29!include "MUI2.nsh"
30!include "InstallOptions.nsh"
31!include "x64.nsh"
32
33; MUI Settings
34
35; Make installer pretty
36!define MUI_HEADERIMAGE
37!define MUI_HEADERIMAGE_RIGHT
38!define MUI_HEADERIMAGE_BITMAP "${PROJECT_PATH}\installer\images\hx.bmp" ;
39!define MUI_WELCOMEFINISHPAGE_BITMAP "${PROJECT_PATH}\installer\images\wiz.bmp"
40!define MUI_ICON "${PROJECT_PATH}\installer\images\tango-install.ico"
41!define MUI_UNICON "${NSISDIR}\Contrib\Graphics\Icons\classic-uninstall.ico"
42
43; Abort Warning
44!define MUI_ABORTWARNING
45
46; Welcome page
47!define MUI_WELCOMEPAGE_TITLE_3LINES
48!insertmacro MUI_PAGE_WELCOME
49
50; License page
51!insertmacro MUI_PAGE_LICENSE "${PROJECT_PATH}\COPYING.txt"
52
53; Directory page
54!insertmacro MUI_PAGE_DIRECTORY
55
56; Components page
57!define MUI_COMPONENTSPAGE_SMALLDESC
58!insertmacro MUI_PAGE_COMPONENTS
59
60; Instfiles page
61!insertmacro MUI_PAGE_INSTFILES
62
63; Finish page
64!define MUI_FINISHPAGE_TITLE_3LINES
65!define MUI_FINISHPAGE_RUN "$WINDIR\explorer.exe"
66!define MUI_FINISHPAGE_RUN_PARAMETERS "$\"$INSTDIR\picard.exe$\""
67!insertmacro MUI_PAGE_FINISH
68
69; Uninstaller pages
70!insertmacro MUI_UNPAGE_CONFIRM
71UninstPage custom un.RemoveSettingsPage
72!insertmacro MUI_UNPAGE_INSTFILES
73!define MUI_UNPAGE_FINISH_TITLE_3LINES
74!insertmacro MUI_UNPAGE_FINISH
75
76; Reserve files
77ReserveFile "removeSettings.ini"
78ReserveFile "${NSISDIR}\Plugins\x86-unicode\InstallOptions.dll"
79
80; Language handling
81!macro LOAD_LANGUAGE LANGUAGE
82  !insertmacro MUI_LANGUAGE "${LANGUAGE}"
83  !include "i18n\out\${LANGUAGE}.nsh"
84!macroend
85
86; Language files
87!insertmacro LOAD_LANGUAGE "English"
88; !insertmacro LOAD_LANGUAGE "Arabic"
89!insertmacro LOAD_LANGUAGE "Albanian"
90; !insertmacro LOAD_LANGUAGE "Catalan"
91; !insertmacro LOAD_LANGUAGE "Czech"
92; !insertmacro LOAD_LANGUAGE "Danish"
93!insertmacro LOAD_LANGUAGE "Dutch"
94!insertmacro LOAD_LANGUAGE "Estonian"
95!insertmacro LOAD_LANGUAGE "Finnish"
96!insertmacro LOAD_LANGUAGE "French"
97!insertmacro LOAD_LANGUAGE "German"
98; !insertmacro LOAD_LANGUAGE "Greek"
99!insertmacro LOAD_LANGUAGE "Hebrew"
100!insertmacro LOAD_LANGUAGE "Italian"
101!insertmacro LOAD_LANGUAGE "Japanese"
102; !insertmacro LOAD_LANGUAGE "Korean"
103; !insertmacro LOAD_LANGUAGE "Norwegian"
104; !insertmacro LOAD_LANGUAGE "Polish"
105; !insertmacro LOAD_LANGUAGE "Portuguese"
106!insertmacro LOAD_LANGUAGE "PortugueseBR"
107!insertmacro LOAD_LANGUAGE "Russian"
108!insertmacro LOAD_LANGUAGE "SimpChinese"
109; !insertmacro LOAD_LANGUAGE "Slovak"
110; !insertmacro LOAD_LANGUAGE "Slovenian"
111!insertmacro LOAD_LANGUAGE "Spanish"
112; !insertmacro LOAD_LANGUAGE "Swedish"
113!insertmacro LOAD_LANGUAGE "TradChinese"
114; !insertmacro LOAD_LANGUAGE "Turkish"
115; !insertmacro LOAD_LANGUAGE "Ukrainian"
116
117; Adds info to installer
118VIProductVersion "%(file-version)s"
119VIAddVersionKey /LANG=${LANG_ENGLISH} "ProductName" "${PRODUCT_NAME}"
120VIAddVersionKey /LANG=${LANG_ENGLISH} "Comments" "${PRODUCT_DESCRIPTION}"
121VIAddVersionKey /LANG=${LANG_ENGLISH} "CompanyName" "${PRODUCT_PUBLISHER}"
122VIAddVersionKey /LANG=${LANG_ENGLISH} "LegalCopyright" "© ${PRODUCT_PUBLISHER} under the GNU GPLv2."
123VIAddVersionKey /LANG=${LANG_ENGLISH} "FileDescription" "Installation for ${PRODUCT_NAME}"
124VIAddVersionKey /LANG=${LANG_ENGLISH} "FileVersion" "%(version)s"
125VIAddVersionKey /LANG=${LANG_ENGLISH} "ProductVersion" "%(version)s"
126
127; Install
128Section "!$(SectionRequired)" required
129  SectionIn RO
130    SetOutPath "$INSTDIR"
131    SetOverwrite on
132
133    ; Files
134    File /r /x "locale" "${PROJECT_PATH}\dist\picard\"
135
136    ; Write the installation path into the registry
137    WriteRegStr HKLM "Software\MusicBrainz\${PRODUCT_NAME}" "InstallDir" "$INSTDIR"
138
139    ; Create uninstaller
140    WriteUninstaller "$INSTDIR\uninst.exe"
141    WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "DisplayName" "${PRODUCT_NAME}"
142    WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "DisplayIcon" "$INSTDIR\picard.exe"
143    WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "DisplayVersion" "${PRODUCT_VERSION}"
144    WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "Publisher" "${PRODUCT_PUBLISHER}"
145    WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "InstallSource" "$INSTDIR\"
146    WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "Comments" "${PRODUCT_DESCRIPTION}"
147    WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "URLInfoAbout" "${PRODUCT_URL}"
148    WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "UninstallString" "$INSTDIR\uninst.exe"
149SectionEnd
150
151Section "$(SectionLanguages)" lang
152  RMDir "$INSTDIR\locale"
153  CreateDirectory "$INSTDIR\locale"
154  SetOutPath "$INSTDIR\locale"
155  File /r "${PROJECT_PATH}\dist\picard\locale\"
156SectionEnd
157
158SectionGroup "$(SectionShortcuts)" shortcuts
159  Section "$(SectionStartmenu)" startmenu
160    SetShellVarContext all
161    SetOutPath "$INSTDIR"
162    CreateShortCut "$SMPROGRAMS\${PRODUCT_NAME}.lnk" "$INSTDIR\picard.exe" \
163      "" "" "" SW_SHOWNORMAL "" "${PRODUCT_DESCRIPTION}"
164  SectionEnd
165
166  Section "$(SectionDesktop)" desktop
167    SetShellVarContext all
168    SetOutPath "$INSTDIR"
169    CreateShortCut "$DESKTOP\${PRODUCT_NAME}.lnk" "$INSTDIR\picard.exe" \
170      "" "" "" SW_SHOWNORMAL "" "${PRODUCT_DESCRIPTION}"
171  SectionEnd
172SectionGroupEnd
173
174; Uninstall
175Function un.RemoveSettingsPage
176  !insertmacro MUI_DEFAULT MUI_UNCONFIRMPAGE_TEXT_TOP ""
177  !insertmacro MUI_DEFAULT MUI_UNCONFIRMPAGE_TEXT_LOCATION ""
178  !insertmacro INSTALLOPTIONS_DISPLAY "removeSettings.ini"
179FunctionEnd
180
181Section Uninstall
182  RMDir /r "$INSTDIR"
183
184  SetShellVarContext all
185  Delete "$DESKTOP\${PRODUCT_NAME}.lnk"
186
187  SetShellVarContext all
188  Delete "$SMPROGRAMS\${PRODUCT_NAME}.lnk"
189
190  SetShellVarContext all
191  Delete "$QUICKLAUNCH\${PRODUCT_NAME}.lnk"
192
193  DeleteRegKey ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}"
194  DeleteRegKey HKLM "Software\MusicBrainz\${PRODUCT_NAME}"
195
196  !insertmacro INSTALLOPTIONS_READ $R0 "removeSettings.ini" "Field 1" "State"
197  StrCmp $R0 "1" 0 +2
198    ; Even more attempts
199    DeleteRegKey HKCU "Software\MusicBrainz\Picard\persist"
200    DeleteRegKey HKCU "Software\MusicBrainz\Picard\setting"
201    DeleteRegKey HKCU "Software\MusicBrainz\Picard"
202SectionEnd
203
204; Checks whether program is running.
205!define WNDCLASS "Qt5QWindowIcon"
206!define WNDTITLE "${PRODUCT_NAME}"
207Function un.onInit
208  FindWindow $0 "${WNDCLASS}" "${WNDTITLE}"
209  StrCmp $0 0 continueInstall
210    MessageBox MB_ICONSTOP|MB_OK "$(MsgApplicationRunning)"
211    Abort
212  continueInstall:
213  !insertmacro INSTALLOPTIONS_EXTRACT "removeSettings.ini"
214  !insertmacro INSTALLOPTIONS_WRITE "removeSettings.ini" "Field 1" "Text" "$(OptionRemoveSettings)"
215FunctionEnd
216
217Function .onInit
218  ; Abort installation if this is not a 64 bit system
219  ${IfNot} ${RunningX64}
220    MessageBox MB_ICONSTOP|MB_OK "$(MsgRequires64Bit)"
221    Abort
222  ${EndIf}
223
224  ; Abort installation if Picard is currently running
225  FindWindow $0 "${WNDCLASS}" "${WNDTITLE}"
226  StrCmp $0 0 continueInstall
227    MessageBox MB_ICONSTOP|MB_OK "$(MsgApplicationRunning)"
228    Abort
229  continueInstall:
230
231  ; Uninstall previous installation
232  ReadRegStr $R0 HKLM "${PRODUCT_UNINST_KEY}" "UninstallString"
233  StrCmp $R0 "" skipUninstall
234
235  MessageBox MB_OKCANCEL|MB_ICONEXCLAMATION "$(MsgAlreadyInstalled)" IDOK uninstall
236  Abort
237
238  uninstall:
239  ClearErrors
240  Exec $R0
241
242  ; Check if previous install location was inside $PROGRAMFILES32
243  ReadRegStr $R0 HKLM "Software\MusicBrainz\${PRODUCT_NAME}" "InstallDir"
244  StrLen $R1 $PROGRAMFILES32
245  StrCpy $R2 $R0 $R1
246  StrCmp $R2 $PROGRAMFILES32 0 skipUninstall
247    StrCpy $INSTDIR "$PROGRAMFILES64\${PRODUCT_NAME}"
248
249  skipUninstall:
250  !insertmacro UnselectSection ${desktop}
251FunctionEnd
252
253!insertmacro MUI_FUNCTION_DESCRIPTION_BEGIN
254  !insertmacro MUI_DESCRIPTION_TEXT ${required} "$(MuiDescriptionRequired)"
255  !insertmacro MUI_DESCRIPTION_TEXT ${lang} "$(MuiDescriptionLang)"
256  !insertmacro MUI_DESCRIPTION_TEXT ${shortcuts} "$(MuiDescriptionShortcuts)"
257  !insertmacro MUI_DESCRIPTION_TEXT ${desktop} "$(MuiDescriptionDesktop)"
258  !insertmacro MUI_DESCRIPTION_TEXT ${startmenu} "$(MuiDescriptionStartMenu)"
259!insertmacro MUI_FUNCTION_DESCRIPTION_END
260