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