Merged 15170:15635 from trunk (no conflicts or even merges)
[blender.git] / release / windows / installer / 00.sconsblender.nsi
1 ;
2 ; $Id$
3 ;
4 ; Blender Self-Installer for Windows (NSIS - http://nsis.sourceforge.net)
5 ;
6 ; Requires the MoreInfo plugin - http://nsis.sourceforge.net/MoreInfo_plug-in
7 ;
8
9 !include "MUI.nsh"
10 !include "WinVer.nsh"
11 !include "FileFunc.nsh"
12 !include "WordFunc.nsh"
13 !include "nsDialogs.nsh"
14
15 SetCompressor /SOLID lzma
16
17 Name "Blender VERSION" 
18
19 !define MUI_ABORTWARNING
20
21 !define MUI_WELCOMEPAGE_TEXT  "This wizard will guide you through the installation of Blender.\r\n\r\nIt is recommended that you close all other applications before starting Setup.\r\n\r\nNote to Win2k/XP users: You may require administrator privileges to install Blender successfully."
22 !define MUI_WELCOMEFINISHPAGE_BITMAP "RELDIR\01.installer.bmp"
23 !define MUI_HEADERIMAGE
24 !define MUI_HEADERIMAGE_BITMAP  "RELDIR\00.header.bmp"
25 !define MUI_COMPONENTSPAGE_SMALLDESC
26 !define MUI_FINISHPAGE_RUN "$INSTDIR\blender.exe"
27 !define MUI_CHECKBITMAP "RELDIR\00.checked.bmp"
28
29 !insertmacro MUI_PAGE_WELCOME
30 !insertmacro MUI_PAGE_LICENSE "DISTDIR\Copyright.txt"
31 !insertmacro MUI_PAGE_COMPONENTS
32     
33 !insertmacro MUI_PAGE_DIRECTORY
34 Page custom DataLocation DataLocationOnLeave
35 ;Page custom AppDataChoice AppDataChoiceOnLeave
36 Page custom PreMigrateUserSettings MigrateUserSettings
37 !insertmacro MUI_PAGE_INSTFILES
38 !insertmacro MUI_PAGE_FINISH
39   
40 !insertmacro MUI_UNPAGE_WELCOME
41 !insertmacro MUI_UNPAGE_CONFIRM
42 !insertmacro MUI_UNPAGE_INSTFILES
43 !insertmacro MUI_UNPAGE_FINISH
44
45 !insertmacro Locate
46 !insertmacro VersionCompare
47
48
49 Icon "RELDIR\00.installer.ico"
50 UninstallIcon "RELDIR\00.installer.ico"
51
52 ;--------------------------------
53 ;Languages
54  
55   !insertmacro MUI_LANGUAGE "English"
56     
57 ;--------------------------------
58 ;Language Strings
59
60   ;Description
61   LangString DESC_SecCopyUI ${LANG_ENGLISH} "Copy all required files to the application folder."
62   LangString DESC_Section2 ${LANG_ENGLISH} "Add shortcut items to the Start Menu. (Recommended)"
63   LangString DESC_Section3 ${LANG_ENGLISH} "Add a shortcut to Blender on your desktop."
64   LangString DESC_Section4 ${LANG_ENGLISH} "Blender can register itself with .blend files to allow double-clicking from Windows Explorer, etc."
65   LangString TEXT_IO_TITLE ${LANG_ENGLISH} "Specify User Data Location"
66 ;--------------------------------
67 ;Data
68
69 Caption "Blender VERSION Installer"
70 OutFile "DISTDIR\..\blender-VERSION-windows.exe"
71 InstallDir "$PROGRAMFILES\Blender Foundation\Blender"
72
73 BrandingText "http://www.blender.org"
74 ComponentText "This will install Blender VERSION on your computer."
75
76 DirText "Use the field below to specify the folder where you want Blender to be copied to. To specify a different folder, type a new name or use the Browse button to select an existing folder."
77
78 SilentUnInstall normal
79
80 # Uses $0
81 Function openLinkNewWindow
82   Push $3 
83   Push $2
84   Push $1
85   Push $0
86   ReadRegStr $0 HKCR "http\shell\open\command" ""
87 # Get browser path
88     DetailPrint $0
89   StrCpy $2 '"'
90   StrCpy $1 $0 1
91   StrCmp $1 $2 +2 # if path is not enclosed in " look for space as final char
92     StrCpy $2 ' '
93   StrCpy $3 1
94   loop:
95     StrCpy $1 $0 1 $3
96     DetailPrint $1
97     StrCmp $1 $2 found
98     StrCmp $1 "" found
99     IntOp $3 $3 + 1
100     Goto loop
101  
102   found:
103     StrCpy $1 $0 $3
104     StrCmp $2 " " +2
105       StrCpy $1 '$1"'
106  
107   Pop $0
108   Exec '$1 $0'
109   Pop $1
110   Pop $2
111   Pop $3
112 FunctionEnd
113
114 Var BLENDERHOME
115 Var DLL_found
116 Var PREVHOME
117
118 Function SetWinXPPathCurrentUser
119   SetShellVarContext current
120   StrCpy $BLENDERHOME "$APPDATA\Blender Foundation\Blender"
121 FunctionEnd
122
123 Function SetWinXPPathAllUsers
124   SetShellVarContext all
125   StrCpy $BLENDERHOME "$APPDATA\Blender Foundation\Blender"
126 FunctionEnd
127
128 Function SetWin9xPath
129   StrCpy $BLENDERHOME $INSTDIR
130 FunctionEnd
131
132 ; custom controls
133 Var HWND
134
135 Var HWND_APPDATA
136 Var HWND_INSTDIR
137 Var HWND_HOMEDIR
138
139 Var HWND_BUTTON_YES
140 Var HWND_BUTTON_NO
141
142 Var SETUSERCONTEXT
143
144 Function PreMigrateUserSettings
145   StrCpy $PREVHOME "$PROFILE\Application Data\Blender Foundation\Blender"
146   StrCpy $0 "$PROFILE\Application Data\Blender Foundation\Blender\.blender"
147   
148   IfFileExists $0 0 nochange
149   
150   StrCmp $BLENDERHOME $PREVHOME nochange
151   
152   nsDialogs::Create /NOUNLOAD 1018
153   Pop $HWND
154   
155   ${If} $HWND == error
156         Abort
157   ${EndIf}
158   
159   ${NSD_CreateLabel} 0 0 100% 12u "You have existing settings at:"
160   ${NSD_CreateLabel} 0 20 100% 12u $PREVHOME
161   ${NSD_CreateLabel} 0 40 100% 12u "Do you wish to migrate this data to:"
162   ${NSD_CreateLabel} 0 60 100% 12u $BLENDERHOME
163   ${NSD_CreateLabel} 0 80 100% 12u "Please note: If you choose no, Blender will not be able to use these files!"
164   ${NSD_CreateRadioButton} 0 100 100% 12u "Yes"
165   Pop $HWND_BUTTON_YES
166   ${NSD_CreateRadioButton} 0 120 100% 12u "No"
167   Pop $HWND_BUTTON_NO
168   
169   SendMessage $HWND_BUTTON_YES ${BM_SETCHECK} 1 0
170   
171   nsDialogs::Show
172   nochange:
173   
174 FunctionEnd
175
176 Function MigrateUserSettings
177   ${NSD_GetState} $HWND_BUTTON_YES $R0
178   ${If} $R0 == "1"
179     CreateDirectory $BLENDERHOME
180     CopyFiles $PREVHOME\*.* $BLENDERHOME
181     ;RMDir /r $PREVHOME
182   ${EndIf}  
183 FunctionEnd
184
185 !define DLL_VER "8.00.50727.42"
186 !define DLL_VER2 "7.10.3052.4"
187
188 Function LocateCallback_80
189         MoreInfo::GetProductVersion "$R9"
190         Pop $0
191
192         ${VersionCompare} "$0" "${DLL_VER}" $R1
193
194         StrCmp $R1 0 0 new
195       new:
196         StrCmp $R1 1 0 old
197       old:
198         StrCmp $R1 2 0 end
199         ; Found DLL is older
200         Call DownloadDLL
201
202      end:
203         StrCpy "$0" StopLocate
204         StrCpy $DLL_found "true"
205         Push "$0"
206
207 FunctionEnd
208
209 Function LocateCallback_71
210         MoreInfo::GetProductVersion "$R9"
211         Pop $0
212
213         ${VersionCompare} "$0" "${DLL_VER2}" $R1
214
215         StrCmp $R1 0 0 new
216       new:
217         StrCmp $R1 1 0 old
218       old:
219         StrCmp $R1 2 0 end
220         ; Found DLL is older
221         Call PythonInstall
222
223      end:
224         StrCpy "$0" StopLocate
225         StrCpy $DLL_found "true"
226         Push "$0"
227
228 FunctionEnd
229
230 Function DownloadDLL
231     MessageBox MB_OK "You will need to download the Microsoft Visual C++ 2005 Redistributable Package in order to run Blender. Pressing OK will take you to the download page, please follow the instructions on the page that appears."
232     StrCpy $0 "http://www.microsoft.com/downloads/details.aspx?familyid=32BC1BEE-A3F9-4C13-9C99-220B62A191EE&displaylang=en"
233     Call openLinkNewWindow
234 FunctionEnd
235
236 Function PythonInstall
237     MessageBox MB_OK "You will need to install python 2.5 in order to run blender. Pressing OK will take you to the python.org website."
238     StrCpy $0 "http://www.python.org"
239     Call openLinkNewWindow
240 FunctionEnd
241
242 Function DataLocation
243   nsDialogs::Create /NOUNLOAD 1018
244   Pop $HWND
245   
246   ${If} $HWND == error
247     Abort
248   ${EndIf}
249   
250   ${NSD_CreateLabel} 0 0 100% 12u "Please specify where you wish to install Blender's user data files."
251   ${NSD_CreateRadioButton} 0 20 100% 12u "Use the Application Data directory (Requires Windows 2000 or better)"
252   Pop $HWND_APPDATA
253   ${NSD_CreateRadioButton} 0 50 100% 12u "Use the installation directory (ie. location chosen to install blender.exe)."
254   Pop $HWND_INSTDIR
255   ${NSD_CreateRadioButton} 0 80 100% 12u "I have defined a %HOME% variable, please install files here."
256   Pop $HWND_HOMEDIR
257   
258   ${If} ${AtMostWinME}
259     GetDlgItem $0 $HWND $HWND_APPDATA
260     EnableWindow $0 0
261     SendMessage $HWND_INSTDIR ${BM_SETCHECK} 1 0
262   ${Else}
263     SendMessage $HWND_APPDATA ${BM_SETCHECK} 1 0
264   ${EndIf}
265   
266   nsDialogs::Show
267   
268 FunctionEnd
269
270 Function DataLocationOnLeave
271         StrCpy $SETUSERCONTEXT "false"
272         ${NSD_GetState} $HWND_APPDATA $R0
273         ${If} $R0 == "1"
274           ; FIXME: disabled 'all users' until fully multi-user compatible
275           ;StrCpy $SETUSERCONTEXT "true"
276           Call SetWinXPPathCurrentUser
277         ${Else}
278           ${NSD_GetState} $HWND_INSTDIR $R0
279           ${If} $R0 == "1"
280             Call SetWin9xPath
281           ${Else}
282             ${NSD_GetState} $HWND_HOMEDIR $R0
283             ${If} $R0 == "1"
284               ReadEnvStr $BLENDERHOME "HOME"
285             ${EndIf}
286           ${EndIf}
287         ${EndIf}
288 FunctionEnd
289
290 Var HWND_APPDATA_CURRENT
291 Var HWND_APPDATA_ALLUSERS
292
293 Function AppDataChoice
294   StrCmp $SETUSERCONTEXT "false" skip
295   
296   nsDialogs::Create /NOUNLOAD 1018
297   Pop $HWND
298   
299   ${NSD_CreateLabel} 0 0 100% 12u "Please choose which Application Data directory to use."
300   ${NSD_CreateRadioButton} 0 40 100% 12u "Current User"
301   Pop $HWND_APPDATA_CURRENT
302   ${NSD_CreateRadioButton} 0 70 100% 12u "All Users"
303   Pop $HWND_APPDATA_ALLUSERS
304   
305   SendMessage $HWND_APPDATA_CURRENT ${BM_SETCHECK} 1 0
306   
307   StrCmp $SETUSERCONTEXT "true" 0 skip ; show dialog if we need to set context, otherwise skip it
308   nsDialogs::Show
309   
310 skip:
311
312 FunctionEnd
313
314 Function AppDataChoiceOnLeave
315         StrCmp $SETUSERCONTEXT "false" skip
316         ${NSD_GetState} $HWND_APPDATA_CURRENT $R0
317         ${If} $R0 == "1"
318            Call SetWinXPPathCurrentUser
319         ${Else}
320            Call SetWinXPPathAllUsers
321         ${EndIf}
322 skip:
323
324 FunctionEnd
325
326 Section "Blender-VERSION (required)" SecCopyUI
327   SectionIn RO
328
329   ; Set output path to the installation directory.
330   SetOutPath $INSTDIR
331   ; Put file there
332  [ROOTDIRCONTS]
333      
334   SetOutPath $BLENDERHOME\.blender
335   [DOTBLENDERCONTS]
336   
337   SetOutPath $BLENDERHOME\.blender\scripts
338   [SCRIPTCONTS]
339   SetOutPath $BLENDERHOME\.blender\scripts\bpymodules
340   [SCRIPTMODCONTS]
341   SetOutPath $BLENDERHOME\.blender\scripts\bpymodules\colladaImEx
342   [SCRIPTMODCOLLADACONT]
343   SetOutPath $BLENDERHOME\.blender\scripts\bpydata
344   [SCRIPTDATACONTS]
345   SetOutPath $BLENDERHOME\.blender\scripts\bpydata\config
346   [SCRIPTDATACFGCONTS]
347   SetOutPath $BLENDERHOME\plugins\include
348   [PLUGINCONTS]
349   
350   ; Language files
351   [LANGUAGECONTS]
352   
353   SetOutPath $INSTDIR
354   ; Write the installation path into the registry
355   WriteRegStr HKLM SOFTWARE\BlenderFoundation "Install_Dir" "$INSTDIR"
356   WriteRegStr HKLM SOFTWARE\BlenderFoundation "Home_Dir" "$BLENDERHOME"
357   ; Write the uninstall keys for Windows
358   WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Blender" "DisplayName" "Blender (remove only)"
359   WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Blender" "UninstallString" '"$INSTDIR\uninstall.exe"'
360   WriteUninstaller "uninstall.exe"
361
362   ; Check for msvcr80.dll - give notice to download if not found
363   MessageBox MB_OK "The installer will now check your system for the required system dlls."
364   StrCpy $1 $WINDIR
365   StrCpy $DLL_found "false"
366   ${Locate} "$1" "/L=F /M=MSVCR80.DLL /S=0B" "LocateCallback_80"
367   StrCmp $DLL_found "false" 0 +2
368     Call DownloadDLL
369   StrCpy $1 $WINDIR
370   StrCpy $DLL_found "false"
371   ${Locate} "$1" "/L=F /M=MSVCR71.DLL /S=0B" "LocateCallback_71"
372   StrCmp $DLL_found "false" 0 +2
373     Call PythonInstall
374   
375 SectionEnd
376
377 Section "Add Start Menu shortcuts" Section2
378   SetOutPath $INSTDIR
379   CreateDirectory "$SMPROGRAMS\Blender Foundation\Blender\"
380   CreateShortCut "$SMPROGRAMS\Blender Foundation\Blender\Uninstall.lnk" "$INSTDIR\uninstall.exe" "" "$INSTDIR\uninstall.exe" 0
381   CreateShortCut "$SMPROGRAMS\Blender Foundation\Blender\Blender.lnk" "$INSTDIR\Blender.exe" "" "$INSTDIR\blender.exe" 0
382   CreateShortCut "$SMPROGRAMS\Blender Foundation\Blender\Readme.lnk" "$INSTDIR\Blender.html" "" "" 0
383   CreateShortCut "$SMPROGRAMS\Blender Foundation\Blender\Copyright.lnk" "$INSTDIR\Copyright.txt" "" "$INSTDIR\copyright.txt" 0
384   CreateShortCut "$SMPROGRAMS\Blender Foundation\Blender\GPL-license.lnk" "$INSTDIR\GPL-license.txt" "" "$INSTDIR\GPL-license.txt" 0
385   CreateShortCut "$SMPROGRAMS\Blender Foundation\Blender\Help.lnk" "$INSTDIR\Help.url"
386 SectionEnd
387
388 Section "Add Desktop Blender-VERSION shortcut" Section3
389   SetOutPath $INSTDIR
390   CreateShortCut "$DESKTOP\Blender.lnk" "$INSTDIR\blender.exe" "" "$INSTDIR\blender.exe" 0
391 SectionEnd
392
393 Section "Open .blend files with Blender-VERSION" Section4
394   SetOutPath $INSTDIR
395   ;ExecShell "open" '"$INSTDIR\blender.exe"' "-R -b"
396   ;do it the manual way! ;)
397   
398   WriteRegStr HKCR ".blend" "" "blendfile"
399   WriteRegStr HKCR "blendfile" "" "Blender .blend File"
400   WriteRegStr HKCR "blendfile\shell" "" "open"
401   WriteRegStr HKCR "blendfile\DefaultIcon" "" $INSTDIR\blender.exe,1
402   WriteRegStr HKCR "blendfile\shell\open\command" "" \
403     '"$INSTDIR\blender.exe" "%1"'
404   
405 SectionEnd
406
407 UninstallText "This will uninstall Blender VERSION. Hit next to continue."
408
409 Section "Uninstall"
410   Delete $INSTDIR\uninstall.exe
411   
412   ReadRegStr $BLENDERHOME HKLM "SOFTWARE\BlenderFoundation" "Home_Dir"
413   
414   ; remove registry keys
415   DeleteRegKey HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Blender"
416   DeleteRegKey HKLM SOFTWARE\BlenderFoundation
417   ; remove files
418   [DELROOTDIRCONTS]
419   
420   Delete $BLENDERHOME\.blender\.bfont.ttf
421   Delete $BLENDERHOME\.blender\.Blanguages
422   ; remove shortcuts, if any.
423   Delete "$SMPROGRAMS\Blender Foundation\Blender\*.*"
424   Delete "$DESKTOP\Blender.lnk"
425   ; remove directories used.
426   RMDir /r $BLENDERHOME\.blender\locale
427   MessageBox MB_YESNO "Erase .blender\scripts folder? (ALL contents will be erased!)" IDNO Next
428   RMDir /r $BLENDERHOME\.blender\scripts
429   RMDir /r $BLENDERHOME\.blender\scripts\bpymodules
430   RMDir /r $BLENDERHOME\.blender\scripts\bpydata
431   RMDir /r $BLENDERHOME\.blender\scripts\bpydata\config
432 Next:
433   RMDir /r $BLENDERHOME\plugins\include
434   RMDir /r $BLENDERHOME\plugins
435   RMDir $BLENDERHOME\.blender
436   RMDir "$SMPROGRAMS\Blender Foundation\Blender"
437   RMDir "$SMPROGRAMS\Blender Foundation"
438   RMDir "$INSTDIR"
439   RMDir "$INSTDIR\.."
440 SectionEnd
441
442 !insertmacro MUI_FUNCTION_DESCRIPTION_BEGIN
443   !insertmacro MUI_DESCRIPTION_TEXT ${SecCopyUI} $(DESC_SecCopyUI)
444   !insertmacro MUI_DESCRIPTION_TEXT ${Section2} $(DESC_Section2)
445   !insertmacro MUI_DESCRIPTION_TEXT ${Section3} $(DESC_Section3)
446   !insertmacro MUI_DESCRIPTION_TEXT ${Section4} $(DESC_Section4)
447 !insertmacro MUI_FUNCTION_DESCRIPTION_END