=== SCons ===
[blender-staging.git] / release / windows / installer / 00.sconsblender.nsi
1 ;
2 ; $Id$
3 ;
4 ; Blender Self-Installer for Windows (NSIS - http://nsis.sourceforge.net)
5 ;
6
7 !include "MUI.nsh"
8 !include "FileFunc.nsh"
9 !include "WordFunc.nsh"
10
11 SetCompressor /SOLID lzma
12
13 Name "Blender VERSION" 
14
15 !define MUI_ABORTWARNING
16
17 !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."
18 !define MUI_WELCOMEFINISHPAGE_BITMAP "RELDIR\01.installer.bmp"
19 !define MUI_HEADERIMAGE
20 !define MUI_HEADERIMAGE_BITMAP  "RELDIR\00.header.bmp"
21 !define MUI_COMPONENTSPAGE_SMALLDESC
22 !define MUI_FINISHPAGE_RUN "$INSTDIR\blender.exe"
23 !define MUI_CHECKBITMAP "RELDIR\00.checked.bmp"
24
25 !insertmacro MUI_PAGE_WELCOME
26 !insertmacro MUI_PAGE_LICENSE "DISTDIR\Copyright.txt"
27 !insertmacro MUI_PAGE_COMPONENTS
28     
29 !insertmacro MUI_PAGE_DIRECTORY
30 Page custom DataLocation
31 !insertmacro MUI_PAGE_INSTFILES
32 !insertmacro MUI_PAGE_FINISH
33   
34 !insertmacro MUI_UNPAGE_WELCOME
35 !insertmacro MUI_UNPAGE_CONFIRM
36 !insertmacro MUI_UNPAGE_INSTFILES
37 !insertmacro MUI_UNPAGE_FINISH
38
39 !insertmacro Locate
40 !insertmacro VersionCompare
41
42
43 Icon "RELDIR\00.installer.ico"
44 UninstallIcon "RELDIR\00.installer.ico"
45
46 ;--------------------------------
47 ;Languages
48  
49   !insertmacro MUI_LANGUAGE "English"
50     
51 ;--------------------------------
52 ;Language Strings
53
54   ;Description
55   LangString DESC_SecCopyUI ${LANG_ENGLISH} "Copy all required files to the application folder."
56   LangString DESC_Section2 ${LANG_ENGLISH} "Add shortcut items to the Start Menu. (Recommended)"
57   LangString DESC_Section3 ${LANG_ENGLISH} "Add a shortcut to Blender on your desktop."
58   LangString DESC_Section4 ${LANG_ENGLISH} "Blender can register itself with .blend files to allow double-clicking from Windows Explorer, etc."
59   LangString TEXT_IO_TITLE ${LANG_ENGLISH} "Specify User Data Location"
60 ;--------------------------------
61 ;Data
62
63 Caption "Blender VERSION Installer"
64 OutFile "DISTDIR\..\blender-VERSION-windows.exe"
65 InstallDir "$PROGRAMFILES\Blender Foundation\Blender"
66
67 BrandingText "http://www.blender.org/bf"
68 ComponentText "This will install Blender VERSION on your computer."
69
70 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."
71
72 SilentUnInstall normal
73
74 ; GetWindowsVersion
75 ;
76 ; Based on Yazno's function, http://yazno.tripod.com/powerpimpit/
77 ; Updated by Joost Verburg
78 ;
79 ; Returns on top of stack
80 ;
81 ; Windows Version (95, 98, ME, NT x.x, 2000, XP, 2003)
82 ; or
83 ; '' (Unknown Windows Version)
84 ;
85 ; Usage:
86 ;   Call GetWindowsVersion
87 ;   Pop $R0
88 ;   ; at this point $R0 is "NT 4.0" or whatnot
89
90 Function GetWindowsVersion
91
92   Push $R0
93   Push $R1
94
95   ReadRegStr $R0 HKLM \
96   "SOFTWARE\Microsoft\Windows NT\CurrentVersion" CurrentVersion
97
98   IfErrors 0 lbl_winnt
99    
100   ; we are not NT
101   ReadRegStr $R0 HKLM \
102   "SOFTWARE\Microsoft\Windows\CurrentVersion" VersionNumber
103  
104   StrCpy $R1 $R0 1
105   StrCmp $R1 '4' 0 lbl_error
106  
107   StrCpy $R1 $R0 3
108  
109   StrCmp $R1 '4.0' lbl_win32_95
110   StrCmp $R1 '4.9' lbl_win32_ME lbl_win32_98
111  
112   lbl_win32_95:
113     StrCpy $R0 '95'
114   Goto lbl_done
115  
116   lbl_win32_98:
117     StrCpy $R0 '98'
118   Goto lbl_done
119  
120   lbl_win32_ME:
121     StrCpy $R0 'ME'
122   Goto lbl_done
123  
124   lbl_winnt:
125
126   StrCpy $R1 $R0 1
127  
128   StrCmp $R1 '3' lbl_winnt_x
129   StrCmp $R1 '4' lbl_winnt_x
130  
131   StrCpy $R1 $R0 3
132  
133   StrCmp $R1 '5.0' lbl_winnt_2000
134   StrCmp $R1 '5.1' lbl_winnt_XP
135   StrCmp $R1 '5.2' lbl_winnt_2003 lbl_error
136  
137   lbl_winnt_x:
138     StrCpy $R0 "NT $R0" 6
139   Goto lbl_done
140  
141   lbl_winnt_2000:
142     Strcpy $R0 '2000'
143   Goto lbl_done
144  
145   lbl_winnt_XP:
146     Strcpy $R0 'XP'
147   Goto lbl_done
148  
149   lbl_winnt_2003:
150     Strcpy $R0 '2003'
151   Goto lbl_done
152  
153   lbl_error:
154     Strcpy $R0 ''
155   lbl_done:
156  
157   Pop $R1
158   Exch $R0
159
160 FunctionEnd
161
162 # Uses $0
163 Function openLinkNewWindow
164   Push $3 
165   Push $2
166   Push $1
167   Push $0
168   ReadRegStr $0 HKCR "http\shell\open\command" ""
169 # Get browser path
170     DetailPrint $0
171   StrCpy $2 '"'
172   StrCpy $1 $0 1
173   StrCmp $1 $2 +2 # if path is not enclosed in " look for space as final char
174     StrCpy $2 ' '
175   StrCpy $3 1
176   loop:
177     StrCpy $1 $0 1 $3
178     DetailPrint $1
179     StrCmp $1 $2 found
180     StrCmp $1 "" found
181     IntOp $3 $3 + 1
182     Goto loop
183  
184   found:
185     StrCpy $1 $0 $3
186     StrCmp $2 " " +2
187       StrCpy $1 '$1"'
188  
189   Pop $0
190   Exec '$1 $0'
191   Pop $1
192   Pop $2
193   Pop $3
194 FunctionEnd
195
196 Var BLENDERHOME
197 Var winversion
198 Var DLL_found
199
200 Function SetWinXPPath
201   StrCpy $BLENDERHOME "$PROFILE\Application Data\Blender Foundation\Blender"
202 FunctionEnd
203
204 Function SetWin9xPath
205   StrCpy $BLENDERHOME $INSTDIR
206 FunctionEnd
207
208 Function .onInit
209   Call GetWindowsVersion
210   Pop $R0
211   Strcpy $winversion $R0
212   !insertmacro MUI_INSTALLOPTIONS_EXTRACT "RELDIR\data.ini"
213 FunctionEnd
214
215 !define DLL_VER "8.00.50727.42"
216
217 Function LocateCallback
218
219         MoreInfo::GetProductVersion "$R9"
220         Pop $0
221
222         ${VersionCompare} "$0" "${DLL_VER}" $R1
223
224         StrCmp $R1 0 0 new
225       new:
226         StrCmp $R1 1 0 old
227       old:
228         StrCmp $R1 2 0 end
229         ; Found DLL is older
230         Call DownloadDLL
231
232      end:
233         StrCpy "$0" StopLocate
234         StrCpy $DLL_found "true"
235         Push "$0"
236
237 FunctionEnd
238
239 Function DownloadDLL
240     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."
241     StrCpy $0 "http://www.microsoft.com/downloads/details.aspx?familyid=32BC1BEE-A3F9-4C13-9C99-220B62A191EE&displaylang=en"
242     Call openLinkNewWindow
243 FunctionEnd
244
245
246 Var HWND
247 Var DLGITEM
248 Var is2KXP
249
250 Function DataLocation
251   !insertmacro MUI_HEADER_TEXT "$(TEXT_IO_TITLE)" ""
252
253   ; Set default choice
254   !insertmacro MUI_INSTALLOPTIONS_WRITE "data.ini" "Field 3" "State" 1
255   
256   StrCpy $R1 $winversion 2
257   StrCmp $R1 "NT" do_win2kxp
258   StrCmp $winversion "2000" do_win2kxp
259   StrCmp $winversion "XP" do_win2kxp
260   StrCmp $winversion "2003" do_win2kxp
261   
262   ;else...
263   Strcpy $is2KXP "false"
264
265   Goto continue
266
267   do_win2kXP:
268     Strcpy $is2KXP "true"
269     
270   continue: 
271   
272   !insertmacro MUI_INSTALLOPTIONS_INITDIALOG "data.ini"
273   Pop $HWND
274   
275   Strcmp $is2KXP "true" do_dlg
276   
277   ; Disable App Data option on Win9x
278   
279   GetDlgItem $DLGITEM $HWND 1201
280   EnableWindow $DLGITEM 0  
281   
282   do_dlg:
283   
284     !insertmacro MUI_INSTALLOPTIONS_SHOW
285     !insertmacro MUI_INSTALLOPTIONS_READ $R0 "data.ini" "Field 2" "State" ; App Dir
286     Strcmp $R0 1 do_app_data
287     !insertmacro MUI_INSTALLOPTIONS_READ $R0 "data.ini" "Field 3" "State" ; Inst Dir
288     Strcmp $R0 1 do_inst_path
289     !insertmacro MUI_INSTALLOPTIONS_READ $R0 "data.ini" "Field 4" "State" ; Home Dir
290     Strcmp $R0 1 do_home_path
291   
292   Goto end
293   
294   do_app_data:
295     Call SetWinXPPath
296     Goto end
297   do_home_path:
298     ReadEnvStr $BLENDERHOME "HOME"
299     Goto end
300   do_inst_path:
301     Call SetWin9xPath
302   end:
303   
304 FunctionEnd
305
306 Section "Blender-VERSION (required)" SecCopyUI
307   SectionIn RO
308     
309 ; Sets $BLENDERHOME to suit Windows version...
310
311   ; Set output path to the installation directory.
312   SetOutPath $INSTDIR
313   ; Put file there
314  [ROOTDIRCONTS]
315      
316   SetOutPath $BLENDERHOME\.blender
317   [DOTBLENDERCONTS]
318   
319   SetOutPath $BLENDERHOME\.blender\scripts
320   [SCRIPTCONTS]
321   SetOutPath $BLENDERHOME\.blender\scripts\bpymodules
322   [SCRIPTMODCONTS]
323   SetOutPath $BLENDERHOME\.blender\scripts\bpymodules\colladaImEx
324   [SCRIPTMODCOLLADACONT]
325   SetOutPath $BLENDERHOME\.blender\scripts\bpydata
326   [SCRIPTDATACONTS]
327   SetOutPath $BLENDERHOME\.blender\scripts\bpydata\config
328   [SCRIPTDATACFGCONTS]
329   SetOutPath $BLENDERHOME\plugins\include
330   [PLUGINCONTS]
331   
332   ; Language files
333   [LANGUAGECONTS]
334   
335   SetOutPath $INSTDIR
336   ; Write the installation path into the registry
337   WriteRegStr HKLM SOFTWARE\BlenderFoundation "Install_Dir" "$INSTDIR"
338   ; Write the uninstall keys for Windows
339   WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Blender" "DisplayName" "Blender (remove only)"
340   WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Blender" "UninstallString" '"$INSTDIR\uninstall.exe"'
341   WriteUninstaller "uninstall.exe"
342
343   ; Check for msvcr80.dll - give notice to download if not found
344   MessageBox MB_OK "The installer will now check your system for the required system dlls."
345   StrCpy $1 $WINDIR
346   StrCpy $DLL_found "false"
347   ${Locate} "$1" "/L=F /M=MSVCR80.DLL /S=0B" "LocateCallback"
348   StrCmp $DLL_found "false" 0 +2
349     Call DownloadDLL
350   
351 SectionEnd
352
353 Section "Add Start Menu shortcuts" Section2
354   SetOutPath $INSTDIR
355   CreateDirectory "$SMPROGRAMS\Blender Foundation\Blender\"
356   CreateShortCut "$SMPROGRAMS\Blender Foundation\Blender\Uninstall.lnk" "$INSTDIR\uninstall.exe" "" "$INSTDIR\uninstall.exe" 0
357   CreateShortCut "$SMPROGRAMS\Blender Foundation\Blender\Blender.lnk" "$INSTDIR\Blender.exe" "" "$INSTDIR\blender.exe" 0
358   CreateShortCut "$SMPROGRAMS\Blender Foundation\Blender\Readme.lnk" "$INSTDIR\Blender.html" "" "" 0
359   CreateShortCut "$SMPROGRAMS\Blender Foundation\Blender\Copyright.lnk" "$INSTDIR\Copyright.txt" "" "$INSTDIR\copyright.txt" 0
360   CreateShortCut "$SMPROGRAMS\Blender Foundation\Blender\GPL-license.lnk" "$INSTDIR\GPL-license.txt" "" "$INSTDIR\GPL-license.txt" 0
361   CreateShortCut "$SMPROGRAMS\Blender Foundation\Blender\Help.lnk" "$INSTDIR\Help.url"
362 SectionEnd
363
364 Section "Add Desktop Blender-VERSION shortcut" Section3
365   SetOutPath $INSTDIR
366   CreateShortCut "$DESKTOP\Blender.lnk" "$INSTDIR\blender.exe" "" "$INSTDIR\blender.exe" 0
367 SectionEnd
368
369 Section "Open .blend files with Blender-VERSION" Section4
370   SetOutPath $INSTDIR
371   ;ExecShell "open" '"$INSTDIR\blender.exe"' "-R -b"
372   ;do it the manual way! ;)
373   
374   WriteRegStr HKCR ".blend" "" "blendfile"
375   WriteRegStr HKCR "blendfile" "" "Blender .blend File"
376   WriteRegStr HKCR "blendfile\shell" "" "open"
377   WriteRegStr HKCR "blendfile\DefaultIcon" "" $INSTDIR\blender.exe,1
378   WriteRegStr HKCR "blendfile\shell\open\command" "" \
379     '"$INSTDIR\blender.exe" "%1"'
380   
381 SectionEnd
382
383 UninstallText "This will uninstall Blender VERSION. Hit next to continue."
384
385 Section "Uninstall"
386   ; remove registry keys
387   DeleteRegKey HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Blender"
388   DeleteRegKey HKLM SOFTWARE\BlenderFoundation
389   ; remove files
390   [DELROOTDIRCONTS]
391   
392   Delete $INSTDIR\.blender\.bfont.ttf
393   Delete $INSTDIR\.blender\.Blanguages
394   ; remove shortcuts, if any.
395   Delete "$SMPROGRAMS\Blender Foundation\Blender\*.*"
396   Delete "$DESKTOP\Blender.lnk"
397   ; remove directories used.
398   RMDir /r $INSTDIR\.blender\locale
399   MessageBox MB_YESNO "Erase .blender\scripts folder? (ALL contents will be erased!)" IDNO Next
400   RMDir /r $INSTDIR\.blender\scripts
401   RMDir /r $INSTDIR\.blender\scripts\bpymodules
402   RMDir /r $INSTDIR\.blender\scripts\bpydata
403   RMDir /r $INSTDIR\.blender\scripts\bpydata\config
404 Next:
405   RMDir /r $INSTDIR\plugins\include
406   RMDir /r $INSTDIR\plugins
407   RMDir $INSTDIR\.blender
408   RMDir "$SMPROGRAMS\Blender Foundation\Blender"
409   RMDir "$SMPROGRAMS\Blender Foundation"
410   RMDir "$INSTDIR"
411   RMDir "$INSTDIR\.."
412 SectionEnd
413
414 !insertmacro MUI_FUNCTION_DESCRIPTION_BEGIN
415   !insertmacro MUI_DESCRIPTION_TEXT ${SecCopyUI} $(DESC_SecCopyUI)
416   !insertmacro MUI_DESCRIPTION_TEXT ${Section2} $(DESC_Section2)
417   !insertmacro MUI_DESCRIPTION_TEXT ${Section3} $(DESC_Section3)
418   !insertmacro MUI_DESCRIPTION_TEXT ${Section4} $(DESC_Section4)
419 !insertmacro MUI_FUNCTION_DESCRIPTION_END