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