1Name "@PACKAGE_NAME@"
2SetCompressor /SOLID lzma
3Unicode true
4# BrandingText " "
5# Request application privileges for Windows Vista
6RequestExecutionLevel admin
7
8# Defines
9!define SOURCE_FILES "@CMAKE_SOURCE_DIR@/src"
10!define BINARY_FILES "@CMAKE_BINARY_DIR@/src"
11!define FUIDSYNTH_FILES "@FLUIDSYNTH_PREFIX@/bin"
12!define REGKEY "SOFTWARE\$(^Name)"
13!define VERSION @PROJECT_VERSION@
14!define PROGNAME "@PACKAGE_NAME@"
15!define COMPANY "rncbc.org"
16!define URL https://qsynth.sourceforge.io
17
18# Included files
19!include Sections.nsh
20!include MUI2.nsh
21!include Library.nsh
22!include x64.nsh
23
24# MUI defines
25!define MUI_ICON "${NSISDIR}\Contrib\Graphics\Icons\nsis3-install.ico"
26!define MUI_UNICON "${NSISDIR}\Contrib\Graphics\Icons\nsis3-uninstall.ico"
27!define MUI_STARTMENUPAGE_REGISTRY_ROOT HKLM
28!define MUI_STARTMENUPAGE_NODISABLE
29!define MUI_STARTMENUPAGE_REGISTRY_KEY ${REGKEY}
30!define MUI_STARTMENUPAGE_REGISTRY_VALUENAME StartMenuGroup
31!define MUI_STARTMENUPAGE_DEFAULTFOLDER "@PACKAGE_NAME@"
32!define MUI_FINISHPAGE_NOAUTOCLOSE
33!define MUI_UNFINISHPAGE_NOAUTOCLOSE
34
35# Variables
36Var StartMenuGroup
37Var LibInstall
38
39# Installer pages
40!define MUI_WELCOMEPAGE_TITLE_3LINES
41!insertmacro MUI_PAGE_WELCOME
42!insertmacro MUI_PAGE_LICENSE ${SOURCE_FILES}/win32/gpl-2.0.rtf
43!insertmacro MUI_PAGE_DIRECTORY
44!insertmacro MUI_PAGE_STARTMENU Application $StartMenuGroup
45!insertmacro MUI_PAGE_INSTFILES
46!define MUI_FINISHPAGE_TITLE_3LINES
47!insertmacro MUI_PAGE_FINISH
48
49!define MUI_WELCOMEPAGE_TITLE_3LINES
50!insertmacro MUI_UNPAGE_WELCOME
51!insertmacro MUI_UNPAGE_CONFIRM
52!insertmacro MUI_UNPAGE_INSTFILES
53!define MUI_FINISHPAGE_TITLE_3LINES
54!insertmacro MUI_UNPAGE_FINISH
55
56# Installer languages
57!insertmacro MUI_LANGUAGE "Czech"
58!insertmacro MUI_LANGUAGE "English"
59!insertmacro MUI_LANGUAGE "French"
60!insertmacro MUI_LANGUAGE "German"
61!insertmacro MUI_LANGUAGE "Russian"
62!insertmacro MUI_LANGUAGE "Serbian"
63!insertmacro MUI_LANGUAGE "Spanish"
64
65# Installer attributes
66OutFile qsynth-${VERSION}-setup.exe
67#InstallDir $PROGRAMFILES\QSynth
68CRCCheck on
69XPStyle on
70ShowInstDetails show
71VIProductVersion @PROJECT_VERSION@.0
72VIAddVersionKey ProductName @PACKAGE_NAME@
73VIAddVersionKey ProductVersion ${VERSION}
74VIAddVersionKey CompanyName "${COMPANY}"
75VIAddVersionKey CompanyWebsite "${URL}"
76VIAddVersionKey FileVersion ${VERSION}
77VIAddVersionKey FileDescription "@PROJECT_DESCRIPTION@"
78VIAddVersionKey LegalCopyright "Copyright (C) 2003-2021, rncbc aka Rui Nuno Capela. All rights reserved."
79InstallDirRegKey HKLM "${REGKEY}" Path
80ShowUninstDetails show
81Icon ${SOURCE_FILES}\images\qsynth.ico
82UninstallIcon ${SOURCE_FILES}\images\qsynth.ico
83
84# Installer sections
85Section -Main SEC0000
86	CreateDirectory $INSTDIR\bearer
87	CreateDirectory $INSTDIR\iconengines
88	CreateDirectory $INSTDIR\imageformats
89	CreateDirectory $INSTDIR\platforms
90	CreateDirectory $INSTDIR\styles
91	CreateDirectory $INSTDIR\translations
92    SetOutPath $INSTDIR
93    SetOverwrite on
94    File ${BINARY_FILES}\qsynth.exe
95    File ${FUIDSYNTH_FILES}\fluidsynth.exe
96    SetOutPath $INSTDIR\translations
97    File ${BINARY_FILES}\qsynth_cs.qm
98    File ${BINARY_FILES}\qsynth_de.qm
99    File ${BINARY_FILES}\qsynth_es.qm
100    File ${BINARY_FILES}\qsynth_fr.qm
101    File ${BINARY_FILES}\qsynth_ru.qm
102    File ${BINARY_FILES}\qsynth_sr.qm
103	File ${BINARY_FILES}\translations\qt_cs.qm
104	File ${BINARY_FILES}\translations\qt_de.qm
105	File ${BINARY_FILES}\translations\qt_es.qm
106	File ${BINARY_FILES}\translations\qt_fr.qm
107	File ${BINARY_FILES}\translations\qt_ru.qm
108
109    !insertmacro InstallLib DLL NOTSHARED REBOOT_PROTECTED ${FUIDSYNTH_FILES}\libfluidsynth-2.dll $INSTDIR\libfluidsynth-2.dll $INSTDIR
110    !insertmacro InstallLib DLL NOTSHARED REBOOT_PROTECTED ${FUIDSYNTH_FILES}\libglib-2.0-0.dll $INSTDIR\libglib-2.0-0.dll $INSTDIR
111    !insertmacro InstallLib DLL NOTSHARED REBOOT_PROTECTED ${FUIDSYNTH_FILES}\libgobject-2.0-0.dll $INSTDIR\libgobject-2.0-0.dll $INSTDIR
112    !insertmacro InstallLib DLL NOTSHARED REBOOT_PROTECTED ${FUIDSYNTH_FILES}\libgthread-2.0-0.dll $INSTDIR\libgthread-2.0-0.dll $INSTDIR
113    !insertmacro InstallLib DLL NOTSHARED REBOOT_PROTECTED ${FUIDSYNTH_FILES}\libinstpatch-2.dll $INSTDIR\libinstpatch-2.dll $INSTDIR
114    !insertmacro InstallLib DLL NOTSHARED REBOOT_PROTECTED ${FUIDSYNTH_FILES}\libintl-8.dll $INSTDIR\libintl-8.dll $INSTDIR
115    !insertmacro InstallLib DLL NOTSHARED REBOOT_PROTECTED ${FUIDSYNTH_FILES}\libsndfile-1.dll $INSTDIR\libsndfile-1.dll $INSTDIR
116    !insertmacro InstallLib DLL NOTSHARED REBOOT_PROTECTED ${BINARY_FILES}\Qt5Core.dll $INSTDIR\Qt5Core.dll $INSTDIR
117    !insertmacro InstallLib DLL NOTSHARED REBOOT_PROTECTED ${BINARY_FILES}\Qt5Gui.dll $INSTDIR\Qt5Gui.dll $INSTDIR
118    !insertmacro InstallLib DLL NOTSHARED REBOOT_PROTECTED ${BINARY_FILES}\Qt5Network.dll $INSTDIR\Qt5Network.dll $INSTDIR
119    !insertmacro InstallLib DLL NOTSHARED REBOOT_PROTECTED ${BINARY_FILES}\Qt5Svg.dll $INSTDIR\Qt5Svg.dll $INSTDIR
120    !insertmacro InstallLib DLL NOTSHARED REBOOT_PROTECTED ${BINARY_FILES}\Qt5Widgets.dll $INSTDIR\Qt5Widgets.dll $INSTDIR
121    !insertmacro InstallLib DLL NOTSHARED REBOOT_PROTECTED ${BINARY_FILES}\libGLESv2.dll $INSTDIR\libGLESv2.dll $INSTDIR
122    !insertmacro InstallLib DLL NOTSHARED REBOOT_PROTECTED ${BINARY_FILES}\libEGL.dll $INSTDIR\libEGL.dll $INSTDIR
123    !insertmacro InstallLib DLL NOTSHARED REBOOT_PROTECTED ${BINARY_FILES}\D3Dcompiler_47.dll $INSTDIR\D3Dcompiler_47.dll $INSTDIR
124    !insertmacro InstallLib DLL NOTSHARED REBOOT_PROTECTED ${BINARY_FILES}\opengl32sw.dll $INSTDIR\opengl32sw.dll $INSTDIR
125    !insertmacro InstallLib DLL NOTSHARED REBOOT_PROTECTED ${BINARY_FILES}\libgcc_s_seh-1.dll $INSTDIR\libgcc_s_seh-1.dll $INSTDIR
126    !insertmacro InstallLib DLL NOTSHARED REBOOT_PROTECTED ${BINARY_FILES}\libstdc++-6.dll $INSTDIR\libstdc++-6.dll $INSTDIR
127    !insertmacro InstallLib DLL NOTSHARED REBOOT_PROTECTED ${BINARY_FILES}\libwinpthread-1.dll $INSTDIR\libwinpthread-1.dll $INSTDIR
128	!insertmacro InstallLib DLL NOTSHARED REBOOT_PROTECTED ${BINARY_FILES}\bearer\qgenericbearer.dll $INSTDIR\bearer\qgenericbearer.dll $INSTDIR
129	!insertmacro InstallLib DLL NOTSHARED REBOOT_PROTECTED ${BINARY_FILES}\iconengines\qsvgicon.dll $INSTDIR\iconengines\qsvgicon.dll $INSTDIR
130	!insertmacro InstallLib DLL NOTSHARED REBOOT_PROTECTED ${BINARY_FILES}\imageformats\qgif.dll $INSTDIR\imageformats\qgif.dll $INSTDIR
131	!insertmacro InstallLib DLL NOTSHARED REBOOT_PROTECTED ${BINARY_FILES}\imageformats\qicns.dll $INSTDIR\imageformats\qicns.dll $INSTDIR
132	!insertmacro InstallLib DLL NOTSHARED REBOOT_PROTECTED ${BINARY_FILES}\imageformats\qico.dll $INSTDIR\imageformats\qico.dll $INSTDIR
133	!insertmacro InstallLib DLL NOTSHARED REBOOT_PROTECTED ${BINARY_FILES}\imageformats\qjpeg.dll $INSTDIR\imageformats\qjpeg.dll $INSTDIR
134	!insertmacro InstallLib DLL NOTSHARED REBOOT_PROTECTED ${BINARY_FILES}\imageformats\qsvg.dll $INSTDIR\imageformats\qsvg.dll $INSTDIR
135	!insertmacro InstallLib DLL NOTSHARED REBOOT_PROTECTED ${BINARY_FILES}\imageformats\qtga.dll $INSTDIR\imageformats\qtga.dll $INSTDIR
136	!insertmacro InstallLib DLL NOTSHARED REBOOT_PROTECTED ${BINARY_FILES}\imageformats\qtiff.dll $INSTDIR\imageformats\qtiff.dll $INSTDIR
137	!insertmacro InstallLib DLL NOTSHARED REBOOT_PROTECTED ${BINARY_FILES}\imageformats\qwbmp.dll $INSTDIR\imageformats\qwbmp.dll $INSTDIR
138	!insertmacro InstallLib DLL NOTSHARED REBOOT_PROTECTED ${BINARY_FILES}\imageformats\qwebp.dll $INSTDIR\imageformats\qwebp.dll $INSTDIR
139	!insertmacro InstallLib DLL NOTSHARED REBOOT_PROTECTED ${BINARY_FILES}\platforms\qwindows.dll $INSTDIR\platforms\qwindows.dll $INSTDIR
140	!insertmacro InstallLib DLL NOTSHARED REBOOT_PROTECTED ${BINARY_FILES}\styles\qwindowsvistastyle.dll $INSTDIR\styles\qwindowsvistastyle.dll $INSTDIR
141
142    WriteRegStr HKLM "${REGKEY}\Components" Main 1
143SectionEnd
144
145Section -post SEC0001
146    WriteRegStr HKLM "${REGKEY}" Path $INSTDIR
147    SetOutPath $INSTDIR
148    WriteUninstaller $INSTDIR\uninstall.exe
149    !insertmacro MUI_STARTMENU_WRITE_BEGIN Application
150    CreateDirectory $SMPROGRAMS\$StartMenuGroup
151    CreateShortcut "$SMPROGRAMS\$StartMenuGroup\Uninstall $(^Name).lnk" $INSTDIR\uninstall.exe
152    CreateShortcut "$SMPROGRAMS\$StartMenuGroup\fluidsynth.lnk" $INSTDIR\fluidsynth.exe
153    CreateShortcut "$SMPROGRAMS\$StartMenuGroup\$(^Name).lnk" $INSTDIR\qsynth.exe
154    !insertmacro MUI_STARTMENU_WRITE_END
155    WriteRegStr HKLM "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\$(^Name)" DisplayName "$(^Name)"
156    WriteRegStr HKLM "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\$(^Name)" DisplayVersion "${VERSION}"
157    WriteRegStr HKLM "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\$(^Name)" Publisher "${COMPANY}"
158    WriteRegStr HKLM "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\$(^Name)" URLInfoAbout "${URL}"
159    WriteRegStr HKLM "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\$(^Name)" DisplayIcon $INSTDIR\uninstall.exe
160    WriteRegStr HKLM "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\$(^Name)" UninstallString $INSTDIR\uninstall.exe
161    WriteRegDWORD HKLM "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\$(^Name)" NoModify 1
162    WriteRegDWORD HKLM "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\$(^Name)" NoRepair 1
163SectionEnd
164
165# Macro for selecting uninstaller sections
166!macro SELECT_UNSECTION SECTION_NAME UNSECTION_ID
167    Push $R0
168    ReadRegStr $R0 HKLM "${REGKEY}\Components" "${SECTION_NAME}"
169    StrCmp $R0 1 0 next${UNSECTION_ID}
170    !insertmacro SelectSection "${UNSECTION_ID}"
171    GoTo done${UNSECTION_ID}
172next${UNSECTION_ID}:
173    !insertmacro UnselectSection "${UNSECTION_ID}"
174done${UNSECTION_ID}:
175    Pop $R0
176!macroend
177
178# Uninstaller sections
179Section /o -un.Main UNSEC0000
180    Delete /REBOOTOK $INSTDIR\translations\qsynth_cs.qm
181    Delete /REBOOTOK $INSTDIR\translations\qsynth_de.qm
182    Delete /REBOOTOK $INSTDIR\translations\qsynth_es.qm
183    Delete /REBOOTOK $INSTDIR\translations\qsynth_fr.qm
184    Delete /REBOOTOK $INSTDIR\translations\qsynth_ru.qm
185    Delete /REBOOTOK $INSTDIR\translations\qsynth_sr.qm
186    Delete /REBOOTOK $INSTDIR\translations\qt_cs.qm
187    Delete /REBOOTOK $INSTDIR\translations\qt_de.qm
188    Delete /REBOOTOK $INSTDIR\translations\qt_es.qm
189    Delete /REBOOTOK $INSTDIR\translations\qt_fr.qm
190    Delete /REBOOTOK $INSTDIR\translations\qt_ru.qm
191    Delete /REBOOTOK $INSTDIR\fluidsynth.exe
192    Delete /REBOOTOK $INSTDIR\qsynth.exe
193
194    !insertmacro UnInstallLib DLL NOTSHARED REBOOT_PROTECTED $INSTDIR\libfluidsynth-2.dll
195    !insertmacro UnInstallLib DLL NOTSHARED REBOOT_PROTECTED $INSTDIR\libglib-2.0-0.dll
196    !insertmacro UnInstallLib DLL NOTSHARED REBOOT_PROTECTED $INSTDIR\libgobject-2.0-0.dll
197    !insertmacro UnInstallLib DLL NOTSHARED REBOOT_PROTECTED $INSTDIR\libgthread-2.0-0.dll
198    !insertmacro UnInstallLib DLL NOTSHARED REBOOT_PROTECTED $INSTDIR\libinstpatch-2.dll
199    !insertmacro UnInstallLib DLL NOTSHARED REBOOT_PROTECTED $INSTDIR\libintl-8.dll
200    !insertmacro UnInstallLib DLL NOTSHARED REBOOT_PROTECTED $INSTDIR\libsndfile-1.dll
201
202    !insertmacro UnInstallLib DLL NOTSHARED REBOOT_PROTECTED $INSTDIR\Qt5Core.dll
203    !insertmacro UnInstallLib DLL NOTSHARED REBOOT_PROTECTED $INSTDIR\Qt5Gui.dll
204    !insertmacro UnInstallLib DLL NOTSHARED REBOOT_PROTECTED $INSTDIR\Qt5Network.dll
205    !insertmacro UnInstallLib DLL NOTSHARED REBOOT_PROTECTED $INSTDIR\Qt5Svg.dll
206    !insertmacro UnInstallLib DLL NOTSHARED REBOOT_PROTECTED $INSTDIR\Qt5Widgets.dll
207    !insertmacro UnInstallLib DLL NOTSHARED REBOOT_PROTECTED $INSTDIR\libGLESv2.dll
208    !insertmacro UnInstallLib DLL NOTSHARED REBOOT_PROTECTED $INSTDIR\libEGL.dll
209    !insertmacro UnInstallLib DLL NOTSHARED REBOOT_PROTECTED $INSTDIR\D3Dcompiler_47.dll
210    !insertmacro UnInstallLib DLL NOTSHARED REBOOT_PROTECTED $INSTDIR\opengl32sw.dll
211    !insertmacro UnInstallLib DLL NOTSHARED REBOOT_PROTECTED $INSTDIR\libgcc_s_seh-1.dll
212    !insertmacro UnInstallLib DLL NOTSHARED REBOOT_PROTECTED $INSTDIR\libstdc++-6.dll
213    !insertmacro UnInstallLib DLL NOTSHARED REBOOT_PROTECTED $INSTDIR\libwinpthread-1.dll
214
215    !insertmacro UnInstallLib DLL NOTSHARED REBOOT_PROTECTED $INSTDIR\bearer\qgenericbearer.dll
216    !insertmacro UnInstallLib DLL NOTSHARED REBOOT_PROTECTED $INSTDIR\iconengines\qsvgicon.dll
217    !insertmacro UnInstallLib DLL NOTSHARED REBOOT_PROTECTED $INSTDIR\imageformats\qgif.dll
218    !insertmacro UnInstallLib DLL NOTSHARED REBOOT_PROTECTED $INSTDIR\imageformats\qicns.dll
219    !insertmacro UnInstallLib DLL NOTSHARED REBOOT_PROTECTED $INSTDIR\imageformats\qico.dll
220    !insertmacro UnInstallLib DLL NOTSHARED REBOOT_PROTECTED $INSTDIR\imageformats\qjpeg.dll
221    !insertmacro UnInstallLib DLL NOTSHARED REBOOT_PROTECTED $INSTDIR\imageformats\qsvg.dll
222    !insertmacro UnInstallLib DLL NOTSHARED REBOOT_PROTECTED $INSTDIR\imageformats\qtga.dll
223    !insertmacro UnInstallLib DLL NOTSHARED REBOOT_PROTECTED $INSTDIR\imageformats\qtiff.dll
224    !insertmacro UnInstallLib DLL NOTSHARED REBOOT_PROTECTED $INSTDIR\imageformats\qwbmp.dll
225    !insertmacro UnInstallLib DLL NOTSHARED REBOOT_PROTECTED $INSTDIR\imageformats\qwebp.dll
226    !insertmacro UnInstallLib DLL NOTSHARED REBOOT_PROTECTED $INSTDIR\platforms\qwindows.dll
227    !insertmacro UnInstallLib DLL NOTSHARED REBOOT_PROTECTED $INSTDIR\styles\qwindowsvistastyle.dll
228	RMDir /REBOOTOK $INSTDIR\translations
229	RMDir /REBOOTOK $INSTDIR\styles
230	RMDir /REBOOTOK $INSTDIR\platforms
231	RMDir /REBOOTOK $INSTDIR\iconengines
232	RMDir /REBOOTOK $INSTDIR\imageformats
233	RMDir /REBOOTOK $INSTDIR\bearer
234    DeleteRegValue HKLM "${REGKEY}\Components" Main
235SectionEnd
236
237Section -un.post UNSEC0001
238    DeleteRegKey HKLM "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\$(^Name)"
239    Delete /REBOOTOK "$SMPROGRAMS\$StartMenuGroup\Uninstall $(^Name).lnk"
240    Delete /REBOOTOK "$SMPROGRAMS\$StartMenuGroup\fluidsynth.lnk"
241    Delete /REBOOTOK "$SMPROGRAMS\$StartMenuGroup\$(^Name).lnk"
242    Delete /REBOOTOK $INSTDIR\uninstall.exe
243    DeleteRegValue HKLM "${REGKEY}" StartMenuGroup
244    DeleteRegValue HKLM "${REGKEY}" Path
245    DeleteRegKey /IfEmpty HKLM "${REGKEY}\Components"
246    DeleteRegKey /IfEmpty HKLM "${REGKEY}"
247    RmDir /REBOOTOK $SMPROGRAMS\$StartMenuGroup
248    RmDir /REBOOTOK $INSTDIR
249SectionEnd
250
251# Installer functions
252Function .onInit
253    !insertmacro MUI_LANGDLL_DISPLAY
254	${If} ${RunningX64}
255		StrCpy $INSTDIR "$PROGRAMFILES64\${PROGNAME}"
256	${Else}
257		MessageBox MB_OK|MB_ICONSTOP "Sorry, this setup package is for 64 bit systems only."
258		Quit
259	${EndIf}
260    Call GetDXVersion
261    Pop $R3
262    IntCmp $R3 900 +3 0 +3
263        MessageBox "MB_OK" "Requires DirectX 9.0 or later."
264        Abort
265    InitPluginsDir
266    Push $0
267    ReadRegStr $0 HKLM "${REGKEY}" Path
268    ClearErrors
269    StrCmp $0 "" +2
270    StrCpy $LibInstall 1
271    Pop $0
272FunctionEnd
273
274# Uninstaller functions
275Function un.onInit
276    !insertmacro MUI_UNGETLANGUAGE
277    ReadRegStr $INSTDIR HKLM "${REGKEY}" Path
278    !insertmacro MUI_STARTMENU_GETFOLDER Application $StartMenuGroup
279    !insertmacro SELECT_UNSECTION Main ${UNSEC0000}
280FunctionEnd
281
282Function GetDXVersion
283    Push $0
284    Push $1
285
286    ReadRegStr $0 HKLM "Software\Microsoft\DirectX" "Version"
287    IfErrors noDirectX
288
289    StrCpy $1 $0 2 5    ; get the minor version
290    StrCpy $0 $0 2 2    ; get the major version
291    IntOp $0 $0 * 100   ; $0 = major * 100 + minor
292    IntOp $0 $0 + $1
293    Goto done
294
295    noDirectX:
296      StrCpy $0 0
297
298    done:
299      Pop $1
300      Exch $0
301FunctionEnd
302