6206b4877c6e6cb5b0687b5c60944994abbb24fb
[vlc.git] / vlc.win32.nsi.in
1 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;\r
2 ; NSIS installer script for vlc ;\r
3 ; (http://nsis.sourceforge.net) ;\r
4 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;\r
5 \r
6 !define PRODUCT_NAME "VLC media player"\r
7 !define PRODUCT_VERSION '${VERSION}'\r
8 !define PRODUCT_GROUP "VideoLAN"\r
9 !define PRODUCT_PUBLISHER "VideoLAN Team"\r
10 !define PRODUCT_WEB_SITE "http://www.videolan.org"\r
11 !define PRODUCT_DIR_REGKEY "Software\VideoLAN\VLC"\r
12 !define PRODUCT_UNINST_KEY "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCT_NAME}"\r
13 !define PRODUCT_UNINST_ROOT_KEY "HKLM"\r
14 !define PRODUCT_ID "{ea92ef52-afe4-4212-bacb-dfe9fca94cd6}"\r
15 \r
16 !define MUI_LANGDLL_REGISTRY_ROOT "HKLM"\r
17 !define MUI_LANGDLL_REGISTRY_KEY "${PRODUCT_DIR_REGKEY}"\r
18 !define MUI_LANGDLL_REGISTRY_VALUENAME "Language"\r
19 \r
20 @FILE_LIBVLC_DLL@\r
21 @FILE_LIBVLC_CONTROL_DLL@\r
22 \r
23 ;;;;;;;;;;;;;;;;;;;;;;;;;\r
24 ; General configuration ;\r
25 ;;;;;;;;;;;;;;;;;;;;;;;;;\r
26 \r
27 Name "${PRODUCT_GROUP} ${PRODUCT_NAME} ${PRODUCT_VERSION}"\r
28 OutFile ..\vlc-${VERSION}-win32.exe\r
29 InstallDir "$PROGRAMFILES\VideoLAN\VLC"\r
30 InstallDirRegKey HKLM "${PRODUCT_DIR_REGKEY}" ""\r
31 !ifdef NSIS_LZMA_COMPRESS_WHOLE\r
32 SetCompressor lzma\r
33 !else\r
34 SetCompressor /SOLID lzma\r
35 !endif\r
36 ;ShowInstDetails show\r
37 ;ShowUnInstDetails show\r
38 SetOverwrite ifnewer\r
39 CRCCheck on\r
40 \r
41 InstType "Recommended"\r
42 InstType "Minimum"\r
43 InstType "Full"\r
44 \r
45 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;\r
46 ; NSIS Modern User Interface configuration ;\r
47 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;\r
48 \r
49 ; MUI 1.67 compatible ------\r
50   !include "MUI.nsh"\r
51 \r
52 ; MUI Settings\r
53   !define MUI_ABORTWARNING\r
54   !define MUI_ICON "vlc48x48.ico"\r
55   !define MUI_UNICON "vlc48x48.ico"\r
56   !define MUI_COMPONENTSPAGE_SMALLDESC\r
57 \r
58 ; Installer pages\r
59   ; Welcome page\r
60     !define MUI_WELCOMEPAGE_TITLE_3LINES\r
61     !insertmacro MUI_PAGE_WELCOME\r
62   ; License page\r
63     !insertmacro MUI_PAGE_LICENSE "COPYING.txt"\r
64   ; Components page\r
65     !insertmacro MUI_PAGE_COMPONENTS\r
66   ; Directory page\r
67     !insertmacro MUI_PAGE_DIRECTORY\r
68   ; Instfiles page\r
69     !insertmacro MUI_PAGE_INSTFILES\r
70   ; Finish page\r
71     !define MUI_FINISHPAGE_RUN "$INSTDIR\vlc.exe"\r
72     !define MUI_FINISHPAGE_SHOWREADME "$INSTDIR\README.txt"\r
73     !define MUI_FINISHPAGE_SHOWREADME_NOTCHECKED\r
74     !define MUI_FINISHPAGE_LINK "Visit the VideoLAN VLC media player Website"\r
75     !define MUI_FINISHPAGE_LINK_LOCATION "http://www.videolan.org/vlc/"\r
76     !define MUI_FINISHPAGE_NOREBOOTSUPPORT\r
77     !insertmacro MUI_PAGE_FINISH\r
78 \r
79 ; Uninstaller pages\r
80     !insertmacro MUI_UNPAGE_CONFIRM\r
81     !insertmacro MUI_UNPAGE_COMPONENTS\r
82     !insertmacro MUI_UNPAGE_INSTFILES\r
83     !insertmacro MUI_UNPAGE_FINISH\r
84 \r
85 ; Language files\r
86   !insertmacro MUI_LANGUAGE "English" # first language is the default language\r
87   !insertmacro MUI_LANGUAGE "French"\r
88   !insertmacro MUI_LANGUAGE "German"\r
89   !insertmacro MUI_LANGUAGE "Spanish"\r
90   !insertmacro MUI_LANGUAGE "SimpChinese"\r
91   !insertmacro MUI_LANGUAGE "TradChinese"\r
92   !insertmacro MUI_LANGUAGE "Japanese"\r
93   !insertmacro MUI_LANGUAGE "Korean"\r
94   !insertmacro MUI_LANGUAGE "Italian"\r
95   !insertmacro MUI_LANGUAGE "Dutch"\r
96   !insertmacro MUI_LANGUAGE "Danish"\r
97   !insertmacro MUI_LANGUAGE "Swedish"\r
98   !insertmacro MUI_LANGUAGE "Norwegian"\r
99   !insertmacro MUI_LANGUAGE "Finnish"\r
100   !insertmacro MUI_LANGUAGE "Greek"\r
101   !insertmacro MUI_LANGUAGE "Russian"\r
102   !insertmacro MUI_LANGUAGE "Portuguese"\r
103   !insertmacro MUI_LANGUAGE "Arabic"\r
104   !insertmacro MUI_LANGUAGE "Polish"\r
105 \r
106 !insertmacro MUI_RESERVEFILE_LANGDLL\r
107 \r
108 ; Reserve files\r
109   !insertmacro MUI_RESERVEFILE_INSTALLOPTIONS\r
110 \r
111 ; MUI end ------\r
112 \r
113 ;;;;;;;;;;;;;;;;;;;\r
114 ; Extension lists ;\r
115 ;;;;;;;;;;;;;;;;;;;\r
116 \r
117 !macro MacroAudioExtensions _action\r
118   !insertmacro ${_action} ".a52"\r
119   !insertmacro ${_action} ".aac"\r
120   !insertmacro ${_action} ".ac3"\r
121   !insertmacro ${_action} ".dts"\r
122   !insertmacro ${_action} ".flac"\r
123   !insertmacro ${_action} ".mka"\r
124   !insertmacro ${_action} ".mp1"\r
125   !insertmacro ${_action} ".mp2"\r
126   !insertmacro ${_action} ".mp3"\r
127   !insertmacro ${_action} ".ogg"\r
128   !insertmacro ${_action} ".spx"\r
129   !insertmacro ${_action} ".wav"\r
130   !insertmacro ${_action} ".wma"\r
131 !macroend\r
132 \r
133 !macro MacroVideoExtensions _action\r
134   !insertmacro ${_action} ".asf"\r
135   !insertmacro ${_action} ".avi"\r
136   !insertmacro ${_action} ".divx"\r
137   !insertmacro ${_action} ".dv"\r
138   !insertmacro ${_action} ".m1v"\r
139   !insertmacro ${_action} ".m2v"\r
140   !insertmacro ${_action} ".mkv"\r
141   !insertmacro ${_action} ".mov"\r
142   !insertmacro ${_action} ".mp4"\r
143   !insertmacro ${_action} ".mpeg"\r
144   !insertmacro ${_action} ".mpeg1"\r
145   !insertmacro ${_action} ".mpeg2"\r
146   !insertmacro ${_action} ".mpeg4"\r
147   !insertmacro ${_action} ".mpg"\r
148   !insertmacro ${_action} ".mxf"\r
149   !insertmacro ${_action} ".ps"\r
150   !insertmacro ${_action} ".ts"\r
151   !insertmacro ${_action} ".ogm"\r
152   !insertmacro ${_action} ".vob"\r
153   !insertmacro ${_action} ".wmv"\r
154 !macroend\r
155 \r
156 !macro MacroOtherExtensions _action\r
157   !insertmacro ${_action} ".asx"\r
158   !insertmacro ${_action} ".bin"\r
159   !insertmacro ${_action} ".cue"\r
160   !insertmacro ${_action} ".m3u"\r
161   !insertmacro ${_action} ".pls"\r
162   !insertmacro ${_action} ".vlc"\r
163 !macroend\r
164 \r
165 !macro MacroAllExtensions _action\r
166   !insertmacro MacroAudioExtensions ${_action}\r
167   !insertmacro MacroVideoExtensions ${_action}\r
168   !insertmacro MacroOtherExtensions ${_action}\r
169 !macroend\r
170 \r
171 ;;;;;;;;;;;;;;;;;;;;;;;;;;\r
172 ; File type associations ;\r
173 ;;;;;;;;;;;;;;;;;;;;;;;;;;\r
174 \r
175 Function RegisterExtension\r
176   ; back up old value for extension $R0 (eg. ".opt")\r
177   ReadRegStr $1 HKCR "$R0" ""\r
178   StrCmp $1 "" NoBackup\r
179     StrCmp $1 "VLC$R0" "NoBackup"\r
180     WriteRegStr HKCR "$R0" "VLC.backup" $1\r
181 NoBackup:\r
182   WriteRegStr HKCR "$R0" "" "VLC$R0"\r
183   ReadRegStr $0 HKCR "VLC$R0" ""\r
184   WriteRegStr HKCR "VLC$R0" "" "VLC media file ($R0)"\r
185   WriteRegStr HKCR "VLC$R0\shell" "" "Play"\r
186   WriteRegStr HKCR "VLC$R0\shell\Play\command" "" '"$INSTDIR\vlc.exe" --started-from-file "%1"'\r
187   WriteRegStr HKCR "VLC$R0\DefaultIcon" "" '"$INSTDIR\vlc.exe",0'\r
188 FunctionEnd\r
189 \r
190 Function un.RegisterExtension\r
191   ;start of restore script\r
192   ReadRegStr $1 HKCR "$R0" ""\r
193   StrCmp $1 "VLC$R0" 0 NoOwn ; only do this if we own it\r
194     ReadRegStr $1 HKCR "$R0" "VLC.backup"\r
195     StrCmp $1 "" 0 Restore ; if backup="" then delete the whole key\r
196       DeleteRegKey HKCR "$R0"\r
197     Goto NoOwn\r
198 Restore:\r
199       WriteRegStr HKCR "$R0" "" $1\r
200       DeleteRegValue HKCR "$R0" "VLC.backup"\r
201 NoOwn:\r
202     DeleteRegKey HKCR "VLC$R0" ;Delete key with association settings\r
203 FunctionEnd\r
204 \r
205 !macro RegisterExtensionSection EXT\r
206   Section ${EXT}\r
207     SectionIn 1 3\r
208     Push $R0\r
209     StrCpy $R0 ${EXT}\r
210     Call RegisterExtension\r
211     Pop $R0\r
212   SectionEnd\r
213 !macroend\r
214 \r
215 !macro UnRegisterExtensionSection EXT\r
216   Push $R0\r
217   StrCpy $R0 ${EXT}\r
218   Call un.RegisterExtension\r
219   Pop $R0\r
220 !macroend\r
221 \r
222 !macro WriteRegStrSupportedTypes EXT\r
223   WriteRegStr HKCR Applications\vlc.exe\SupportedTypes ${EXT} ""\r
224 !macroend\r
225 \r
226 ;;;;;;;;;;;;;;;;;;;;;;;;\r
227 ; Context menu entries ;\r
228 ;;;;;;;;;;;;;;;;;;;;;;;;\r
229 \r
230 !macro AddContextMenuExt EXT\r
231   WriteRegStr HKCR ${EXT}\shell\PlayWithVLC "" "Play with VLC media player"\r
232   WriteRegStr HKCR ${EXT}\shell\PlayWithVLC\command "" '$INSTDIR\vlc.exe --started-from-file --no-playlist-enqueue "%1"'\r
233 \r
234   WriteRegStr HKCR ${EXT}\shell\AddToPlaylistVLC "" "Add to VLC media player's Playlist"\r
235   WriteRegStr HKCR ${EXT}\shell\AddToPlaylistVLC\command "" '$INSTDIR\vlc.exe --started-from-file --playlist-enqueue "%1"'\r
236 !macroend\r
237 \r
238 !macro AddContextMenu EXT\r
239   Push $R0\r
240   ReadRegStr $R0 HKCR ${EXT} ""\r
241   !insertmacro AddContextMenuExt $R0\r
242   Pop $R0\r
243 !macroend\r
244 \r
245 !macro DeleteContextMenuExt EXT\r
246   DeleteRegKey HKCR ${EXT}\shell\PlayWithVLC\r
247   DeleteRegKey HKCR ${EXT}\shell\AddToPlaylistVLC\r
248 !macroend\r
249 \r
250 !macro DeleteContextMenu EXT\r
251   Push $R0\r
252   ReadRegStr $R0 HKCR ${EXT} ""\r
253   !insertmacro DeleteContextMenuExt $R0\r
254   Pop $R0\r
255 !macroend\r
256 \r
257 ;;;;;;;;;;;;;;;;;;;;;;;;;;\r
258 ; Delete prefs and cache ;\r
259 ;;;;;;;;;;;;;;;;;;;;;;;;;;\r
260 \r
261 !macro delprefs\r
262   StrCpy $0 0\r
263   !define Index 'Line${__LINE__}'\r
264   "${Index}-Loop:"\r
265   ; FIXME\r
266   ; this will loop through all the logged users and "virtual" windows users\r
267   ; (it looks like users are only present in HKEY_USERS when they are logged in)\r
268     ClearErrors\r
269     EnumRegKey $1 HKU "" $0\r
270     StrCmp $1 "" "${Index}-End"\r
271     IntOp $0 $0 + 1\r
272     ReadRegStr $2 HKU "$1\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders" AppData\r
273     StrCmp $2 "" "${Index}-Loop"\r
274     RMDir /r "$2\vlc"\r
275     Goto "${Index}-Loop"\r
276   "${Index}-End:"\r
277   !undef Index\r
278 !macroend\r
279 \r
280 Var UninstallLog\r
281 \r
282 !macro OpenUninstallLog\r
283   FileOpen $UninstallLog "$INSTDIR\uninstall.log" a\r
284   FileSeek $UninstallLog 0 END\r
285 !macroend\r
286 \r
287 !macro CloseUninstallLog\r
288   FileClose $UninstallLog\r
289   SetFileAttributes "$INSTDIR\uninstall.log" HIDDEN\r
290 !macroend\r
291 \r
292 !macro InstallFile FILEREGEX\r
293   File "${FILEREGEX}"\r
294   !define Index 'Line${__LINE__}'\r
295   FindFirst $0 $1 "$INSTDIR\${FILEREGEX}"\r
296   StrCmp $0 "" "${Index}-End"\r
297   "${Index}-Loop:"\r
298     StrCmp $1 "" "${Index}-End"\r
299     FileWrite $UninstallLog "$1$\r$\n"\r
300     FindNext $0 $1\r
301     Goto "${Index}-Loop"\r
302   "${Index}-End:"\r
303   !undef Index\r
304 !macroend\r
305 \r
306 !macro InstallFolder FOLDER\r
307   File /r "${FOLDER}"\r
308   Push "${FOLDER}"\r
309   Call InstallFolderInternal\r
310 !macroend\r
311 \r
312 Function InstallFolderInternal\r
313   Pop $9\r
314   !define Index 'Line${__LINE__}'\r
315   FindFirst $0 $1 "$INSTDIR\$9\*"\r
316   StrCmp $0 "" "${Index}-End"\r
317   "${Index}-Loop:"\r
318     StrCmp $1 "" "${Index}-End"\r
319     StrCmp $1 "." "${Index}-Next"\r
320     StrCmp $1 ".." "${Index}-Next"\r
321     IfFileExists "$9\$1\*" 0 "${Index}-Write"\r
322       Push $0\r
323       Push $9\r
324       Push "$9\$1"\r
325       Call InstallFolderInternal\r
326       Pop $9\r
327       Pop $0\r
328       Goto "${Index}-Next"\r
329     "${Index}-Write:"\r
330     FileWrite $UninstallLog "$9\$1$\r$\n"\r
331     "${Index}-Next:"\r
332     FindNext $0 $1\r
333     Goto "${Index}-Loop"\r
334   "${Index}-End:"\r
335   !undef Index\r
336 FunctionEnd\r
337 \r
338 \r
339 ;;;;;;;;;;;;;;;;;;;;;;\r
340 ; Installer sections ;\r
341 ;;;;;;;;;;;;;;;;;;;;;;\r
342 \r
343 Section "Media player (required)" SEC01\r
344   SectionIn 1 2 3 RO\r
345   SetShellVarContext all\r
346   SetOutPath "$INSTDIR"\r
347 \r
348   !insertmacro OpenUninstallLog\r
349 \r
350   !insertmacro InstallFile vlc.exe\r
351   !insertmacro InstallFile vlc.exe.manifest\r
352   !ifdef LIBVLC_DLL\r
353   !insertmacro InstallFile ${LIBVLC_DLL}\r
354   !endif\r
355   !ifdef LIBVLC_CONTROL_DLL\r
356   !insertmacro InstallFile ${LIBVLC_CONTROL_DLL}\r
357   !endif\r
358   !insertmacro InstallFile *.txt\r
359 \r
360   !insertmacro InstallFolder plugins\r
361   !insertmacro InstallFolder locale\r
362   !insertmacro InstallFolder osdmenu\r
363   !insertmacro InstallFolder skins\r
364   !insertmacro InstallFolder http\r
365   !insertmacro InstallFolder share\r
366 \r
367   WriteIniStr "$INSTDIR\${PRODUCT_GROUP} Website.url" "InternetShortcut" "URL" \\r
368     "${PRODUCT_WEB_SITE}"\r
369   FileWrite $UninstallLog "${PRODUCT_GROUP} Website.url$\r$\n"\r
370   WriteIniStr "$INSTDIR\Documentation.url" "InternetShortcut" "URL" \\r
371     "${PRODUCT_WEB_SITE}/doc/"\r
372   FileWrite $UninstallLog "Documentation.url$\r$\n"\r
373 \r
374   !insertmacro CloseUninstallLog\r
375 \r
376   ; Add VLC to "recomended programs" for the following extensions\r
377   WriteRegStr HKCR Applications\vlc.exe "" ""\r
378   WriteRegStr HKCR Applications\vlc.exe "FriendlyAppName" "VLC media player"\r
379   WriteRegStr HKCR Applications\vlc.exe\shell\Play "" "Play with VLC"\r
380   WriteRegStr HKCR Applications\vlc.exe\shell\Play\command "" \\r
381     '$INSTDIR\vlc.exe --started-from-file "%1"'\r
382   !insertmacro MacroAllExtensions WriteRegStrSupportedTypes\r
383 \r
384   WriteRegStr HKCR "AudioCD\shell\PlayWithVLC" "" "Play with VLC media player"\r
385   WriteRegStr HKCR "AudioCD\shell\PlayWithVLC\command" "" \\r
386     "$INSTDIR\vlc.exe --started-from-file cdda:%1"\r
387   WriteRegStr HKCR "DVD\shell\PlayWithVLC" "" "Play with VLC media player"\r
388   WriteRegStr HKCR "DVD\shell\PlayWithVLC\command" "" \\r
389     "$INSTDIR\vlc.exe --started-from-file dvd:%1"\r
390 \r
391   WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Explorer\AutoplayHandlers\EventHandlers\PlayDVDMovieOnArrival" "VLCPlayDVDMovieOnArrival" ""\r
392   WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Explorer\AutoplayHandlers\Handlers\VLCPlayDVDMovieOnArrival" "Action" "Play DVD movie"\r
393   WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Explorer\AutoplayHandlers\Handlers\VLCPlayDVDMovieOnArrival" "DefaultIcon" '"$INSTDIR\vlc.exe",0'\r
394   WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Explorer\AutoplayHandlers\Handlers\VLCPlayDVDMovieOnArrival" "InvokeProgID" "VLC.DVDMovie"\r
395   WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Explorer\AutoplayHandlers\Handlers\VLCPlayDVDMovieOnArrival" "InvokeVerb" "play"\r
396   WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Explorer\AutoplayHandlers\Handlers\VLCPlayDVDMovieOnArrival" "Provider" "VideoLAN VLC media player"\r
397 \r
398   WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Explorer\AutoplayHandlers\EventHandlers\PlayCDAudioOnArrival" "VLCPlayCDAudioOnArrival" ""\r
399   WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Explorer\AutoplayHandlers\Handlers\VLCPlayCDAudioOnArrival" "Action" "Play CD audio"\r
400   WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Explorer\AutoplayHandlers\Handlers\VLCPlayCDAudioOnArrival" "DefaultIcon" '"$INSTDIR\vlc.exe --started-from-file",0'\r
401   WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Explorer\AutoplayHandlers\Handlers\VLCPlayCDAudioOnArrival" "InvokeProgID" "VLC.CDAudio"\r
402   WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Explorer\AutoplayHandlers\Handlers\VLCPlayCDAudioOnArrival" "InvokeVerb" "play"\r
403   WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Explorer\AutoplayHandlers\Handlers\VLCPlayCDAudioOnArrival" "Provider" "VideoLAN VLC media player"\r
404   WriteRegStr HKCR "VLC.DVDMovie" "" "VLC DVD Movie"\r
405   WriteRegStr HKCR "VLC.DVDMovie\shell" "" "Play"\r
406   WriteRegStr HKCR "VLC.DVDMovie\shell\Play\command" "" \\r
407     '$INSTDIR\vlc.exe --started-from-file dvd:%1'\r
408   WriteRegStr HKCR "VLC.DVDMovie\DefaultIcon" "" '"$INSTDIR\vlc.exe",0'\r
409   WriteRegStr HKCR "VLC.CDAudio" "" "VLC CD Audio"\r
410   WriteRegStr HKCR "VLC.CDAudio\shell" "" "Play"\r
411   WriteRegStr HKCR "VLC.CDAudio\shell\Play\command" "" \\r
412     '$INSTDIR\vlc.exe --started-from-file cdda:%1'\r
413   WriteRegStr HKCR "VLC.CDAudio\DefaultIcon" "" '"$INSTDIR\vlc.exe",0'\r
414 \r
415 SectionEnd\r
416 \r
417 Section "Start Menu Shortcut" SEC02a\r
418   SectionIn 1 2 3\r
419   CreateDirectory "$SMPROGRAMS\VideoLAN"\r
420   CreateDirectory "$SMPROGRAMS\VideoLAN\Quick Settings"\r
421   CreateDirectory "$SMPROGRAMS\VideoLAN\Quick Settings\Audio"\r
422   CreateShortCut "$SMPROGRAMS\VideoLAN\Quick Settings\Audio\Set Audio mode to DirectX (default).lnk" \\r
423     "$INSTDIR\vlc.exe" "--aout aout_directx --save-config vlc:quit"\r
424   CreateShortCut "$SMPROGRAMS\VideoLAN\Quick Settings\Audio\Set Audio mode to Waveout.lnk" \\r
425     "$INSTDIR\vlc.exe" "--aout waveout --save-config vlc:quit"\r
426   CreateDirectory "$SMPROGRAMS\VideoLAN\Quick Settings\Interface"\r
427   CreateShortCut "$SMPROGRAMS\VideoLAN\Quick Settings\Interface\Set Main Interface to Skinnable.lnk" \\r
428     "$INSTDIR\vlc.exe" "-I skins --save-config vlc:quit"\r
429   CreateShortCut "$SMPROGRAMS\VideoLAN\Quick Settings\Interface\Set Main Interface to wxWidgets (default).lnk" \\r
430     "$INSTDIR\vlc.exe" "-I wxwin --save-config vlc:quit"\r
431   CreateDirectory "$SMPROGRAMS\VideoLAN\Quick Settings\Video"\r
432   ; FIXME add detection for Vista. Direct3D will be default there, for all others it's DirectX\r
433   CreateShortCut "$SMPROGRAMS\VideoLAN\Quick Settings\Video\Set Video mode to Direct3D.lnk" \\r
434     "$INSTDIR\vlc.exe" "--vout direct3d --overlay --directx-hw-yuv --save-config vlc:quit"\r
435   CreateShortCut "$SMPROGRAMS\VideoLAN\Quick Settings\Video\Set Video mode to Direct3D (no hardware acceleration).lnk" \\r
436     "$INSTDIR\vlc.exe" "--vout direct3d --overlay --no-directx-hw-yuv --save-config vlc:quit"\r
437   CreateShortCut "$SMPROGRAMS\VideoLAN\Quick Settings\Video\Set Video mode to DirectX.lnk" \\r
438     "$INSTDIR\vlc.exe" "--vout directx --overlay --directx-hw-yuv --save-config vlc:quit"\r
439   CreateShortCut "$SMPROGRAMS\VideoLAN\Quick Settings\Video\Set Video mode to DirectX (no hardware acceleration).lnk" \\r
440     "$INSTDIR\vlc.exe" "--vout directx --no-overlay --no-directx-hw-yuv --save-config vlc:quit"\r
441   CreateShortCut "$SMPROGRAMS\VideoLAN\Quick Settings\Video\Set Video mode to DirectX (no video overlay).lnk" \\r
442     "$INSTDIR\vlc.exe" "--vout directx --no-overlay --directx-hw-yuv --save-config vlc:quit"\r
443   CreateShortCut "$SMPROGRAMS\VideoLAN\Quick Settings\Video\Set Video mode to OpenGL.lnk" \\r
444     "$INSTDIR\vlc.exe" "--vout opengl --overlay --save-config vlc:quit"\r
445   CreateShortCut "$SMPROGRAMS\VideoLAN\Quick Settings\Reset VLC media player preferences and cache files.lnk" \\r
446     "$INSTDIR\vlc.exe" "--reset-config --reset-plugins-cache --save-config vlc:quit"\r
447   CreateShortCut "$SMPROGRAMS\VideoLAN\Documentation.lnk" \\r
448     "$INSTDIR\Documentation.url"\r
449   CreateShortCut "$SMPROGRAMS\VideoLAN\Release Notes.lnk" \\r
450     "$INSTDIR\NEWS.txt" ""\r
451   CreateShortCut "$SMPROGRAMS\VideoLAN\${PRODUCT_GROUP} Website.lnk" \\r
452     "$INSTDIR\${PRODUCT_GROUP} Website.url"\r
453   CreateShortCut "$SMPROGRAMS\VideoLAN\VLC media player.lnk" \\r
454     "$INSTDIR\vlc.exe" ""\r
455 SectionEnd\r
456 \r
457 Section "Desktop Shortcut" SEC02b\r
458   SectionIn 1 2 3\r
459   CreateShortCut "$DESKTOP\VLC media player.lnk" \\r
460     "$INSTDIR\vlc.exe" ""\r
461 SectionEnd\r
462 \r
463 Section /o "Mozilla plugin" SEC03\r
464   SectionIn 3\r
465 \r
466   SetOutPath "$INSTDIR"\r
467   !insertmacro OpenUninstallLog\r
468   !insertmacro InstallFile mozilla\npvlc.dll\r
469   !insertmacro CloseUninstallLog\r
470 \r
471   !define Moz "SOFTWARE\MozillaPlugins\@videolan.org/vlc,version=${VERSION}"\r
472   WriteRegStr HKLM ${Moz} "Description" "VLC Multimedia Plugin"\r
473   WriteRegStr HKLM ${Moz} "Path" "$INSTDIR\npvlc.dll"\r
474   WriteRegStr HKLM ${Moz} "Product" "VLC media player"\r
475   WriteRegStr HKLM ${Moz} "Vendor" "VideoLAN"\r
476   WriteRegStr HKLM ${Moz} "Version" "${VERSION}"\r
477 \r
478  ; for very old version of mozilla, these lines may be needed \r
479  ;Push $R0\r
480  ;Push $R1\r
481  ;Push $R2\r
482 \r
483  ;!define Index 'Line${__LINE__}'\r
484  ;StrCpy $R1 "0"\r
485 \r
486  ;"${Index}-Loop:"\r
487 \r
488  ;  ; Check for Key\r
489  ;  EnumRegKey $R0 HKLM "SOFTWARE\Mozilla" "$R1"\r
490  ;  StrCmp $R0 "" "${Index}-End"\r
491  ;  IntOp $R1 $R1 + 1\r
492  ;  ReadRegStr $R2 HKLM "SOFTWARE\Mozilla\$R0\Extensions" "Plugins"\r
493  ;  StrCmp $R2 "" "${Index}-Loop" ""\r
494 \r
495  ;  CopyFiles "$INSTDIR\npvlc.dll" "$R2"\r
496  ;  !ifdef LIBVLC_DLL\r
497  ;  CopyFiles ${LIBVLC_DLL} "$R2"\r
498  ;  !endif\r
499  ;  !ifdef LIBVLC_CONTROL_DLL\r
500  ;  CopyFiles ${LIBVLC_CONTROL_DLL} "$R2"\r
501  ;  !endif\r
502  ;  Goto "${Index}-Loop"\r
503 \r
504  ;"${Index}-End:"\r
505  ;!undef Index\r
506 \r
507 SectionEnd\r
508 \r
509 Section "ActiveX plugin" SEC04\r
510   SectionIn 1 3\r
511   SetOutPath "$INSTDIR"\r
512   !insertmacro OpenUninstallLog\r
513   !insertmacro InstallFile activex\axvlc.dll\r
514   !insertmacro CloseUninstallLog\r
515   RegDLL "$INSTDIR\axvlc.dll"\r
516 SectionEnd\r
517 \r
518 SectionGroup "File type associations" SEC06\r
519   SectionGroup "Audio Files"\r
520     !insertmacro MacroAudioExtensions RegisterExtensionSection\r
521   SectionGroupEnd\r
522   SectionGroup "Video Files"\r
523     !insertmacro MacroVideoExtensions RegisterExtensionSection\r
524   SectionGroupEnd\r
525   SectionGroup "Other"\r
526     !insertmacro MacroOtherExtensions RegisterExtensionSection\r
527   SectionGroupEnd\r
528 SectionGroupEnd\r
529 \r
530 Section /o "Context Menus" SEC05\r
531   SectionIn 3\r
532   !insertmacro MacroAllExtensions AddContextMenu\r
533   !insertmacro AddContextMenuExt "Directory"\r
534 SectionEnd\r
535 \r
536 Section /o "Delete preferences and cache" SEC07\r
537   !insertmacro delprefs\r
538 SectionEnd\r
539 \r
540 ; Installer section descriptions\r
541 !insertmacro MUI_FUNCTION_DESCRIPTION_BEGIN\r
542   !insertmacro MUI_DESCRIPTION_TEXT ${SEC01} \\r
543     "The media player itself"\r
544   !insertmacro MUI_DESCRIPTION_TEXT ${SEC02a} \\r
545     "Adds icons to your start menu for easy access"\r
546   !insertmacro MUI_DESCRIPTION_TEXT ${SEC02b} \\r
547     "Adds icon to your desktop for easy access"\r
548   !insertmacro MUI_DESCRIPTION_TEXT ${SEC03} \\r
549     "The VLC Mozilla and Mozilla Firefox plugin"\r
550   !insertmacro MUI_DESCRIPTION_TEXT ${SEC04} \\r
551     "The VLC ActiveX plugin"\r
552   !insertmacro MUI_DESCRIPTION_TEXT ${SEC05} \\r
553     "Add context menu items ('Play With VLC' and 'Add To VLC's Playlist')"\r
554   !insertmacro MUI_DESCRIPTION_TEXT ${SEC06} \\r
555     "Sets VLC media player as the default application for the specified file type"\r
556   !insertmacro MUI_DESCRIPTION_TEXT ${SEC07} \\r
557     "Deletes VLC media player preferences and cache files leftover from previous installations"\r
558 !insertmacro MUI_FUNCTION_DESCRIPTION_END\r
559 \r
560 Function .onInit\r
561   ReadRegStr $R0  ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" \\r
562   "UninstallString"\r
563   StrCmp $R0 "" done\r
564  \r
565   MessageBox MB_YESNO|MB_ICONEXCLAMATION \\r
566   "VLC media player has already been installed. $\nDo you want to remove \\r
567   the previous version before installing $(^Name) ?" \\r
568   IDNO done\r
569   \r
570   ;Run the uninstaller\r
571   ;uninst:\r
572     ClearErrors\r
573     ExecWait '$R0 _?=$INSTDIR' ;Do not copy the uninstaller to a temp file\r
574   done:\r
575   !insertmacro MUI_LANGDLL_DISPLAY\r
576 FunctionEnd\r
577 \r
578 Section -Post\r
579   WriteUninstaller "$INSTDIR\uninstall.exe"\r
580   WriteRegStr HKLM "${PRODUCT_DIR_REGKEY}" "InstallDir" $INSTDIR\r
581   WriteRegStr HKLM "${PRODUCT_DIR_REGKEY}" "Version" "${VERSION}"\r
582   WriteRegStr HKLM "${PRODUCT_DIR_REGKEY}" "" "$INSTDIR\vlc.exe"\r
583 \r
584   WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" \\r
585     "DisplayName" "$(^Name)"\r
586   WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" \\r
587     "UninstallString" "$INSTDIR\uninstall.exe"\r
588   WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" \\r
589     "DisplayIcon" "$INSTDIR\vlc.exe"\r
590   WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" \\r
591     "DisplayVersion" "${PRODUCT_VERSION}"\r
592   WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" \\r
593     "URLInfoAbout" "${PRODUCT_WEB_SITE}"\r
594   WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" \\r
595     "Publisher" "${PRODUCT_PUBLISHER}"\r
596 SectionEnd\r
597 \r
598 ;;;;;;;;;;;;;;;;;;;;;;;;\r
599 ; Uninstaller sections ;\r
600 ;;;;;;;;;;;;;;;;;;;;;;;;\r
601 \r
602 ; TrimNewlines (copied from NSIS documentation)\r
603 ; input, top of stack  (e.g. whatever$\r$\n)\r
604 ; output, top of stack (replaces, with e.g. whatever)\r
605 ; modifies no other variables.\r
606 \r
607 Function un.TrimNewlines\r
608  Exch $R0\r
609  Push $R1\r
610  Push $R2\r
611  StrCpy $R1 0\r
612  \r
613  loop:\r
614    IntOp $R1 $R1 - 1\r
615    StrCpy $R2 $R0 1 $R1\r
616    StrCmp $R2 "$\r" loop\r
617    StrCmp $R2 "$\n" loop\r
618    IntOp $R1 $R1 + 1\r
619    IntCmp $R1 0 no_trim_needed\r
620    StrCpy $R0 $R0 $R1\r
621  \r
622  no_trim_needed:\r
623    Pop $R2\r
624    Pop $R1\r
625    Exch $R0\r
626 FunctionEnd\r
627 \r
628 Function un.RemoveEmptyDirs\r
629   Pop $9\r
630   !define Index 'Line${__LINE__}'\r
631   FindFirst $0 $1 "$INSTDIR$9*"\r
632   StrCmp $0 "" "${Index}-End"\r
633   "${Index}-Loop:"\r
634     StrCmp $1 "" "${Index}-End"\r
635     StrCmp $1 "." "${Index}-Next"\r
636     StrCmp $1 ".." "${Index}-Next"\r
637       Push $0\r
638       Push $1\r
639       Push $9\r
640       Push "$9$1\"\r
641       Call un.RemoveEmptyDirs\r
642       Pop $9\r
643       Pop $1\r
644       Pop $0\r
645     "${Index}-Remove:"\r
646     RMDir "$INSTDIR$9$1"\r
647     "${Index}-Next:"\r
648     FindNext $0 $1\r
649     Goto "${Index}-Loop"\r
650   "${Index}-End:"\r
651   FindClose $0\r
652   !undef Index\r
653 FunctionEnd\r
654 \r
655 Section "Uninstall" SEC91\r
656   SectionIn 1 2 3 RO\r
657   SetShellVarContext all\r
658 \r
659   !insertmacro MacroAllExtensions DeleteContextMenu\r
660   !insertmacro MacroAllExtensions UnRegisterExtensionSection\r
661   !insertmacro DeleteContextMenuExt "Directory"\r
662 \r
663   ;remove activex plugin\r
664   UnRegDLL "$INSTDIR\axvlc.dll"\r
665   Delete /REBOOTOK "$INSTDIR\axvlc.dll"\r
666 \r
667   ;remove mozilla plugin\r
668   Push $R0\r
669   Push $R1\r
670   Push $R2\r
671 \r
672   !define Index 'Line${__LINE__}'\r
673   StrCpy $R1 "0"\r
674 \r
675   "${Index}-Loop:"\r
676 \r
677     ; Check for Key\r
678     EnumRegKey $R0 HKLM "SOFTWARE\Mozilla" "$R1"\r
679     StrCmp $R0 "" "${Index}-End"\r
680     IntOp $R1 $R1 + 1\r
681     ReadRegStr $R2 HKLM "SOFTWARE\Mozilla\$R0\Extensions" "Plugins"\r
682     StrCmp $R2 "" "${Index}-Loop" ""\r
683 \r
684     ; old files (0.8.5 and before) that may be lying around\r
685     Delete /REBOOTOK "$R2\npvlc.dll"\r
686     Delete /REBOOTOK "$R2\libvlc.dll"\r
687     Delete /REBOOTOK "$R2\vlcintf.xpt"\r
688     Goto "${Index}-Loop"\r
689 \r
690   "${Index}-End:"\r
691   !undef Index\r
692   Delete /REBOOTOK "$INSTDIR\npvlc.dll"\r
693 \r
694   RMDir "$SMPROGRAMS\VideoLAN"\r
695   RMDir /r $SMPROGRAMS\VideoLAN\r
696 \r
697   FileOpen $UninstallLog "$INSTDIR\uninstall.log" r\r
698   UninstallLoop:\r
699     ClearErrors\r
700     FileRead $UninstallLog $R0\r
701     IfErrors UninstallEnd\r
702     Push $R0\r
703     Call un.TrimNewLines\r
704     Pop $R0\r
705     Delete "$INSTDIR\$R0"\r
706     Goto UninstallLoop\r
707   UninstallEnd:\r
708   FileClose $UninstallLog\r
709   Delete "$INSTDIR\uninstall.log"\r
710   Delete "$INSTDIR\uninstall.exe"\r
711   Push "\"\r
712   Call un.RemoveEmptyDirs\r
713   RMDir "$INSTDIR"\r
714 \r
715   DeleteRegKey HKLM Software\VideoLAN\r
716 \r
717   DeleteRegKey HKCR Applications\vlc.exe\r
718   DeleteRegKey HKCR AudioCD\shell\PlayWithVLC\r
719   DeleteRegKey HKCR DVD\shell\PlayWithVLC\r
720   DeleteRegValue HKLM "Software\Microsoft\Windows\CurrentVersion\Explorer\AutoplayHandlers\EventHandlers\PlayDVDMovieOnArrival" "VLCPlayDVDMovieOnArrival"\r
721   DeleteRegKey HKLM Software\Microsoft\Windows\CurrentVersion\Explorer\AutoplayHandlers\Handlers\VLCPlayDVDMovieOnArrival\r
722   DeleteRegValue HKLM "Software\Microsoft\Windows\CurrentVersion\Explorer\AutoplayHandlers\EventHandlers\PlayCDAudioOnArrival" "VLCPlayCDAudioOnArrival"\r
723   DeleteRegKey HKLM Software\Microsoft\Windows\CurrentVersion\Explorer\AutoplayHandlers\Handlers\VLCPlayCDAudioOnArrival\r
724   DeleteRegKey HKCR "VLC.MediaFile"\r
725 \r
726   DeleteRegKey HKLM \\r
727     "SOFTWARE\MozillaPlugins\@videolan.org/vlc,version=${VERSION}"\r
728 \r
729   DeleteRegKey HKLM \\r
730     "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCT_NAME}"\r
731 \r
732   Delete "$DESKTOP\VLC media player.lnk"\r
733 \r
734   DeleteRegKey ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}"\r
735   DeleteRegKey HKLM "${PRODUCT_DIR_REGKEY}"\r
736   SetAutoClose true\r
737 SectionEnd\r
738 \r
739 Section /o "un.Delete preferences and cache" SEC92\r
740   !insertmacro delprefs\r
741 SectionEnd\r
742 \r
743 ; Uninstaller section descriptions\r
744 !insertmacro MUI_UNFUNCTION_DESCRIPTION_BEGIN\r
745   !insertmacro MUI_DESCRIPTION_TEXT ${SEC91} \\r
746     "Uninstall VLC media player and all its components"\r
747   !insertmacro MUI_DESCRIPTION_TEXT ${SEC92} \\r
748     "Deletes VLC media player preferences and cache files"\r
749 !insertmacro MUI_UNFUNCTION_DESCRIPTION_END\r
750 \r
751 ;Function un.onUninstSuccess\r
752 ;  HideWindow\r
753 ;  MessageBox MB_ICONINFORMATION|MB_OK \\r
754 ;    "$(^Name) was successfully removed from your computer."\r
755 ;FunctionEnd\r
756 \r
757 Function un.onInit\r
758   !insertmacro MUI_UNGETLANGUAGE\r
759 FunctionEnd\r