=== Installer (win32) ===
[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 "9.00.21022.8"
186
187 Function LocateCallback_90
188     MoreInfo::GetProductVersion "$R9"
189     Pop $0
190
191         ${VersionCompare} "$0" "${DLL_VER}" $R1
192
193         StrCmp $R1 0 0 new
194       new:
195         StrCmp $R1 1 0 old
196       old:
197         StrCmp $R1 2 0 end
198     ; Found DLL is older
199         Call DownloadDLL
200
201      end:
202         StrCpy "$0" StopLocate
203         StrCpy $DLL_found "true"
204         Push "$0"
205
206 FunctionEnd
207
208 Function DownloadDLL
209     MessageBox MB_OK "You will need to download the Microsoft Visual C++ 2008 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."
210     StrCpy $0 "http://www.microsoft.com/downloads/details.aspx?FamilyID=9b2da534-3e03-4391-8a4d-074b9f2bc1bf&DisplayLang=en"
211     Call openLinkNewWindow
212 FunctionEnd
213
214 Function PythonInstall
215     MessageBox MB_OK "You will need to install python 2.5.2 in order to run blender. Pressing OK will take you to the python.org website."
216     StrCpy $0 "http://www.python.org"
217     Call openLinkNewWindow
218 FunctionEnd
219
220 Function DataLocation
221   nsDialogs::Create /NOUNLOAD 1018
222   Pop $HWND
223   
224   ${If} $HWND == error
225     Abort
226   ${EndIf}
227   
228   ${NSD_CreateLabel} 0 0 100% 12u "Please specify where you wish to install Blender's user data files."
229   ${NSD_CreateRadioButton} 0 20 100% 12u "Use the Application Data directory (Requires Windows 2000 or better)"
230   Pop $HWND_APPDATA
231   ${NSD_CreateRadioButton} 0 50 100% 12u "Use the installation directory (ie. location chosen to install blender.exe)."
232   Pop $HWND_INSTDIR
233   ${NSD_CreateRadioButton} 0 80 100% 12u "I have defined a %HOME% variable, please install files here."
234   Pop $HWND_HOMEDIR
235   
236   ${If} ${AtMostWinME}
237     GetDlgItem $0 $HWND $HWND_APPDATA
238     EnableWindow $0 0
239     SendMessage $HWND_INSTDIR ${BM_SETCHECK} 1 0
240   ${Else}
241     SendMessage $HWND_APPDATA ${BM_SETCHECK} 1 0
242   ${EndIf}
243   
244   nsDialogs::Show
245   
246 FunctionEnd
247
248 Function DataLocationOnLeave
249         StrCpy $SETUSERCONTEXT "false"
250         ${NSD_GetState} $HWND_APPDATA $R0
251         ${If} $R0 == "1"
252           ; FIXME: disabled 'all users' until fully multi-user compatible
253           ;StrCpy $SETUSERCONTEXT "true"
254           Call SetWinXPPathCurrentUser
255         ${Else}
256           ${NSD_GetState} $HWND_INSTDIR $R0
257           ${If} $R0 == "1"
258             Call SetWin9xPath
259           ${Else}
260             ${NSD_GetState} $HWND_HOMEDIR $R0
261             ${If} $R0 == "1"
262               ReadEnvStr $BLENDERHOME "HOME"
263             ${EndIf}
264           ${EndIf}
265         ${EndIf}
266 FunctionEnd
267
268 Var HWND_APPDATA_CURRENT
269 Var HWND_APPDATA_ALLUSERS
270
271 Function AppDataChoice
272   StrCmp $SETUSERCONTEXT "false" skip
273   
274   nsDialogs::Create /NOUNLOAD 1018
275   Pop $HWND
276   
277   ${NSD_CreateLabel} 0 0 100% 12u "Please choose which Application Data directory to use."
278   ${NSD_CreateRadioButton} 0 40 100% 12u "Current User"
279   Pop $HWND_APPDATA_CURRENT
280   ${NSD_CreateRadioButton} 0 70 100% 12u "All Users"
281   Pop $HWND_APPDATA_ALLUSERS
282   
283   SendMessage $HWND_APPDATA_CURRENT ${BM_SETCHECK} 1 0
284   
285   StrCmp $SETUSERCONTEXT "true" 0 skip ; show dialog if we need to set context, otherwise skip it
286   nsDialogs::Show
287   
288 skip:
289
290 FunctionEnd
291
292 Function AppDataChoiceOnLeave
293         StrCmp $SETUSERCONTEXT "false" skip
294         ${NSD_GetState} $HWND_APPDATA_CURRENT $R0
295         ${If} $R0 == "1"
296            Call SetWinXPPathCurrentUser
297         ${Else}
298            Call SetWinXPPathAllUsers
299         ${EndIf}
300 skip:
301
302 FunctionEnd
303
304 Section "Blender-VERSION (required)" SecCopyUI
305   SectionIn RO
306
307   ; Set output path to the installation directory.
308   SetOutPath $INSTDIR
309   ; Put file there
310  [ROOTDIRCONTS]
311      
312   SetOutPath $BLENDERHOME\.blender
313   [DOTBLENDERCONTS]
314   
315   SetOutPath $BLENDERHOME\.blender\scripts
316   [SCRIPTCONTS]
317   SetOutPath $BLENDERHOME\.blender\scripts\bpymodules
318   [SCRIPTMODCONTS]
319   SetOutPath $BLENDERHOME\.blender\scripts\bpymodules\colladaImEx
320   [SCRIPTMODCOLLADACONT]
321   SetOutPath $BLENDERHOME\.blender\scripts\bpydata
322   [SCRIPTDATACONTS]
323   SetOutPath $BLENDERHOME\.blender\scripts\bpydata\config
324   [SCRIPTDATACFGCONTS]
325   SetOutPath $BLENDERHOME\plugins\include
326   [PLUGINCONTS]
327   
328   ; Language files
329   [LANGUAGECONTS]
330   
331   SetOutPath $INSTDIR
332   ; Write the installation path into the registry
333   WriteRegStr HKLM SOFTWARE\BlenderFoundation "Install_Dir" "$INSTDIR"
334   WriteRegStr HKLM SOFTWARE\BlenderFoundation "Home_Dir" "$BLENDERHOME"
335   ; Write the uninstall keys for Windows
336   WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Blender" "DisplayName" "Blender (remove only)"
337   WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Blender" "UninstallString" '"$INSTDIR\uninstall.exe"'
338   WriteUninstaller "uninstall.exe"
339
340   IfSilent 0 +2
341     Goto silentdone
342   ; Check for msvcr80.dll - give notice to download if not found
343   MessageBox MB_OK "The installer will now check your system for the required system dlls."
344   StrCpy $1 $WINDIR
345   StrCpy $DLL_found "false"
346   ${Locate} "$1" "/L=F /M=MSVCR90.DLL /S=0B" "LocateCallback_90"
347   StrCmp $DLL_found "false" 0 +2
348     Call DownloadDLL
349   ReadRegStr $0 HKLM "SOFTWARE\Python\PythonCore\2.5" "InstallPath"
350   StrCmp $0 "" 0 +2
351     Call PythonInstall
352 silentdone:
353 SectionEnd
354
355 Section "Add Start Menu shortcuts" Section2
356   SetOutPath $INSTDIR
357   CreateDirectory "$SMPROGRAMS\Blender Foundation\Blender\"
358   CreateShortCut "$SMPROGRAMS\Blender Foundation\Blender\Uninstall.lnk" "$INSTDIR\uninstall.exe" "" "$INSTDIR\uninstall.exe" 0
359   CreateShortCut "$SMPROGRAMS\Blender Foundation\Blender\Blender.lnk" "$INSTDIR\Blender.exe" "" "$INSTDIR\blender.exe" 0
360   CreateShortCut "$SMPROGRAMS\Blender Foundation\Blender\Readme.lnk" "$INSTDIR\Blender.html" "" "" 0
361   CreateShortCut "$SMPROGRAMS\Blender Foundation\Blender\Copyright.lnk" "$INSTDIR\Copyright.txt" "" "$INSTDIR\copyright.txt" 0
362   CreateShortCut "$SMPROGRAMS\Blender Foundation\Blender\GPL-license.lnk" "$INSTDIR\GPL-license.txt" "" "$INSTDIR\GPL-license.txt" 0
363   CreateShortCut "$SMPROGRAMS\Blender Foundation\Blender\Help.lnk" "$INSTDIR\Help.url"
364 SectionEnd
365
366 Section "Add Desktop Blender-VERSION shortcut" Section3
367   SetOutPath $INSTDIR
368   CreateShortCut "$DESKTOP\Blender.lnk" "$INSTDIR\blender.exe" "" "$INSTDIR\blender.exe" 0
369 SectionEnd
370
371 Section "Open .blend files with Blender-VERSION" Section4
372   SetOutPath $INSTDIR
373   ;ExecShell "open" '"$INSTDIR\blender.exe"' "-R -b"
374   ;do it the manual way! ;)
375   
376   WriteRegStr HKCR ".blend" "" "blendfile"
377   WriteRegStr HKCR "blendfile" "" "Blender .blend File"
378   WriteRegStr HKCR "blendfile\shell" "" "open"
379   WriteRegStr HKCR "blendfile\DefaultIcon" "" $INSTDIR\blender.exe,1
380   WriteRegStr HKCR "blendfile\shell\open\command" "" \
381     '"$INSTDIR\blender.exe" "%1"'
382   
383 SectionEnd
384
385 UninstallText "This will uninstall Blender VERSION. Hit next to continue."
386
387 Section "Uninstall"
388   Delete $INSTDIR\uninstall.exe
389   
390   ReadRegStr $BLENDERHOME HKLM "SOFTWARE\BlenderFoundation" "Home_Dir"
391   
392   ; remove registry keys
393   DeleteRegKey HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Blender"
394   DeleteRegKey HKLM SOFTWARE\BlenderFoundation
395   ; remove files
396   [DELROOTDIRCONTS]
397   
398   Delete $BLENDERHOME\.blender\.bfont.ttf
399   Delete $BLENDERHOME\.blender\.Blanguages
400   ; remove shortcuts, if any.
401   Delete "$SMPROGRAMS\Blender Foundation\Blender\*.*"
402   Delete "$DESKTOP\Blender.lnk"
403   ; remove directories used.
404   RMDir /r $BLENDERHOME\.blender\locale
405   MessageBox MB_YESNO "Erase .blender\scripts folder? (ALL contents will be erased!)" /SD IDYES IDNO Next
406   RMDir /r $BLENDERHOME\.blender\scripts
407   RMDir /r $BLENDERHOME\.blender\scripts\bpymodules
408   RMDir /r $BLENDERHOME\.blender\scripts\bpydata
409   RMDir /r $BLENDERHOME\.blender\scripts\bpydata\config
410 Next:
411   RMDir /r $BLENDERHOME\plugins\include
412   RMDir /r $BLENDERHOME\plugins
413   RMDir $BLENDERHOME\.blender
414   RMDir "$SMPROGRAMS\Blender Foundation\Blender"
415   RMDir "$SMPROGRAMS\Blender Foundation"
416   RMDir "$INSTDIR"
417   RMDir "$INSTDIR\.."
418 SectionEnd
419
420 !insertmacro MUI_FUNCTION_DESCRIPTION_BEGIN
421   !insertmacro MUI_DESCRIPTION_TEXT ${SecCopyUI} $(DESC_SecCopyUI)
422   !insertmacro MUI_DESCRIPTION_TEXT ${Section2} $(DESC_Section2)
423   !insertmacro MUI_DESCRIPTION_TEXT ${Section3} $(DESC_Section3)
424   !insertmacro MUI_DESCRIPTION_TEXT ${Section4} $(DESC_Section4)
425 !insertmacro MUI_FUNCTION_DESCRIPTION_END