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